Skip to content

MCP should return empty instead of error if tools / prompts / resources are not defined #181

Description

@theodormarcu

Describe the bug
Currently, if you set up a server with the tools defined, but no prompts / resources, attempting to get tools/resources will throw an error instead of returning empty.

To Reproduce
Steps to reproduce the behavior:

  1. Set up an MCP server + client
  2. Define a test tool
  3. Try calling listPrompts or listResources

Expected behavior

All list* methods (that return collections) should return empty arrays when there is nothing to return.

get* should throw an error.

Logs

Additional context

Returning an empty array is a idiomatic pattern when a collection of items is empty.

Express.js

When you query routes that don't match anything, Express returns a 404 rather than crashing
app.get('/api/items') will return an empty array [] when no items exist, not an error

React

When mapping over an empty array of items, React doesn't throw errors - it renders nothing
{items.map(item => <Component key={item.id} {...item} />)} works fine when items is empty

PostgreSQL / Sequelize

User.findAll() returns an empty array if no users exist
It only throws if the table itself doesn't exist (which would be a structural issue)

Next.js

getStaticPaths() can return an empty array if there are no dynamic routes
It doesn't error out because an empty set of paths is valid

Redux

Selectors return empty arrays or default values when querying state that doesn't exist
const todos = useSelector(state => state.todos || []) handles missing state gracefully

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingneeds confirmationNeeds confirmation that the PR is actually required or needed.needs reproneeds additional information to be able to reproduce bugpotentially closeBot recommends closing — needs maintainer review

    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)) { // Add copy buttons to all
       blocks
      (function() {
      function addCopyButtons() {
      document.querySelectorAll('pre code').forEach(function(codeBlock) {
      if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
      codeBlock.parentElement.setAttribute('data-copy-added', 'true');
      var btn = document.createElement('button');
      btn.textContent = 'Copy';
      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;';
      btn.onmouseover = function() { this.style.opacity = '1'; };
      btn.onmouseout = function() { this.style.opacity = '0.7'; };
      btn.onclick = function() {
      navigator.clipboard.writeText(codeBlock.textContent).then(function() {
      btn.textContent = 'Copied!';
      setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
      });
      };
      codeBlock.parentElement.style.position = 'relative';
      codeBlock.parentElement.appendChild(btn);
      });
      }
      addCopyButtons();
      // Re-run on dynamic content
      var observer = new MutationObserver(addCopyButtons);
      observer.observe(document.body, { childList: true, subtree: true });
      })();
      }
      } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
      })();
      (function(){
      try {
      var __m = "github.com";
      var __re = new RegExp('^' + "github\\.com" + '
      MCP should return empty instead of error if tools / prompts / resources are not defined · Issue #181 · modelcontextprotocol/typescript-sdk · GitHub
      Skip to content

      MCP should return empty instead of error if tools / prompts / resources are not defined #181

      Description

      @theodormarcu

      Describe the bug
      Currently, if you set up a server with the tools defined, but no prompts / resources, attempting to get tools/resources will throw an error instead of returning empty.

      To Reproduce
      Steps to reproduce the behavior:

      1. Set up an MCP server + client
      2. Define a test tool
      3. Try calling listPrompts or listResources

      Expected behavior

      All list* methods (that return collections) should return empty arrays when there is nothing to return.

      get* should throw an error.

      Logs

      Additional context

      Returning an empty array is a idiomatic pattern when a collection of items is empty.

      Express.js

      When you query routes that don't match anything, Express returns a 404 rather than crashing
      app.get('/api/items') will return an empty array [] when no items exist, not an error

      React

      When mapping over an empty array of items, React doesn't throw errors - it renders nothing
      {items.map(item => <Component key={item.id} {...item} />)} works fine when items is empty

      PostgreSQL / Sequelize

      User.findAll() returns an empty array if no users exist
      It only throws if the table itself doesn't exist (which would be a structural issue)

      Next.js

      getStaticPaths() can return an empty array if there are no dynamic routes
      It doesn't error out because an empty set of paths is valid

      Redux

      Selectors return empty arrays or default values when querying state that doesn't exist
      const todos = useSelector(state => state.todos || []) handles missing state gracefully

      Metadata

      Metadata

      Assignees

      No one assigned

        Labels

        bugSomething isn't workingneeds confirmationNeeds confirmation that the PR is actually required or needed.needs reproneeds additional information to be able to reproduce bugpotentially closeBot recommends closing — needs maintainer review

        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)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' MCP should return empty instead of error if tools / prompts / resources are not defined · Issue #181 · modelcontextprotocol/typescript-sdk · GitHub
          Skip to content

          MCP should return empty instead of error if tools / prompts / resources are not defined #181

          Description

          @theodormarcu

          Describe the bug
          Currently, if you set up a server with the tools defined, but no prompts / resources, attempting to get tools/resources will throw an error instead of returning empty.

          To Reproduce
          Steps to reproduce the behavior:

          1. Set up an MCP server + client
          2. Define a test tool
          3. Try calling listPrompts or listResources

          Expected behavior

          All list* methods (that return collections) should return empty arrays when there is nothing to return.

          get* should throw an error.

          Logs

          Additional context

          Returning an empty array is a idiomatic pattern when a collection of items is empty.

          Express.js

          When you query routes that don't match anything, Express returns a 404 rather than crashing
          app.get('/api/items') will return an empty array [] when no items exist, not an error

          React

          When mapping over an empty array of items, React doesn't throw errors - it renders nothing
          {items.map(item => <Component key={item.id} {...item} />)} works fine when items is empty

          PostgreSQL / Sequelize

          User.findAll() returns an empty array if no users exist
          It only throws if the table itself doesn't exist (which would be a structural issue)

          Next.js

          getStaticPaths() can return an empty array if there are no dynamic routes
          It doesn't error out because an empty set of paths is valid

          Redux

          Selectors return empty arrays or default values when querying state that doesn't exist
          const todos = useSelector(state => state.todos || []) handles missing state gracefully

          Metadata

          Metadata

          Assignees

          No one assigned

            Labels

            bugSomething isn't workingneeds confirmationNeeds confirmation that the PR is actually required or needed.needs reproneeds additional information to be able to reproduce bugpotentially closeBot recommends closing — needs maintainer review

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

              MCP should return empty instead of error if tools / prompts / resources are not defined #181

              Description

              @theodormarcu

              Describe the bug
              Currently, if you set up a server with the tools defined, but no prompts / resources, attempting to get tools/resources will throw an error instead of returning empty.

              To Reproduce
              Steps to reproduce the behavior:

              1. Set up an MCP server + client
              2. Define a test tool
              3. Try calling listPrompts or listResources

              Expected behavior

              All list* methods (that return collections) should return empty arrays when there is nothing to return.

              get* should throw an error.

              Logs

              Additional context

              Returning an empty array is a idiomatic pattern when a collection of items is empty.

              Express.js

              When you query routes that don't match anything, Express returns a 404 rather than crashing
              app.get('/api/items') will return an empty array [] when no items exist, not an error

              React

              When mapping over an empty array of items, React doesn't throw errors - it renders nothing
              {items.map(item => <Component key={item.id} {...item} />)} works fine when items is empty

              PostgreSQL / Sequelize

              User.findAll() returns an empty array if no users exist
              It only throws if the table itself doesn't exist (which would be a structural issue)

              Next.js

              getStaticPaths() can return an empty array if there are no dynamic routes
              It doesn't error out because an empty set of paths is valid

              Redux

              Selectors return empty arrays or default values when querying state that doesn't exist
              const todos = useSelector(state => state.todos || []) handles missing state gracefully

              Metadata

              Metadata

              Assignees

              No one assigned

                Labels

                bugSomething isn't workingneeds confirmationNeeds confirmation that the PR is actually required or needed.needs reproneeds additional information to be able to reproduce bugpotentially closeBot recommends closing — needs maintainer review

                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)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' MCP should return empty instead of error if tools / prompts / resources are not defined · Issue #181 · modelcontextprotocol/typescript-sdk · GitHub
                  Skip to content

                  MCP should return empty instead of error if tools / prompts / resources are not defined #181

                  Description

                  @theodormarcu

                  Describe the bug
                  Currently, if you set up a server with the tools defined, but no prompts / resources, attempting to get tools/resources will throw an error instead of returning empty.

                  To Reproduce
                  Steps to reproduce the behavior:

                  1. Set up an MCP server + client
                  2. Define a test tool
                  3. Try calling listPrompts or listResources

                  Expected behavior

                  All list* methods (that return collections) should return empty arrays when there is nothing to return.

                  get* should throw an error.

                  Logs

                  Additional context

                  Returning an empty array is a idiomatic pattern when a collection of items is empty.

                  Express.js

                  When you query routes that don't match anything, Express returns a 404 rather than crashing
                  app.get('/api/items') will return an empty array [] when no items exist, not an error

                  React

                  When mapping over an empty array of items, React doesn't throw errors - it renders nothing
                  {items.map(item => <Component key={item.id} {...item} />)} works fine when items is empty

                  PostgreSQL / Sequelize

                  User.findAll() returns an empty array if no users exist
                  It only throws if the table itself doesn't exist (which would be a structural issue)

                  Next.js

                  getStaticPaths() can return an empty array if there are no dynamic routes
                  It doesn't error out because an empty set of paths is valid

                  Redux

                  Selectors return empty arrays or default values when querying state that doesn't exist
                  const todos = useSelector(state => state.todos || []) handles missing state gracefully

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Labels

                    bugSomething isn't workingneeds confirmationNeeds confirmation that the PR is actually required or needed.needs reproneeds additional information to be able to reproduce bugpotentially closeBot recommends closing — needs maintainer review

                    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)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' MCP should return empty instead of error if tools / prompts / resources are not defined · Issue #181 · modelcontextprotocol/typescript-sdk · GitHub
                      Skip to content

                      MCP should return empty instead of error if tools / prompts / resources are not defined #181

                      Description

                      @theodormarcu

                      Describe the bug
                      Currently, if you set up a server with the tools defined, but no prompts / resources, attempting to get tools/resources will throw an error instead of returning empty.

                      To Reproduce
                      Steps to reproduce the behavior:

                      1. Set up an MCP server + client
                      2. Define a test tool
                      3. Try calling listPrompts or listResources

                      Expected behavior

                      All list* methods (that return collections) should return empty arrays when there is nothing to return.

                      get* should throw an error.

                      Logs

                      Additional context

                      Returning an empty array is a idiomatic pattern when a collection of items is empty.

                      Express.js

                      When you query routes that don't match anything, Express returns a 404 rather than crashing
                      app.get('/api/items') will return an empty array [] when no items exist, not an error

                      React

                      When mapping over an empty array of items, React doesn't throw errors - it renders nothing
                      {items.map(item => <Component key={item.id} {...item} />)} works fine when items is empty

                      PostgreSQL / Sequelize

                      User.findAll() returns an empty array if no users exist
                      It only throws if the table itself doesn't exist (which would be a structural issue)

                      Next.js

                      getStaticPaths() can return an empty array if there are no dynamic routes
                      It doesn't error out because an empty set of paths is valid

                      Redux

                      Selectors return empty arrays or default values when querying state that doesn't exist
                      const todos = useSelector(state => state.todos || []) handles missing state gracefully

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Labels

                        bugSomething isn't workingneeds confirmationNeeds confirmation that the PR is actually required or needed.needs reproneeds additional information to be able to reproduce bugpotentially closeBot recommends closing — needs maintainer review

                        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)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' MCP should return empty instead of error if tools / prompts / resources are not defined · Issue #181 · modelcontextprotocol/typescript-sdk · GitHub
                          Skip to content

                          MCP should return empty instead of error if tools / prompts / resources are not defined #181

                          Description

                          @theodormarcu

                          Describe the bug
                          Currently, if you set up a server with the tools defined, but no prompts / resources, attempting to get tools/resources will throw an error instead of returning empty.

                          To Reproduce
                          Steps to reproduce the behavior:

                          1. Set up an MCP server + client
                          2. Define a test tool
                          3. Try calling listPrompts or listResources

                          Expected behavior

                          All list* methods (that return collections) should return empty arrays when there is nothing to return.

                          get* should throw an error.

                          Logs

                          Additional context

                          Returning an empty array is a idiomatic pattern when a collection of items is empty.

                          Express.js

                          When you query routes that don't match anything, Express returns a 404 rather than crashing
                          app.get('/api/items') will return an empty array [] when no items exist, not an error

                          React

                          When mapping over an empty array of items, React doesn't throw errors - it renders nothing
                          {items.map(item => <Component key={item.id} {...item} />)} works fine when items is empty

                          PostgreSQL / Sequelize

                          User.findAll() returns an empty array if no users exist
                          It only throws if the table itself doesn't exist (which would be a structural issue)

                          Next.js

                          getStaticPaths() can return an empty array if there are no dynamic routes
                          It doesn't error out because an empty set of paths is valid

                          Redux

                          Selectors return empty arrays or default values when querying state that doesn't exist
                          const todos = useSelector(state => state.todos || []) handles missing state gracefully

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Labels

                            bugSomething isn't workingneeds confirmationNeeds confirmation that the PR is actually required or needed.needs reproneeds additional information to be able to reproduce bugpotentially closeBot recommends closing — needs maintainer review

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

                              MCP should return empty instead of error if tools / prompts / resources are not defined #181

                              Description

                              @theodormarcu

                              Describe the bug
                              Currently, if you set up a server with the tools defined, but no prompts / resources, attempting to get tools/resources will throw an error instead of returning empty.

                              To Reproduce
                              Steps to reproduce the behavior:

                              1. Set up an MCP server + client
                              2. Define a test tool
                              3. Try calling listPrompts or listResources

                              Expected behavior

                              All list* methods (that return collections) should return empty arrays when there is nothing to return.

                              get* should throw an error.

                              Logs

                              Additional context

                              Returning an empty array is a idiomatic pattern when a collection of items is empty.

                              Express.js

                              When you query routes that don't match anything, Express returns a 404 rather than crashing
                              app.get('/api/items') will return an empty array [] when no items exist, not an error

                              React

                              When mapping over an empty array of items, React doesn't throw errors - it renders nothing
                              {items.map(item => <Component key={item.id} {...item} />)} works fine when items is empty

                              PostgreSQL / Sequelize

                              User.findAll() returns an empty array if no users exist
                              It only throws if the table itself doesn't exist (which would be a structural issue)

                              Next.js

                              getStaticPaths() can return an empty array if there are no dynamic routes
                              It doesn't error out because an empty set of paths is valid

                              Redux

                              Selectors return empty arrays or default values when querying state that doesn't exist
                              const todos = useSelector(state => state.todos || []) handles missing state gracefully

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Labels

                                bugSomething isn't workingneeds confirmationNeeds confirmation that the PR is actually required or needed.needs reproneeds additional information to be able to reproduce bugpotentially closeBot recommends closing — needs maintainer review

                                Type

                                No type

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions