finding(data-objectstack): createObjectStackAdapter declares DataSource as its return, so the whole adapter API its own README documents is unreachable in TypeScript #7323

Description

@yinlianghui

Found while bringing packages/data-objectstack/README.md under check:doc-snippet-types (#5174 batch 8). Filed rather than fixed: packages/*/src is outside that PR's surface.

What the shipped declaration says

packages/data-objectstack/dist/index.d.ts:

declare function createObjectStackAdapter<T = unknown>(config: { ... }): DataSource<T>;

DataSource is @object-ui/types' interface (packages/types/dist/data.d.ts:292). It declares find, findOne, create, update, delete, bulk, batchTransaction, getObjectSchema, aggregate and the import/export job surface — and none of the adapter-only members.

The measured consequence

Compiled against the built dist with the doc-snippet gate's own compiler options and module resolution:

import { createObjectStackAdapter } from '@object-ui/data-objectstack';
declare const dataSource: ReturnType<typeof createObjectStackAdapter>;
dataSource.getClient();
dataSource.getCacheStats();
dataSource.invalidateCache('users');
dataSource.clearCache();
TS2339 Property 'getClient' does not exist on type 'DataSource<unknown>'.
TS2339 Property 'getCacheStats' does not exist on type 'DataSource<unknown>'.
TS2339 Property 'invalidateCache' does not exist on type 'DataSource<unknown>'.
TS2339 Property 'clearCache' does not exist on type 'DataSource<unknown>'.

The same four, plus getConnectionState, isConnected, onConnectionStateChange and onBatchProgress, are exactly the members packages/data-objectstack/README.md's own API Reference — ObjectStackAdapter — Methods list documents, and that four whole README sections (Metadata Caching, Connection State Monitoring, Batch Operation Progress, Troubleshooting/Cache Issues) are built around. The declaration typing the exported ObjectStackAdapter class carries all of them; only the factory's declared return narrows them away.

So a reader who follows the README's own Basic Setup — const dataSource = createObjectStackAdapter({ baseUrl }) — and then follows any of those four sections does not compile. The runtime object has the methods; the declared type does not admit them.

Why this is a producer-side gap, not a doc bug

The methods are real, exported and documented; there is nothing to correct on the page. The cast-free escape a consumer has today is to construct the class instead (new ObjectStackAdapter(config)), which the README's own API Reference documents as public — so the two supported ways of obtaining the same object give different type surfaces.

Options

  • A. Widen the factory's declared return to the adapter's own type: createObjectStackAdapter(config): ObjectStackAdapter (or DataSource<T> and ObjectStackAdapter). One line, and it makes declared match shipped for every documented member at once.
  • B. Leave the narrow return and add the missing members to DataSource. Wrong shape: caching, connection state and batch progress are this adapter's concerns, not every data source's, and every other DataSource implementation would then be declaring members it does not have.
  • C. Document the cast. Cheapest, and the worst of the three under the "declared = enforced" rule — it teaches a cast around a declaration that is simply narrower than the value.

Recommendation: A.

Where this shows up now

Batch 8 ships those README blocks compiling, by declaring the adapter as the exported ObjectStackAdapter class — truthful about the object, and about the one supported way to obtain that type today — and adds a short note to the README's setup section naming this card, so the page does not silently teach a shape the factory's return will reject. The note comes out when this is fixed.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

bugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:dispatchedpriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
     blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    
    Skip to content

    finding(data-objectstack): createObjectStackAdapter declares DataSource as its return, so the whole adapter API its own README documents is unreachable in TypeScript #7323

    Description

    @yinlianghui

    Found while bringing packages/data-objectstack/README.md under check:doc-snippet-types (#5174 batch 8). Filed rather than fixed: packages/*/src is outside that PR's surface.

    What the shipped declaration says

    packages/data-objectstack/dist/index.d.ts:

    declare function createObjectStackAdapter<T = unknown>(config: { ... }): DataSource<T>;
    

    DataSource is @object-ui/types' interface (packages/types/dist/data.d.ts:292). It declares find, findOne, create, update, delete, bulk, batchTransaction, getObjectSchema, aggregate and the import/export job surface — and none of the adapter-only members.

    The measured consequence

    Compiled against the built dist with the doc-snippet gate's own compiler options and module resolution:

    import { createObjectStackAdapter } from '@object-ui/data-objectstack';
    declare const dataSource: ReturnType<typeof createObjectStackAdapter>;
    dataSource.getClient();
    dataSource.getCacheStats();
    dataSource.invalidateCache('users');
    dataSource.clearCache();
    
    TS2339 Property 'getClient' does not exist on type 'DataSource<unknown>'.
    TS2339 Property 'getCacheStats' does not exist on type 'DataSource<unknown>'.
    TS2339 Property 'invalidateCache' does not exist on type 'DataSource<unknown>'.
    TS2339 Property 'clearCache' does not exist on type 'DataSource<unknown>'.
    

    The same four, plus getConnectionState, isConnected, onConnectionStateChange and onBatchProgress, are exactly the members packages/data-objectstack/README.md's own API Reference — ObjectStackAdapter — Methods list documents, and that four whole README sections (Metadata Caching, Connection State Monitoring, Batch Operation Progress, Troubleshooting/Cache Issues) are built around. The declaration typing the exported ObjectStackAdapter class carries all of them; only the factory's declared return narrows them away.

    So a reader who follows the README's own Basic Setup — const dataSource = createObjectStackAdapter({ baseUrl }) — and then follows any of those four sections does not compile. The runtime object has the methods; the declared type does not admit them.

    Why this is a producer-side gap, not a doc bug

    The methods are real, exported and documented; there is nothing to correct on the page. The cast-free escape a consumer has today is to construct the class instead (new ObjectStackAdapter(config)), which the README's own API Reference documents as public — so the two supported ways of obtaining the same object give different type surfaces.

    Options

    • A. Widen the factory's declared return to the adapter's own type: createObjectStackAdapter(config): ObjectStackAdapter (or DataSource<T> and ObjectStackAdapter). One line, and it makes declared match shipped for every documented member at once.
    • B. Leave the narrow return and add the missing members to DataSource. Wrong shape: caching, connection state and batch progress are this adapter's concerns, not every data source's, and every other DataSource implementation would then be declaring members it does not have.
    • C. Document the cast. Cheapest, and the worst of the three under the "declared = enforced" rule — it teaches a cast around a declaration that is simply narrower than the value.

    Recommendation: A.

    Where this shows up now

    Batch 8 ships those README blocks compiling, by declaring the adapter as the exported ObjectStackAdapter class — truthful about the object, and about the one supported way to obtain that type today — and adds a short note to the README's setup section naming this card, so the page does not silently teach a shape the factory's return will reject. The note comes out when this is fixed.

    Activity

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Labels

    bugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:dispatchedpriority:p2

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
      Skip to content

      finding(data-objectstack): createObjectStackAdapter declares DataSource as its return, so the whole adapter API its own README documents is unreachable in TypeScript #7323

      Description

      @yinlianghui

      Found while bringing packages/data-objectstack/README.md under check:doc-snippet-types (#5174 batch 8). Filed rather than fixed: packages/*/src is outside that PR's surface.

      What the shipped declaration says

      packages/data-objectstack/dist/index.d.ts:

      declare function createObjectStackAdapter<T = unknown>(config: { ... }): DataSource<T>;
      

      DataSource is @object-ui/types' interface (packages/types/dist/data.d.ts:292). It declares find, findOne, create, update, delete, bulk, batchTransaction, getObjectSchema, aggregate and the import/export job surface — and none of the adapter-only members.

      The measured consequence

      Compiled against the built dist with the doc-snippet gate's own compiler options and module resolution:

      import { createObjectStackAdapter } from '@object-ui/data-objectstack';
      declare const dataSource: ReturnType<typeof createObjectStackAdapter>;
      dataSource.getClient();
      dataSource.getCacheStats();
      dataSource.invalidateCache('users');
      dataSource.clearCache();
      
      TS2339 Property 'getClient' does not exist on type 'DataSource<unknown>'.
      TS2339 Property 'getCacheStats' does not exist on type 'DataSource<unknown>'.
      TS2339 Property 'invalidateCache' does not exist on type 'DataSource<unknown>'.
      TS2339 Property 'clearCache' does not exist on type 'DataSource<unknown>'.
      

      The same four, plus getConnectionState, isConnected, onConnectionStateChange and onBatchProgress, are exactly the members packages/data-objectstack/README.md's own API Reference — ObjectStackAdapter — Methods list documents, and that four whole README sections (Metadata Caching, Connection State Monitoring, Batch Operation Progress, Troubleshooting/Cache Issues) are built around. The declaration typing the exported ObjectStackAdapter class carries all of them; only the factory's declared return narrows them away.

      So a reader who follows the README's own Basic Setup — const dataSource = createObjectStackAdapter({ baseUrl }) — and then follows any of those four sections does not compile. The runtime object has the methods; the declared type does not admit them.

      Why this is a producer-side gap, not a doc bug

      The methods are real, exported and documented; there is nothing to correct on the page. The cast-free escape a consumer has today is to construct the class instead (new ObjectStackAdapter(config)), which the README's own API Reference documents as public — so the two supported ways of obtaining the same object give different type surfaces.

      Options

      • A. Widen the factory's declared return to the adapter's own type: createObjectStackAdapter(config): ObjectStackAdapter (or DataSource<T> and ObjectStackAdapter). One line, and it makes declared match shipped for every documented member at once.
      • B. Leave the narrow return and add the missing members to DataSource. Wrong shape: caching, connection state and batch progress are this adapter's concerns, not every data source's, and every other DataSource implementation would then be declaring members it does not have.
      • C. Document the cast. Cheapest, and the worst of the three under the "declared = enforced" rule — it teaches a cast around a declaration that is simply narrower than the value.

      Recommendation: A.

      Where this shows up now

      Batch 8 ships those README blocks compiling, by declaring the adapter as the exported ObjectStackAdapter class — truthful about the object, and about the one supported way to obtain that type today — and adds a short note to the README's setup section naming this card, so the page does not silently teach a shape the factory's return will reject. The note comes out when this is fixed.

      Activity

      Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

      Metadata

      Metadata

      Labels

      bugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:dispatchedpriority:p2

      Type

      No type

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
        Skip to content

        finding(data-objectstack): createObjectStackAdapter declares DataSource as its return, so the whole adapter API its own README documents is unreachable in TypeScript #7323

        Description

        @yinlianghui

        Found while bringing packages/data-objectstack/README.md under check:doc-snippet-types (#5174 batch 8). Filed rather than fixed: packages/*/src is outside that PR's surface.

        What the shipped declaration says

        packages/data-objectstack/dist/index.d.ts:

        declare function createObjectStackAdapter<T = unknown>(config: { ... }): DataSource<T>;
        

        DataSource is @object-ui/types' interface (packages/types/dist/data.d.ts:292). It declares find, findOne, create, update, delete, bulk, batchTransaction, getObjectSchema, aggregate and the import/export job surface — and none of the adapter-only members.

        The measured consequence

        Compiled against the built dist with the doc-snippet gate's own compiler options and module resolution:

        import { createObjectStackAdapter } from '@object-ui/data-objectstack';
        declare const dataSource: ReturnType<typeof createObjectStackAdapter>;
        dataSource.getClient();
        dataSource.getCacheStats();
        dataSource.invalidateCache('users');
        dataSource.clearCache();
        
        TS2339 Property 'getClient' does not exist on type 'DataSource<unknown>'.
        TS2339 Property 'getCacheStats' does not exist on type 'DataSource<unknown>'.
        TS2339 Property 'invalidateCache' does not exist on type 'DataSource<unknown>'.
        TS2339 Property 'clearCache' does not exist on type 'DataSource<unknown>'.
        

        The same four, plus getConnectionState, isConnected, onConnectionStateChange and onBatchProgress, are exactly the members packages/data-objectstack/README.md's own API Reference — ObjectStackAdapter — Methods list documents, and that four whole README sections (Metadata Caching, Connection State Monitoring, Batch Operation Progress, Troubleshooting/Cache Issues) are built around. The declaration typing the exported ObjectStackAdapter class carries all of them; only the factory's declared return narrows them away.

        So a reader who follows the README's own Basic Setup — const dataSource = createObjectStackAdapter({ baseUrl }) — and then follows any of those four sections does not compile. The runtime object has the methods; the declared type does not admit them.

        Why this is a producer-side gap, not a doc bug

        The methods are real, exported and documented; there is nothing to correct on the page. The cast-free escape a consumer has today is to construct the class instead (new ObjectStackAdapter(config)), which the README's own API Reference documents as public — so the two supported ways of obtaining the same object give different type surfaces.

        Options

        • A. Widen the factory's declared return to the adapter's own type: createObjectStackAdapter(config): ObjectStackAdapter (or DataSource<T> and ObjectStackAdapter). One line, and it makes declared match shipped for every documented member at once.
        • B. Leave the narrow return and add the missing members to DataSource. Wrong shape: caching, connection state and batch progress are this adapter's concerns, not every data source's, and every other DataSource implementation would then be declaring members it does not have.
        • C. Document the cast. Cheapest, and the worst of the three under the "declared = enforced" rule — it teaches a cast around a declaration that is simply narrower than the value.

        Recommendation: A.

        Where this shows up now

        Batch 8 ships those README blocks compiling, by declaring the adapter as the exported ObjectStackAdapter class — truthful about the object, and about the one supported way to obtain that type today — and adds a short note to the README's setup section naming this card, so the page does not silently teach a shape the factory's return will reject. The note comes out when this is fixed.

        Activity

        Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

        Metadata

        Metadata

        Labels

        bugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:dispatchedpriority:p2

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
          Skip to content

          finding(data-objectstack): createObjectStackAdapter declares DataSource as its return, so the whole adapter API its own README documents is unreachable in TypeScript #7323

          Description

          @yinlianghui

          Found while bringing packages/data-objectstack/README.md under check:doc-snippet-types (#5174 batch 8). Filed rather than fixed: packages/*/src is outside that PR's surface.

          What the shipped declaration says

          packages/data-objectstack/dist/index.d.ts:

          declare function createObjectStackAdapter<T = unknown>(config: { ... }): DataSource<T>;
          

          DataSource is @object-ui/types' interface (packages/types/dist/data.d.ts:292). It declares find, findOne, create, update, delete, bulk, batchTransaction, getObjectSchema, aggregate and the import/export job surface — and none of the adapter-only members.

          The measured consequence

          Compiled against the built dist with the doc-snippet gate's own compiler options and module resolution:

          import { createObjectStackAdapter } from '@object-ui/data-objectstack';
          declare const dataSource: ReturnType<typeof createObjectStackAdapter>;
          dataSource.getClient();
          dataSource.getCacheStats();
          dataSource.invalidateCache('users');
          dataSource.clearCache();
          
          TS2339 Property 'getClient' does not exist on type 'DataSource<unknown>'.
          TS2339 Property 'getCacheStats' does not exist on type 'DataSource<unknown>'.
          TS2339 Property 'invalidateCache' does not exist on type 'DataSource<unknown>'.
          TS2339 Property 'clearCache' does not exist on type 'DataSource<unknown>'.
          

          The same four, plus getConnectionState, isConnected, onConnectionStateChange and onBatchProgress, are exactly the members packages/data-objectstack/README.md's own API Reference — ObjectStackAdapter — Methods list documents, and that four whole README sections (Metadata Caching, Connection State Monitoring, Batch Operation Progress, Troubleshooting/Cache Issues) are built around. The declaration typing the exported ObjectStackAdapter class carries all of them; only the factory's declared return narrows them away.

          So a reader who follows the README's own Basic Setup — const dataSource = createObjectStackAdapter({ baseUrl }) — and then follows any of those four sections does not compile. The runtime object has the methods; the declared type does not admit them.

          Why this is a producer-side gap, not a doc bug

          The methods are real, exported and documented; there is nothing to correct on the page. The cast-free escape a consumer has today is to construct the class instead (new ObjectStackAdapter(config)), which the README's own API Reference documents as public — so the two supported ways of obtaining the same object give different type surfaces.

          Options

          • A. Widen the factory's declared return to the adapter's own type: createObjectStackAdapter(config): ObjectStackAdapter (or DataSource<T> and ObjectStackAdapter). One line, and it makes declared match shipped for every documented member at once.
          • B. Leave the narrow return and add the missing members to DataSource. Wrong shape: caching, connection state and batch progress are this adapter's concerns, not every data source's, and every other DataSource implementation would then be declaring members it does not have.
          • C. Document the cast. Cheapest, and the worst of the three under the "declared = enforced" rule — it teaches a cast around a declaration that is simply narrower than the value.

          Recommendation: A.

          Where this shows up now

          Batch 8 ships those README blocks compiling, by declaring the adapter as the exported ObjectStackAdapter class — truthful about the object, and about the one supported way to obtain that type today — and adds a short note to the README's setup section naming this card, so the page does not silently teach a shape the factory's return will reject. The note comes out when this is fixed.

          Activity

          Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

          Metadata

          Metadata

          Labels

          bugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:dispatchedpriority:p2

          Type

          No type

          Projects

          No projects

            Milestone

            No milestone

            Relationships

            None yet

            Development

            No branches or pull requests

            Issue actions

            , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
            Skip to content

            finding(data-objectstack): createObjectStackAdapter declares DataSource as its return, so the whole adapter API its own README documents is unreachable in TypeScript #7323

            Description

            @yinlianghui

            Found while bringing packages/data-objectstack/README.md under check:doc-snippet-types (#5174 batch 8). Filed rather than fixed: packages/*/src is outside that PR's surface.

            What the shipped declaration says

            packages/data-objectstack/dist/index.d.ts:

            declare function createObjectStackAdapter<T = unknown>(config: { ... }): DataSource<T>;
            

            DataSource is @object-ui/types' interface (packages/types/dist/data.d.ts:292). It declares find, findOne, create, update, delete, bulk, batchTransaction, getObjectSchema, aggregate and the import/export job surface — and none of the adapter-only members.

            The measured consequence

            Compiled against the built dist with the doc-snippet gate's own compiler options and module resolution:

            import { createObjectStackAdapter } from '@object-ui/data-objectstack';
            declare const dataSource: ReturnType<typeof createObjectStackAdapter>;
            dataSource.getClient();
            dataSource.getCacheStats();
            dataSource.invalidateCache('users');
            dataSource.clearCache();
            
            TS2339 Property 'getClient' does not exist on type 'DataSource<unknown>'.
            TS2339 Property 'getCacheStats' does not exist on type 'DataSource<unknown>'.
            TS2339 Property 'invalidateCache' does not exist on type 'DataSource<unknown>'.
            TS2339 Property 'clearCache' does not exist on type 'DataSource<unknown>'.
            

            The same four, plus getConnectionState, isConnected, onConnectionStateChange and onBatchProgress, are exactly the members packages/data-objectstack/README.md's own API Reference — ObjectStackAdapter — Methods list documents, and that four whole README sections (Metadata Caching, Connection State Monitoring, Batch Operation Progress, Troubleshooting/Cache Issues) are built around. The declaration typing the exported ObjectStackAdapter class carries all of them; only the factory's declared return narrows them away.

            So a reader who follows the README's own Basic Setup — const dataSource = createObjectStackAdapter({ baseUrl }) — and then follows any of those four sections does not compile. The runtime object has the methods; the declared type does not admit them.

            Why this is a producer-side gap, not a doc bug

            The methods are real, exported and documented; there is nothing to correct on the page. The cast-free escape a consumer has today is to construct the class instead (new ObjectStackAdapter(config)), which the README's own API Reference documents as public — so the two supported ways of obtaining the same object give different type surfaces.

            Options

            • A. Widen the factory's declared return to the adapter's own type: createObjectStackAdapter(config): ObjectStackAdapter (or DataSource<T> and ObjectStackAdapter). One line, and it makes declared match shipped for every documented member at once.
            • B. Leave the narrow return and add the missing members to DataSource. Wrong shape: caching, connection state and batch progress are this adapter's concerns, not every data source's, and every other DataSource implementation would then be declaring members it does not have.
            • C. Document the cast. Cheapest, and the worst of the three under the "declared = enforced" rule — it teaches a cast around a declaration that is simply narrower than the value.

            Recommendation: A.

            Where this shows up now

            Batch 8 ships those README blocks compiling, by declaring the adapter as the exported ObjectStackAdapter class — truthful about the object, and about the one supported way to obtain that type today — and adds a short note to the README's setup section naming this card, so the page does not silently teach a shape the factory's return will reject. The note comes out when this is fixed.

            Activity

            Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

            Metadata

            Metadata

            Labels

            bugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:dispatchedpriority:p2

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              finding(data-objectstack): createObjectStackAdapter declares DataSource as its return, so the whole adapter API its own README documents is unreachable in TypeScript #7323

              Description

              @yinlianghui

              Found while bringing packages/data-objectstack/README.md under check:doc-snippet-types (#5174 batch 8). Filed rather than fixed: packages/*/src is outside that PR's surface.

              What the shipped declaration says

              packages/data-objectstack/dist/index.d.ts:

              declare function createObjectStackAdapter<T = unknown>(config: { ... }): DataSource<T>;
              

              DataSource is @object-ui/types' interface (packages/types/dist/data.d.ts:292). It declares find, findOne, create, update, delete, bulk, batchTransaction, getObjectSchema, aggregate and the import/export job surface — and none of the adapter-only members.

              The measured consequence

              Compiled against the built dist with the doc-snippet gate's own compiler options and module resolution:

              import { createObjectStackAdapter } from '@object-ui/data-objectstack';
              declare const dataSource: ReturnType<typeof createObjectStackAdapter>;
              dataSource.getClient();
              dataSource.getCacheStats();
              dataSource.invalidateCache('users');
              dataSource.clearCache();
              
              TS2339 Property 'getClient' does not exist on type 'DataSource<unknown>'.
              TS2339 Property 'getCacheStats' does not exist on type 'DataSource<unknown>'.
              TS2339 Property 'invalidateCache' does not exist on type 'DataSource<unknown>'.
              TS2339 Property 'clearCache' does not exist on type 'DataSource<unknown>'.
              

              The same four, plus getConnectionState, isConnected, onConnectionStateChange and onBatchProgress, are exactly the members packages/data-objectstack/README.md's own API Reference — ObjectStackAdapter — Methods list documents, and that four whole README sections (Metadata Caching, Connection State Monitoring, Batch Operation Progress, Troubleshooting/Cache Issues) are built around. The declaration typing the exported ObjectStackAdapter class carries all of them; only the factory's declared return narrows them away.

              So a reader who follows the README's own Basic Setup — const dataSource = createObjectStackAdapter({ baseUrl }) — and then follows any of those four sections does not compile. The runtime object has the methods; the declared type does not admit them.

              Why this is a producer-side gap, not a doc bug

              The methods are real, exported and documented; there is nothing to correct on the page. The cast-free escape a consumer has today is to construct the class instead (new ObjectStackAdapter(config)), which the README's own API Reference documents as public — so the two supported ways of obtaining the same object give different type surfaces.

              Options

              • A. Widen the factory's declared return to the adapter's own type: createObjectStackAdapter(config): ObjectStackAdapter (or DataSource<T> and ObjectStackAdapter). One line, and it makes declared match shipped for every documented member at once.
              • B. Leave the narrow return and add the missing members to DataSource. Wrong shape: caching, connection state and batch progress are this adapter's concerns, not every data source's, and every other DataSource implementation would then be declaring members it does not have.
              • C. Document the cast. Cheapest, and the worst of the three under the "declared = enforced" rule — it teaches a cast around a declaration that is simply narrower than the value.

              Recommendation: A.

              Where this shows up now

              Batch 8 ships those README blocks compiling, by declaring the adapter as the exported ObjectStackAdapter class — truthful about the object, and about the one supported way to obtain that type today — and adds a short note to the README's setup section naming this card, so the page does not silently teach a shape the factory's return will reject. The note comes out when this is fixed.

              Activity

              Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

              Metadata

              Metadata

              Labels

              bugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:dispatchedpriority:p2

              Type

              No type

              Projects

              No projects

                Milestone

                No milestone

                Relationships

                None yet

                Development

                No branches or pull requests

                Issue actions

                , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                Skip to content

                finding(data-objectstack): createObjectStackAdapter declares DataSource as its return, so the whole adapter API its own README documents is unreachable in TypeScript #7323

                Description

                @yinlianghui

                Found while bringing packages/data-objectstack/README.md under check:doc-snippet-types (#5174 batch 8). Filed rather than fixed: packages/*/src is outside that PR's surface.

                What the shipped declaration says

                packages/data-objectstack/dist/index.d.ts:

                declare function createObjectStackAdapter<T = unknown>(config: { ... }): DataSource<T>;
                

                DataSource is @object-ui/types' interface (packages/types/dist/data.d.ts:292). It declares find, findOne, create, update, delete, bulk, batchTransaction, getObjectSchema, aggregate and the import/export job surface — and none of the adapter-only members.

                The measured consequence

                Compiled against the built dist with the doc-snippet gate's own compiler options and module resolution:

                import { createObjectStackAdapter } from '@object-ui/data-objectstack';
                declare const dataSource: ReturnType<typeof createObjectStackAdapter>;
                dataSource.getClient();
                dataSource.getCacheStats();
                dataSource.invalidateCache('users');
                dataSource.clearCache();
                
                TS2339 Property 'getClient' does not exist on type 'DataSource<unknown>'.
                TS2339 Property 'getCacheStats' does not exist on type 'DataSource<unknown>'.
                TS2339 Property 'invalidateCache' does not exist on type 'DataSource<unknown>'.
                TS2339 Property 'clearCache' does not exist on type 'DataSource<unknown>'.
                

                The same four, plus getConnectionState, isConnected, onConnectionStateChange and onBatchProgress, are exactly the members packages/data-objectstack/README.md's own API Reference — ObjectStackAdapter — Methods list documents, and that four whole README sections (Metadata Caching, Connection State Monitoring, Batch Operation Progress, Troubleshooting/Cache Issues) are built around. The declaration typing the exported ObjectStackAdapter class carries all of them; only the factory's declared return narrows them away.

                So a reader who follows the README's own Basic Setup — const dataSource = createObjectStackAdapter({ baseUrl }) — and then follows any of those four sections does not compile. The runtime object has the methods; the declared type does not admit them.

                Why this is a producer-side gap, not a doc bug

                The methods are real, exported and documented; there is nothing to correct on the page. The cast-free escape a consumer has today is to construct the class instead (new ObjectStackAdapter(config)), which the README's own API Reference documents as public — so the two supported ways of obtaining the same object give different type surfaces.

                Options

                • A. Widen the factory's declared return to the adapter's own type: createObjectStackAdapter(config): ObjectStackAdapter (or DataSource<T> and ObjectStackAdapter). One line, and it makes declared match shipped for every documented member at once.
                • B. Leave the narrow return and add the missing members to DataSource. Wrong shape: caching, connection state and batch progress are this adapter's concerns, not every data source's, and every other DataSource implementation would then be declaring members it does not have.
                • C. Document the cast. Cheapest, and the worst of the three under the "declared = enforced" rule — it teaches a cast around a declaration that is simply narrower than the value.

                Recommendation: A.

                Where this shows up now

                Batch 8 ships those README blocks compiling, by declaring the adapter as the exported ObjectStackAdapter class — truthful about the object, and about the one supported way to obtain that type today — and adds a short note to the README's setup section naming this card, so the page does not silently teach a shape the factory's return will reject. The note comes out when this is fixed.

                Activity

                Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

                Metadata

                Metadata

                Labels

                bugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:dispatchedpriority:p2

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions