[{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63604","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63604/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63604/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63604/events","html_url":"https://github.com/microsoft/TypeScript/pull/63604","id":4788925845,"node_id":"PR_kwDOAT9aAc7s2MV2","number":63604,"title":"fix(completions): exclude `default` keyword from expression-body arrow function completions","user":{"login":"tsushanth","id":78000697,"node_id":"MDQ6VXNlcjc4MDAwNjk3","avatar_url":"https://avatars.githubusercontent.com/u/78000697?v=4","gravatar_id":"","url":"https://api.github.com/users/tsushanth","html_url":"https://github.com/tsushanth","followers_url":"https://api.github.com/users/tsushanth/followers","following_url":"https://api.github.com/users/tsushanth/following{/other_user}","gists_url":"https://api.github.com/users/tsushanth/gists{/gist_id}","starred_url":"https://api.github.com/users/tsushanth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tsushanth/subscriptions","organizations_url":"https://api.github.com/users/tsushanth/orgs","repos_url":"https://api.github.com/users/tsushanth/repos","events_url":"https://api.github.com/users/tsushanth/events{/privacy}","received_events_url":"https://api.github.com/users/tsushanth/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":1820464799,"node_id":"MDU6TGFiZWwxODIwNDY0Nzk5","url":"https://api.github.com/repos/microsoft/TypeScript/labels/For%20Backlog%20Bug","name":"For Backlog Bug","color":"9ff4ed","default":false,"description":"PRs that fix a backlog bug"}],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":0,"created_at":"2026-07-01T20:19:40Z","updated_at":"2026-07-01T20:23:10Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/microsoft/TypeScript/pulls/63604","html_url":"https://github.com/microsoft/TypeScript/pull/63604","diff_url":"https://github.com/microsoft/TypeScript/pull/63604.diff","patch_url":"https://github.com/microsoft/TypeScript/pull/63604.patch","merged_at":null},"body":"Fixes #63463\n\n## Problem\n\n`default` appeared as a keyword completion inside expression-bodied arrow functions:\n\n```ts\n(d, defaultIsAnInvalidParameterName) => d\n//                                       ^ `default` offered here — invalid\n```\n\nTwo existing fourslash tests already acknowledged this with `TODO` and \"probably stop working\" comments.\n\n## Root cause\n\n`getRelevantTokens` sets `contextToken` to the **`=>` token** (the preceding token before the identifier/keyword being typed). Inside `tryGetFunctionLikeBodyCompletionContainer`, `findAncestor` starts at `contextToken.parent` (the `ArrowFunction`) with `prev = undefined`, so the check `prev === node.body` never matches on the first iteration. The function returns `undefined`, and `getGlobalCompletions` falls back to `KeywordCompletionFilters.All`, which includes every `isFunctionLikeBodyKeyword` hit — and `default` passes that test because it is neither a contextual keyword nor a class-member keyword.\n\n## Fix\n\n1. **Detect the expression-body `=>` context** directly in `tryGetFunctionLikeBodyCompletionContainer`: when `contextToken` is `EqualsGreaterThanToken` whose parent is an `ArrowFunction` with a non-block body, return that arrow function as the container.\n\n2. **Add `FunctionLikeExpressionBodyKeywords` filter** that delegates to `isFunctionLikeBodyKeyword` but excludes `DefaultKeyword`.\n\n3. **In `getGlobalCompletions`**, use the new filter when the detected container has a non-block body, so `default` is omitted only in expression-body contexts. Block bodies (including `switch`/`default:` inside functions) are unaffected.\n\n4. **Update the two fourslash tests** to assert `excludes: [\"default\"]` instead of including the TODO/known-bad expectation.\n\n## Tests\n\n- `completionListAtEndOfWordInArrowFunction02.ts` — updated, passes\n- `completionListAtEndOfWordInArrowFunction03.ts` — updated, passes\n- All 307 `completionList*` fourslash tests pass\n- `completionListKeywords.ts` (global scope `default`) continues to pass","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63604/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63604/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63603","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63603/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63603/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63603/events","html_url":"https://github.com/microsoft/TypeScript/issues/63603","id":4783403397,"node_id":"I_kwDOAT9aAc8AAAABHRzxhQ","number":63603,"title":"Issue: TypeScript autocomplete for template literal types ignores user's Quote Style preference","user":{"login":"Gabilabrebi","id":39853761,"node_id":"MDQ6VXNlcjM5ODUzNzYx","avatar_url":"https://avatars.githubusercontent.com/u/39853761?v=4","gravatar_id":"","url":"https://api.github.com/users/Gabilabrebi","html_url":"https://github.com/Gabilabrebi","followers_url":"https://api.github.com/users/Gabilabrebi/followers","following_url":"https://api.github.com/users/Gabilabrebi/following{/other_user}","gists_url":"https://api.github.com/users/Gabilabrebi/gists{/gist_id}","starred_url":"https://api.github.com/users/Gabilabrebi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Gabilabrebi/subscriptions","organizations_url":"https://api.github.com/users/Gabilabrebi/orgs","repos_url":"https://api.github.com/users/Gabilabrebi/repos","events_url":"https://api.github.com/users/Gabilabrebi/events{/privacy}","received_events_url":"https://api.github.com/users/Gabilabrebi/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":0,"created_at":"2026-07-01T07:25:32Z","updated_at":"2026-07-01T07:25:32Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### 🔎 Search Terms\n\nList of keywords : \"double\",  \"quote\",  \"preference\", \"style\", \"autcomplete\", \"template\",  \"literral\"\n\n### 🕗 Version & Regression Information\n\nTS Version : 6.0.3 or 7.0-rc\n\n\n### ⏯ Playground Link\n\nhttps://www.typescriptlang.org/play/?#code/C4TwDgpgBAKghgIwDYQHJwLbQLxQOTACMeUAPvsAEx4DcAUKJFAMID2SArhgHbpZS48ASwAmJcngBucThFoNw0eMghtOPAVAAGAEgDeylHwgBfAHT61XXplNb6jaAClWQ7pr10oUVtwBcUAAKcABOwEIyADwAShAAxqwhIpGGquzWADSwiChWPAB8+fQm9AncAM7AUMAQlQEubh5ePv5Qnt5QzSZ0JUA\n\n### 💻 Code\n\n```ts\ntype TableName = 't1' | 't2';\ntype ColumnName = 'id' | 'value';\ntype TableColumn = `${TableName}.${ColumnName}`;\n\ntype Join = {\n  on: Partial<Record<TableColumn, TableColumn>>;\n};\n\nconst test: Join = {\n  on: {\n    // Trigger autocomplete inside the object\n  }\n};\n```\n\n\n### 🙁 Actual behavior\n\nThe key is inserted using double quotes (e.g., \"t1.id\": ...), overriding the user's preference for single quotes.\n\n### 🙂 Expected behavior\n\nThe key should be inserted using the quote style defined in the editor's preferences (e.g., single quotes if 'single' is selected).\n\n### Additional information about the issue\n\nWhen using template literal types as keys in a Record or object mapping, the TypeScript language service's autocomplete functionality consistently forces double quotes (\") when inserting the suggested keys, regardless of the user's configured javascript.preferences.quoteStyle or typescript.preferences.quoteStyle settings.\n\n\nhttps://github.com/user-attachments/assets/e562b5ab-bbd7-48bd-96f8-a9181f03ba2e\n\nThis behavior is inconsistent with how standard string keys or property names are handled and complicates code consistency when working with complex template literal types in type-safe mappings.","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63603/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63603/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63601","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63601/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63601/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63601/events","html_url":"https://github.com/microsoft/TypeScript/issues/63601","id":4775208218,"node_id":"I_kwDOAT9aAc8AAAABHJ_lGg","number":63601,"title":"@typescript/typescript6 does not have all versions that regular v6 branch has","user":{"login":"ZuBB","id":597016,"node_id":"MDQ6VXNlcjU5NzAxNg==","avatar_url":"https://avatars.githubusercontent.com/u/597016?v=4","gravatar_id":"","url":"https://api.github.com/users/ZuBB","html_url":"https://github.com/ZuBB","followers_url":"https://api.github.com/users/ZuBB/followers","following_url":"https://api.github.com/users/ZuBB/following{/other_user}","gists_url":"https://api.github.com/users/ZuBB/gists{/gist_id}","starred_url":"https://api.github.com/users/ZuBB/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ZuBB/subscriptions","organizations_url":"https://api.github.com/users/ZuBB/orgs","repos_url":"https://api.github.com/users/ZuBB/repos","events_url":"https://api.github.com/users/ZuBB/events{/privacy}","received_events_url":"https://api.github.com/users/ZuBB/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":0,"created_at":"2026-06-30T08:50:03Z","updated_at":"2026-06-30T08:50:03Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### Acknowledgement\n\n- [x] I acknowledge that issues using this template may be closed without further explanation at the maintainer's discretion.\n\n### Comment\n\nbasically all is in the subject, but here it is in details:\n\n[@typescript/typescript6](https://www.npmjs.com/package/@typescript/typescript6?activeTab=versions) - last version is 6.0.1\n\n[typescript](https://www.npmjs.com/package/typescript?activeTab=versions) - last version in v6 branch is 6.0.3\n\nwould be nice to have them in sync","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63601/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63601/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63598","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63598/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63598/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63598/events","html_url":"https://github.com/microsoft/TypeScript/issues/63598","id":4772298690,"node_id":"I_kwDOAT9aAc8AAAABHHN_wg","number":63598,"title":"\"Token end is child end\" when '= ${id}id' is used in a property annotation","user":{"login":"DanielRosenwasser","id":972891,"node_id":"MDQ6VXNlcjk3Mjg5MQ==","avatar_url":"https://avatars.githubusercontent.com/u/972891?v=4","gravatar_id":"","url":"https://api.github.com/users/DanielRosenwasser","html_url":"https://github.com/DanielRosenwasser","followers_url":"https://api.github.com/users/DanielRosenwasser/followers","following_url":"https://api.github.com/users/DanielRosenwasser/following{/other_user}","gists_url":"https://api.github.com/users/DanielRosenwasser/gists{/gist_id}","starred_url":"https://api.github.com/users/DanielRosenwasser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DanielRosenwasser/subscriptions","organizations_url":"https://api.github.com/users/DanielRosenwasser/orgs","repos_url":"https://api.github.com/users/DanielRosenwasser/repos","events_url":"https://api.github.com/users/DanielRosenwasser/events{/privacy}","received_events_url":"https://api.github.com/users/DanielRosenwasser/received_events","type":"User","user_view_type":"public","site_admin":true},"labels":[],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":1,"created_at":"2026-06-29T23:17:33Z","updated_at":"2026-06-30T17:29:18Z","closed_at":null,"assignee":null,"author_association":"MEMBER","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"Happens in both 6.0 and 7.0 at the moment.\n\n```ts\ntype X = { prop: = `${abc}`xyz }\n```\n\nFormat the document.\n\n```\nDebug Failure. False expression: Token end is child end\nError: Debug Failure. False expression: Token end is child end\n    at processChildNode (typescript.js:182787:17)\n    at typescript.js:182718:9\n    at visitNode2 (typescript.js:32551:18)\n    at forEachChildInPropertySignature (typescript.js:32607:59)\n    at forEachChild (typescript.js:33072:35)\n    at processNode (typescript.js:182715:5)\n    at processChildNode (typescript.js:182794:7)\n    at processChildNodes (typescript.js:182837:32)\n    at typescript.js:182731:9\n    at visitNodes (typescript.js:32556:14)\n    at forEachChildInTypeLiteral (typescript.js:32666:12)\n    at forEachChild (typescript.js:33072:35)\n    at processNode (typescript.js:182715:5)\n    at processChildNode (typescript.js:182794:7)\n    at typescript.js:182718:9\n    at visitNode2 (typescript.js:32551:18)\n    at forEachChildInTypeAliasDeclaration (typescript.js:32842:144)\n    at forEachChild (typescript.js:33072:35)\n    at processNode (typescript.js:182715:5)\n    at formatSpanWorker (typescript.js:182512:5)\n    at typescript.js:182482:19\n    at getFormattingScanner (typescript.js:181224:15)\n    at formatSpan (typescript.js:182477:10)\n    at Object.formatSelection (typescript.js:182348:10)\n    at Object.getFormattingEditsForRange (typescript.js:154136:34)\n    at IpcIOSession.getFormattingEditsForRange (typescript.js:196749:35)\n    at format (typescript.js:195068:43)\n    at typescript.js:197591:15\n    at IpcIOSession.executeWithRequestId (typescript.js:197580:14)\n    at IpcIOSession.executeCommand (typescript.js:197589:29)\n    at IpcIOSession.onMessage (typescript.js:197637:68)\n    at process.<anonymous> (_tsserver.js:519:14)\n    at process.emit (node:events:509:28)\n    at emit (node:internal/child_process:972:14)\n    at process.processTicksAndRejections (node:internal/process/task_queues:91:21)\n```","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63598/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63598/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63597","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63597/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63597/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63597/events","html_url":"https://github.com/microsoft/TypeScript/issues/63597","id":4765777360,"node_id":"I_kwDOAT9aAc8AAAABHA_90A","number":63597,"title":"add an option to report an error when `Symbol.dispose`/`Symbol.asyncDispose` objects are used without the `using` keyword","user":{"login":"DetachHead","id":57028336,"node_id":"MDQ6VXNlcjU3MDI4MzM2","avatar_url":"https://avatars.githubusercontent.com/u/57028336?v=4","gravatar_id":"","url":"https://api.github.com/users/DetachHead","html_url":"https://github.com/DetachHead","followers_url":"https://api.github.com/users/DetachHead/followers","following_url":"https://api.github.com/users/DetachHead/following{/other_user}","gists_url":"https://api.github.com/users/DetachHead/gists{/gist_id}","starred_url":"https://api.github.com/users/DetachHead/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DetachHead/subscriptions","organizations_url":"https://api.github.com/users/DetachHead/orgs","repos_url":"https://api.github.com/users/DetachHead/repos","events_url":"https://api.github.com/users/DetachHead/events{/privacy}","received_events_url":"https://api.github.com/users/DetachHead/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":6,"created_at":"2026-06-29T06:58:16Z","updated_at":"2026-06-30T00:27:09Z","closed_at":null,"assignee":null,"author_association":"CONTRIBUTOR","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### 🔍 Search Terms\n\ndispose using error\n\n### ✅ Viability Checklist\n\n- [x] This wouldn't be a breaking change in existing TypeScript/JavaScript code\n- [x] This wouldn't change the runtime behavior of existing JavaScript code\n- [x] This could be implemented without emitting different JS based on the types of the expressions\n- [x] This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)\n- [x] This isn't a request to add a new utility type: https://github.com/microsoft/TypeScript/wiki/No-New-Utility-Types\n- [x] This feature would agree with the rest of our Design Goals: https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals\n\n### ⭐ Suggestion\n\ni was surprised to learn that using disposables without the `using` keyword are not reported as an error:\n\n```ts\nconst foo = {\n  [Symbol.dispose]: () => {\n    console.log(\"disposed\"); // never called\n  },\n};\n\n{\n  const bar = foo;\n  console.log(bar);\n}\n```\n\n### 📃 Motivating Example\n\n[the documentation compares it to python `with` statements](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#:~:text=that%2E-,You,scope). but the whole point of context managers is to enforce that an object is always properly cleaned up. if you forget to use `with`, then the object's setup is never run so its cleanup doesn't need to run either.\n\nsince this is not the case with the `using` keyword, it should be a type error to use it in an unsafe way\n\n### 💻 Use Cases\n\ni have an API that i need to log out of when i'm finished using it, otherwise the session remains active\n\n```ts\nconst login = () => {\n    // ...\n    return {\n        [Symbol.asyncDispose]: () => {\n            // important cleanup code that MUST be run no matter what\n        }\n    }\n}\n```\n\nin python i would do this with a context manager, and i'd be confident that the cleanup code would always be executed. it's not up to the caller to remember to use the `with` statement. however in typescript, the caller could easily do this by mistake:\n\n```ts\nconst sesion = await login()\n// cleanup code never gets called\n```\n\nthis is extremely surprising behavior coming from a language with a similar feature. is this is intentional, the docs should have a clear warning that `Symbol.dispose` and `Symbol.asyncDispose` functions have no guarantee to actually be called.","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63597/reactions","total_count":2,"+1":2,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63597/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63596","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63596/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63596/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63596/events","html_url":"https://github.com/microsoft/TypeScript/pull/63596","id":4764230374,"node_id":"PR_kwDOAT9aAc7rlCSt","number":63596,"title":"Bump actions/cache from 5.0.5 to 6.1.0 in the github-actions group","user":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"labels":[{"id":3707298455,"node_id":"LA_kwDOAT9aAc7c-OKX","url":"https://api.github.com/repos/microsoft/TypeScript/labels/dependencies","name":"dependencies","color":"0366d6","default":false,"description":"Pull requests that update a dependency file"},{"id":7364102042,"node_id":"LA_kwDOAT9aAc8AAAABtu9Hmg","url":"https://api.github.com/repos/microsoft/TypeScript/labels/github_actions","name":"github_actions","color":"000000","default":false,"description":"Pull requests that update GitHub Actions code"}],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":0,"created_at":"2026-06-29T00:54:56Z","updated_at":"2026-06-29T00:54:58Z","closed_at":null,"assignee":null,"author_association":"CONTRIBUTOR","issue_field_values":[],"type":null,"active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/microsoft/TypeScript/pulls/63596","html_url":"https://github.com/microsoft/TypeScript/pull/63596","diff_url":"https://github.com/microsoft/TypeScript/pull/63596.diff","patch_url":"https://github.com/microsoft/TypeScript/pull/63596.patch","merged_at":null},"body":"Bumps the github-actions group with 1 update: [actions/cache](https://github.com/actions/cache).\n\nUpdates `actions/cache` from 5.0.5 to 6.1.0\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/actions/cache/releases\">actions/cache's releases</a>.</em></p>\n<blockquote>\n<h2>v6.1.0</h2>\n<h2>What's Changed</h2>\n<ul>\n<li>Bump <code>@​actions/cache</code> to v6.1.0 - handle read-only cache access by <a href=\"https://github.com/jasongin\"><code>@​jasongin</code></a> in <a href=\"https://redirect.github.com/actions/cache/pull/1768\">actions/cache#1768</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/actions/cache/compare/v6...v6.1.0\">https://github.com/actions/cache/compare/v6...v6.1.0</a></p>\n<h2>v6.0.0</h2>\n<h2>What's Changed</h2>\n<ul>\n<li>Update packages, migrate to ESM by <a href=\"https://github.com/Samirat\"><code>@​Samirat</code></a> in <a href=\"https://redirect.github.com/actions/cache/pull/1760\">actions/cache#1760</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/actions/cache/compare/v5...v6.0.0\">https://github.com/actions/cache/compare/v5...v6.0.0</a></p>\n<h2>v5.1.0</h2>\n<h2>What's Changed</h2>\n<ul>\n<li>Bump <code>@​actions/cache</code> to v5.1.0 - handle read-only cache access by <a href=\"https://github.com/jasongin\"><code>@​jasongin</code></a> in <a href=\"https://redirect.github.com/actions/cache/pull/1775\">actions/cache#1775</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/actions/cache/compare/v5...v5.1.0\">https://github.com/actions/cache/compare/v5...v5.1.0</a></p>\n</blockquote>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/actions/cache/blob/main/RELEASES.md\">actions/cache's changelog</a>.</em></p>\n<blockquote>\n<h1>Releases</h1>\n<h2>How to prepare a release</h2>\n<blockquote>\n<p>[!NOTE]\nRelevant for maintainers with write access only.</p>\n</blockquote>\n<ol>\n<li>Switch to a new branch from <code>main</code>.</li>\n<li>Run <code>npm test</code> to ensure all tests are passing.</li>\n<li>Update the version in <a href=\"https://github.com/actions/cache/blob/main/package.json\"><code>https://github.com/actions/cache/blob/main/package.json</code></a>.</li>\n<li>Run <code>npm run build</code> to update the compiled files.</li>\n<li>Update this <a href=\"https://github.com/actions/cache/blob/main/RELEASES.md\"><code>https://github.com/actions/cache/blob/main/RELEASES.md</code></a> with the new version and changes in the <code>## Changelog</code> section.</li>\n<li>Run <code>licensed cache</code> to update the license report.</li>\n<li>Run <code>licensed status</code> and resolve any warnings by updating the <a href=\"https://github.com/actions/cache/blob/main/.licensed.yml\"><code>https://github.com/actions/cache/blob/main/.licensed.yml</code></a> file with the exceptions.</li>\n<li>Commit your changes and push your branch upstream.</li>\n<li>Open a pull request against <code>main</code> and get it reviewed and merged.</li>\n<li>Draft a new release <a href=\"https://github.com/actions/cache/releases\">https://github.com/actions/cache/releases</a> use the same version number used in <code>package.json</code>\n<ol>\n<li>Create a new tag with the version number.</li>\n<li>Auto generate release notes and update them to match the changes you made in <code>RELEASES.md</code>.</li>\n<li>Toggle the set as the latest release option.</li>\n<li>Publish the release.</li>\n</ol>\n</li>\n<li>Navigate to <a href=\"https://github.com/actions/cache/actions/workflows/release-new-action-version.yml\">https://github.com/actions/cache/actions/workflows/release-new-action-version.yml</a>\n<ol>\n<li>There should be a workflow run queued with the same version number.</li>\n<li>Approve the run to publish the new version and update the major tags for this action.</li>\n</ol>\n</li>\n</ol>\n<h2>Changelog</h2>\n<h3>6.1.0</h3>\n<ul>\n<li>Bump <code>@actions/cache</code> to v6.1.0 to pick up <a href=\"https://redirect.github.com/actions/toolkit/pull/2435\">actions/toolkit#2435 Handle cache write error due to read-only token</a></li>\n<li>Switch redundant &quot;Cache save failed&quot; warning to debug log in save-only</li>\n</ul>\n<h3>6.0.0</h3>\n<ul>\n<li>Updated <code>@actions/cache</code> to ^6.0.1, <code>@actions/core</code> to ^3.0.1, <code>@actions/exec</code> to ^3.0.0, <code>@actions/io</code> to ^3.0.2</li>\n<li>Migrated to ESM module system</li>\n<li>Upgraded Jest to v30 and test infrastructure to be ESM compatible</li>\n</ul>\n<h3>5.0.4</h3>\n<ul>\n<li>Bump <code>minimatch</code> to v3.1.5 (fixes ReDoS via globstar patterns)</li>\n<li>Bump <code>undici</code> to v6.24.1 (WebSocket decompression bomb protection, header validation fixes)</li>\n<li>Bump <code>fast-xml-parser</code> to v5.5.6</li>\n</ul>\n<h3>5.0.3</h3>\n<ul>\n<li>Bump <code>@actions/cache</code> to v5.0.5 (Resolves: <a href=\"https://github.com/actions/cache/security/dependabot/33\">https://github.com/actions/cache/security/dependabot/33</a>)</li>\n<li>Bump <code>@actions/core</code> to v2.0.3</li>\n</ul>\n<h3>5.0.2</h3>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/actions/cache/commit/55cc8345863c7cc4c66a329aec7e433d2d1c52a9\"><code>55cc834</code></a> Merge pull request <a href=\"https://redirect.github.com/actions/cache/issues/1768\">#1768</a> from jasongin/readonly-cache</li>\n<li><a href=\"https://github.com/actions/cache/commit/d8cd72f230726cdf4457ebb61ec1b593a8d12337\"><code>d8cd72f</code></a> Bump <code>@​actions/cache</code> to v6.1.0 - handle cache write error due to RO token</li>\n<li><a href=\"https://github.com/actions/cache/commit/2c8a9bd7457de244a408f35966fab2fb45fda9c8\"><code>2c8a9bd</code></a> Merge pull request <a href=\"https://redirect.github.com/actions/cache/issues/1760\">#1760</a> from actions/samirat/esm_migration_and_package_update</li>\n<li><a href=\"https://github.com/actions/cache/commit/e9b91fdc3fea7d79165fceb79042ef45c2d51023\"><code>e9b91fd</code></a> Prettier fixes</li>\n<li><a href=\"https://github.com/actions/cache/commit/e4884b8ff7f92ef6b52c79eda480bbc86e685adb\"><code>e4884b8</code></a> Rebuild dist</li>\n<li><a href=\"https://github.com/actions/cache/commit/10baf0191a3c426ea0fa4a3253a5c04233b6e18f\"><code>10baf01</code></a> Fixed licenses</li>\n<li><a href=\"https://github.com/actions/cache/commit/e39b386c9004d72a15d864ade8c0b3a702d47a37\"><code>e39b386</code></a> Fix test mock return order</li>\n<li><a href=\"https://github.com/actions/cache/commit/b6928203372a8571ff984c0c883ef3a1adfb0c06\"><code>b692820</code></a> PR feedback</li>\n<li><a href=\"https://github.com/actions/cache/commit/60749128a44d25d3c520a489e576380cf00ff3f1\"><code>6074912</code></a> Rebuild dist bundles as ESM to match type:module</li>\n<li><a href=\"https://github.com/actions/cache/commit/5a912e8b4af820fa082a0e75cfd2c782f8fbfe0e\"><code>5a912e8</code></a> Fix lint and jest issues</li>\n<li>Additional commits viewable in <a href=\"https://github.com/actions/cache/compare/27d5ce7f107fe9357f9df03efb73ab90386fccae...55cc8345863c7cc4c66a329aec7e433d2d1c52a9\">compare view</a></li>\n</ul>\n</details>\n<br />\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/cache&package-manager=github_actions&previous-version=5.0.5&new-version=6.1.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n<details>\n<summary>Dependabot commands and options</summary>\n<br />\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n</details>","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63596/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63596/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63591","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63591/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63591/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63591/events","html_url":"https://github.com/microsoft/TypeScript/pull/63591","id":4754179938,"node_id":"PR_kwDOAT9aAc7rFmEY","number":63591,"title":"lib(esnext.intl): add missing minimalDays to WeekInfo interface","user":{"login":"smedavarapu1","id":44251289,"node_id":"MDQ6VXNlcjQ0MjUxMjg5","avatar_url":"https://avatars.githubusercontent.com/u/44251289?v=4","gravatar_id":"","url":"https://api.github.com/users/smedavarapu1","html_url":"https://github.com/smedavarapu1","followers_url":"https://api.github.com/users/smedavarapu1/followers","following_url":"https://api.github.com/users/smedavarapu1/following{/other_user}","gists_url":"https://api.github.com/users/smedavarapu1/gists{/gist_id}","starred_url":"https://api.github.com/users/smedavarapu1/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smedavarapu1/subscriptions","organizations_url":"https://api.github.com/users/smedavarapu1/orgs","repos_url":"https://api.github.com/users/smedavarapu1/repos","events_url":"https://api.github.com/users/smedavarapu1/events{/privacy}","received_events_url":"https://api.github.com/users/smedavarapu1/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":1820464799,"node_id":"MDU6TGFiZWwxODIwNDY0Nzk5","url":"https://api.github.com/repos/microsoft/TypeScript/labels/For%20Backlog%20Bug","name":"For Backlog Bug","color":"9ff4ed","default":false,"description":"PRs that fix a backlog bug"}],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":0,"created_at":"2026-06-26T18:14:35Z","updated_at":"2026-07-01T19:26:43Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/microsoft/TypeScript/pulls/63591","html_url":"https://github.com/microsoft/TypeScript/pull/63591","diff_url":"https://github.com/microsoft/TypeScript/pull/63591.diff","patch_url":"https://github.com/microsoft/TypeScript/pull/63591.patch","merged_at":null},"body":"## Summary\r\n\r\nFixes #61713\r\n\r\nThe `WeekInfo` interface in `src/lib/esnext.intl.d.ts` was missing the `minimalDays` property, which is part of the [Intl Locale Info API](https://tc39.es/proposal-intl-locale-info/) (Stage 4).\r\n\r\nThe JSDoc comment on `getWeekInfo()` already documented all three properties (`firstDay`, `weekend`, and `minimalDays`), but the `WeekInfo` return type interface only declared `firstDay` and `weekend`. This change adds the missing `minimalDays: number` property with the appropriate JSDoc and MDN reference link.\r\n\r\n## Checklist\r\n\r\n- [x] There is an associated issue in the `Backlog` milestone (#61713)\r\n- [x] Code is up-to-date with the `main` branch\r\n- [x] You've successfully run `hereby runtests` locally\r\n- [x] There are new or updated unit tests validating the change","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63591/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63591/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63590","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63590/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63590/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63590/events","html_url":"https://github.com/microsoft/TypeScript/pull/63590","id":4752298897,"node_id":"PR_kwDOAT9aAc7q_bjX","number":63590,"title":"lib: add Math.sumPrecise type definition (ES2025)","user":{"login":"kamalkarki111","id":56968273,"node_id":"MDQ6VXNlcjU2OTY4Mjcz","avatar_url":"https://avatars.githubusercontent.com/u/56968273?v=4","gravatar_id":"","url":"https://api.github.com/users/kamalkarki111","html_url":"https://github.com/kamalkarki111","followers_url":"https://api.github.com/users/kamalkarki111/followers","following_url":"https://api.github.com/users/kamalkarki111/following{/other_user}","gists_url":"https://api.github.com/users/kamalkarki111/gists{/gist_id}","starred_url":"https://api.github.com/users/kamalkarki111/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kamalkarki111/subscriptions","organizations_url":"https://api.github.com/users/kamalkarki111/orgs","repos_url":"https://api.github.com/users/kamalkarki111/repos","events_url":"https://api.github.com/users/kamalkarki111/events{/privacy}","received_events_url":"https://api.github.com/users/kamalkarki111/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":1883362416,"node_id":"MDU6TGFiZWwxODgzMzYyNDE2","url":"https://api.github.com/repos/microsoft/TypeScript/labels/For%20Uncommitted%20Bug","name":"For Uncommitted Bug","color":"ededed","default":false,"description":"PR for untriaged, rejected, closed or missing bug"}],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":4,"created_at":"2026-06-26T13:19:07Z","updated_at":"2026-06-28T14:00:31Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/microsoft/TypeScript/pulls/63590","html_url":"https://github.com/microsoft/TypeScript/pull/63590","diff_url":"https://github.com/microsoft/TypeScript/pull/63590.diff","patch_url":"https://github.com/microsoft/TypeScript/pull/63590.patch","merged_at":null},"body":"## Summary\n\nAdds type definition for `Math.sumPrecise` which is part of the [TC39 `proposal-math-sum`](https://github.com/tc39/proposal-math-sum) that reached **Stage 4 on 2025-07-28**, making it part of ES2026.\n\n## Changes\n\n- New file: `src/lib/esnext.math.d.ts` — extends `interface Math` with `sumPrecise`\n- Updated `src/lib/esnext.d.ts` — added `/// <reference lib=\"esnext.math\" />`\n- Updated `src/lib/libs.json` — registered `esnext.math` in the libs array\n- Updated `src/compiler/commandLineParser.ts` — mapped `esnext.math` lib name to file\n- Updated `src/compiler/utilities.ts` — added `sumPrecise` to `ScriptTargetFeatures` for helpful diagnostics\n\n## Why esnext, not es2025?\n\nThe proposal reached Stage 4 on **2025-07-28**, one month after ES2025 was finalized (June 2025), so it will be included in **ES2026**. TypeScript does not have `es2026` lib files yet, so `esnext` is the correct placement for now.\n\n## References\n\n- TC39 Proposal: https://github.com/tc39/proposal-math-sum\n- Stage 4 meeting notes: https://github.com/tc39/notes/blob/main/meetings/2025-07/july-28.md#mathsumprecise-for-stage-4\n- MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sumPrecise\n\nSame changes as https://github.com/microsoft/TypeScript/pull/63429 (recreated via GitHub MCP).\n","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63590/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63590/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63589","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63589/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63589/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63589/events","html_url":"https://github.com/microsoft/TypeScript/pull/63589","id":4752281093,"node_id":"PR_kwDOAT9aAc7q_Xy9","number":63589,"title":"lib: add Math.sumPrecise type definition (ES2025)","user":{"login":"kamalkarki111","id":56968273,"node_id":"MDQ6VXNlcjU2OTY4Mjcz","avatar_url":"https://avatars.githubusercontent.com/u/56968273?v=4","gravatar_id":"","url":"https://api.github.com/users/kamalkarki111","html_url":"https://github.com/kamalkarki111","followers_url":"https://api.github.com/users/kamalkarki111/followers","following_url":"https://api.github.com/users/kamalkarki111/following{/other_user}","gists_url":"https://api.github.com/users/kamalkarki111/gists{/gist_id}","starred_url":"https://api.github.com/users/kamalkarki111/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kamalkarki111/subscriptions","organizations_url":"https://api.github.com/users/kamalkarki111/orgs","repos_url":"https://api.github.com/users/kamalkarki111/repos","events_url":"https://api.github.com/users/kamalkarki111/events{/privacy}","received_events_url":"https://api.github.com/users/kamalkarki111/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":1883362416,"node_id":"MDU6TGFiZWwxODgzMzYyNDE2","url":"https://api.github.com/repos/microsoft/TypeScript/labels/For%20Uncommitted%20Bug","name":"For Uncommitted Bug","color":"ededed","default":false,"description":"PR for untriaged, rejected, closed or missing bug"}],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":5,"created_at":"2026-06-26T13:16:07Z","updated_at":"2026-06-28T14:00:08Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/microsoft/TypeScript/pulls/63589","html_url":"https://github.com/microsoft/TypeScript/pull/63589","diff_url":"https://github.com/microsoft/TypeScript/pull/63589.diff","patch_url":"https://github.com/microsoft/TypeScript/pull/63589.patch","merged_at":null},"body":"<!--\nThank you for submitting a pull request!\n\nPlease verify that:\n* [X] There is an associated issue in the `Backlog` milestone (**required**)\n* [X] Code is up-to-date with the `main` branch\n* [X] You've successfully run `hereby runtests` locally\n* [X] There are new or updated unit tests validating the change\n\nRefer to CONTRIBUTING.MD for more details.\n  https://github.com/Microsoft/TypeScript/blob/main/CONTRIBUTING.md\n-->\n\n## Summary\n\nAdds type definition for `Math.sumPrecise` which is part of the [TC39 `proposal-math-sum`](https://github.com/tc39/proposal-math-sum) that reached **Stage 4 on 2025-07-28**, making it part of ES2026.\n\n## Changes\n\n- New file: `src/lib/esnext.math.d.ts` — extends `interface Math` with `sumPrecise`\n- Updated `src/lib/esnext.d.ts` — added `/// <reference lib=\"esnext.math\" />`\n- Updated `src/lib/libs.json` — registered `esnext.math` in the libs array\n- Updated `src/compiler/commandLineParser.ts` — mapped `esnext.math` lib name to file\n- Updated `src/compiler/utilities.ts` — added `sumPrecise` to `ScriptTargetFeatures` for helpful diagnostics\n\n## Why esnext, not es2025?\n\nThe proposal reached Stage 4 on **2025-07-28**, one month after ES2025 was finalized (June 2025), so it will be included in **ES2026**. TypeScript does not have `es2026` lib files yet, so `esnext` is the correct placement for now.\n\n## Runtime support\n\n| Runtime | Supported |\n|---|---|\n| Firefox 137+ | ✅ |\n| Safari 18.4 (JavaScriptCore) | ✅ |\n| Bun | ✅ |\n| V8 / Node.js / Chrome | ❌ not yet |\n\n## References\n\n- TC39 Proposal: https://github.com/tc39/proposal-math-sum\n- Stage 4 meeting notes: https://github.com/tc39/notes/blob/main/meetings/2025-07/july-28.md#mathsumprecise-for-stage-4\n- MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sumPrecise\n\nBased on the same changes as https://github.com/microsoft/TypeScript/pull/63429","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63589/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63589/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63584","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63584/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63584/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63584/events","html_url":"https://github.com/microsoft/TypeScript/issues/63584","id":4745200918,"node_id":"I_kwDOAT9aAc8AAAABGtYFFg","number":63584,"title":"tagged/named rest parameter participating in circular reference causes error","user":{"login":"dragoncoder047","id":101021094,"node_id":"U_kgDOBgV1pg","avatar_url":"https://avatars.githubusercontent.com/u/101021094?v=4","gravatar_id":"","url":"https://api.github.com/users/dragoncoder047","html_url":"https://github.com/dragoncoder047","followers_url":"https://api.github.com/users/dragoncoder047/followers","following_url":"https://api.github.com/users/dragoncoder047/following{/other_user}","gists_url":"https://api.github.com/users/dragoncoder047/gists{/gist_id}","starred_url":"https://api.github.com/users/dragoncoder047/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dragoncoder047/subscriptions","organizations_url":"https://api.github.com/users/dragoncoder047/orgs","repos_url":"https://api.github.com/users/dragoncoder047/repos","events_url":"https://api.github.com/users/dragoncoder047/events{/privacy}","received_events_url":"https://api.github.com/users/dragoncoder047/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":113970366,"node_id":"MDU6TGFiZWwxMTM5NzAzNjY=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Bug","name":"Bug","color":"e11d21","default":false,"description":"A bug in TypeScript"},{"id":9469696986,"node_id":"LA_kwDOAT9aAc8AAAACNHAb2g","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Domain:%20check:%20Type%20Circularity","name":"Domain: check: Type Circularity","color":"61de05","default":false,"description":"stackoverflows caused by circularities, or unexpected errors where no circularity appears to exist"}],"state":"open","locked":false,"assignees":[],"milestone":{"url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29","html_url":"https://github.com/microsoft/TypeScript/milestone/29","labels_url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29/labels","id":1973940,"node_id":"MDk6TWlsZXN0b25lMTk3Mzk0MA==","number":29,"title":"Backlog","description":"Please send PRs for issues in the Backlog milestone!","creator":{"login":"mhegazy","id":8000722,"node_id":"MDQ6VXNlcjgwMDA3MjI=","avatar_url":"https://avatars.githubusercontent.com/u/8000722?v=4","gravatar_id":"","url":"https://api.github.com/users/mhegazy","html_url":"https://github.com/mhegazy","followers_url":"https://api.github.com/users/mhegazy/followers","following_url":"https://api.github.com/users/mhegazy/following{/other_user}","gists_url":"https://api.github.com/users/mhegazy/gists{/gist_id}","starred_url":"https://api.github.com/users/mhegazy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mhegazy/subscriptions","organizations_url":"https://api.github.com/users/mhegazy/orgs","repos_url":"https://api.github.com/users/mhegazy/repos","events_url":"https://api.github.com/users/mhegazy/events{/privacy}","received_events_url":"https://api.github.com/users/mhegazy/received_events","type":"User","user_view_type":"public","site_admin":false},"open_issues":1914,"closed_issues":2768,"state":"open","created_at":"2016-08-31T00:21:08Z","updated_at":"2026-06-25T15:32:53Z","due_on":null,"closed_at":null},"comments":0,"created_at":"2026-06-25T15:30:53Z","updated_at":"2026-06-26T15:27:52Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### 🔎 Search Terms\n\nnamed tuple element rest recursive circularly references union unions\n\n### 🕗 Version & Regression Information\n\n- This is the behavior in every version I tried, and I reviewed the FAQ for entries about *everything and didn't find anything relevant*\n\n\n### ⏯ Playground Link\n\nhttps://www.typescriptlang.org/play/?esModuleInterop=false&target=99&jsx=0&noFallthroughCasesInSwitch=false&ts=6.0.0-dev.20260416&noUnusedLocals=true&noUnusedParameters=true&noUncheckedIndexedAccess=true#code/KYDwDg9gTgLgBDAnmYcDiEIBMAiEDGActqgLwBQcVcAPnAM4xQCWAdgOaXV0DaARMz4AaOADpxGbHiIkeAXTlcqvPgBtBItllAAuOKwCuAWwBGwKCPGjJuAsW3y5AbnLlQkWAmSoAQgENbGW0ARjgKaloGJjZOCJUNMXEYP3Z2YCw9f0D7YGDHcgB6AoiSiIA9CsqKpUj+dWE4LV19YzMLRNEs6Ry8hRc3cGh4JBQ4LrsSACYwmrpGFg5ZuH4Eq3Gg4En8uOW1BKaQPUNTc0sklLSMsYDuqccXItKn5+eqqvIgA\n\n### 💻 Code\n\n```ts\nexport type GoodDocNode =\n    | string\n    | [\"i\", ...GoodDocNode[]]\n    | [\"li\", index: number, ...GoodDocNode[]];\n\nexport type BadDocNode1 =\n    | string\n    | [\"i\", ...tagged: BadDocNode1[]]\n//             ^^^^^^^^\n    | [\"li\", index: number, ...BadDocNode1[]];\n\nexport type BadDocNode2 =\n    | string\n    | [\"i\", ...BadDocNode2[]]\n    | [\"li\", index: number, ...tagged: BadDocNode2[]];\n//                             ^^^^^^^^\n```\n\n\n### 🙁 Actual behavior\n\nError:\n```\nType alias 'BadDocNode1' circularly references itself.\nType alias 'BadDocNode2' circularly references itself.\n```\n\n### 🙂 Expected behavior\n\nNo errors, because the only differences between the two is the name on the rest parameter in the tuple, nothing structurally is different.\n\n### Additional information about the issue\n\n_No response_","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63584/reactions","total_count":1,"+1":1,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63584/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63583","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63583/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63583/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63583/events","html_url":"https://github.com/microsoft/TypeScript/issues/63583","id":4741129391,"node_id":"I_kwDOAT9aAc8AAAABGpfkrw","number":63583,"title":"Finally is not implemented correctly in all cases","user":{"login":"Mudloop","id":34929221,"node_id":"MDQ6VXNlcjM0OTI5MjIx","avatar_url":"https://avatars.githubusercontent.com/u/34929221?v=4","gravatar_id":"","url":"https://api.github.com/users/Mudloop","html_url":"https://github.com/Mudloop","followers_url":"https://api.github.com/users/Mudloop/followers","following_url":"https://api.github.com/users/Mudloop/following{/other_user}","gists_url":"https://api.github.com/users/Mudloop/gists{/gist_id}","starred_url":"https://api.github.com/users/Mudloop/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mudloop/subscriptions","organizations_url":"https://api.github.com/users/Mudloop/orgs","repos_url":"https://api.github.com/users/Mudloop/repos","events_url":"https://api.github.com/users/Mudloop/events{/privacy}","received_events_url":"https://api.github.com/users/Mudloop/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":113970366,"node_id":"MDU6TGFiZWwxMTM5NzAzNjY=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Bug","name":"Bug","color":"e11d21","default":false,"description":"A bug in TypeScript"},{"id":1097658263,"node_id":"MDU6TGFiZWwxMDk3NjU4MjYz","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Domain:%20check:%20Control%20Flow","name":"Domain: check: Control Flow","color":"1d76db","default":false,"description":"The issue relates to control flow analysis"}],"state":"open","locked":false,"assignees":[],"milestone":{"url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29","html_url":"https://github.com/microsoft/TypeScript/milestone/29","labels_url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29/labels","id":1973940,"node_id":"MDk6TWlsZXN0b25lMTk3Mzk0MA==","number":29,"title":"Backlog","description":"Please send PRs for issues in the Backlog milestone!","creator":{"login":"mhegazy","id":8000722,"node_id":"MDQ6VXNlcjgwMDA3MjI=","avatar_url":"https://avatars.githubusercontent.com/u/8000722?v=4","gravatar_id":"","url":"https://api.github.com/users/mhegazy","html_url":"https://github.com/mhegazy","followers_url":"https://api.github.com/users/mhegazy/followers","following_url":"https://api.github.com/users/mhegazy/following{/other_user}","gists_url":"https://api.github.com/users/mhegazy/gists{/gist_id}","starred_url":"https://api.github.com/users/mhegazy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mhegazy/subscriptions","organizations_url":"https://api.github.com/users/mhegazy/orgs","repos_url":"https://api.github.com/users/mhegazy/repos","events_url":"https://api.github.com/users/mhegazy/events{/privacy}","received_events_url":"https://api.github.com/users/mhegazy/received_events","type":"User","user_view_type":"public","site_admin":false},"open_issues":1914,"closed_issues":2768,"state":"open","created_at":"2016-08-31T00:21:08Z","updated_at":"2026-06-25T15:32:53Z","due_on":null,"closed_at":null},"comments":0,"created_at":"2026-06-25T06:05:49Z","updated_at":"2026-06-26T15:27:51Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### 🔎 Search Terms\n\nfinally switch\n\n### 🕗 Version & Regression Information\n\n- This changed between versions ______ and _______\n- This changed in commit or PR _______\n- This is the behavior in every version I tried, and I reviewed the FAQ for entries about _________\n- I was unable to test this on prior versions because _______\n\n\n### ⏯ Playground Link\n\nhttps://tsplay.dev/Nnz7dN\n\n### 💻 Code\n\n```ts\nlet y = false\nfunction test1(x: boolean): number {\n    try {\n        switch (x) {\n            case true: return 1\n            case false: return 0\n        }\n    } finally { y ||= true; }\n}\n// Function lacks ending return statement and return type does not include 'undefined'.\n```\n```ts\nlet y = false\nfunction test2(x: boolean): number {\n    try {\n        switch (x) {\n            case true: return 1\n            case false: return 0\n        }\n        return 0;\n    } finally { y ||= true; }\n}\n// Unreachable code detected.\n```\n\n\n### 🙁 Actual behavior\n\nTypescript complains about the function not always returning something, even though it does. But when adding an extra return statement, it doesn't like that either.\n\n### 🙂 Expected behavior\n\nThe contents of the finally block should not affect the return type.\n\n### Additional information about the issue\n\nNote that if y is only read or written to, it works, but when doing both, things break.","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63583/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63583/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63579","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63579/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63579/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63579/events","html_url":"https://github.com/microsoft/TypeScript/issues/63579","id":4729877353,"node_id":"I_kwDOAT9aAc8AAAABGewzaQ","number":63579,"title":"tsc --build false negative through export star facade project","user":{"login":"jasonkuhrt","id":284476,"node_id":"MDQ6VXNlcjI4NDQ3Ng==","avatar_url":"https://avatars.githubusercontent.com/u/284476?v=4","gravatar_id":"","url":"https://api.github.com/users/jasonkuhrt","html_url":"https://github.com/jasonkuhrt","followers_url":"https://api.github.com/users/jasonkuhrt/followers","following_url":"https://api.github.com/users/jasonkuhrt/following{/other_user}","gists_url":"https://api.github.com/users/jasonkuhrt/gists{/gist_id}","starred_url":"https://api.github.com/users/jasonkuhrt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jasonkuhrt/subscriptions","organizations_url":"https://api.github.com/users/jasonkuhrt/orgs","repos_url":"https://api.github.com/users/jasonkuhrt/repos","events_url":"https://api.github.com/users/jasonkuhrt/events{/privacy}","received_events_url":"https://api.github.com/users/jasonkuhrt/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":611777722,"node_id":"MDU6TGFiZWw2MTE3Nzc3MjI=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Needs%20Investigation","name":"Needs Investigation","color":"DDDDDD","default":false,"description":"This issue needs a team member to investigate its status."}],"state":"open","locked":false,"assignees":[{"login":"johnfav03","id":64748847,"node_id":"MDQ6VXNlcjY0NzQ4ODQ3","avatar_url":"https://avatars.githubusercontent.com/u/64748847?v=4","gravatar_id":"","url":"https://api.github.com/users/johnfav03","html_url":"https://github.com/johnfav03","followers_url":"https://api.github.com/users/johnfav03/followers","following_url":"https://api.github.com/users/johnfav03/following{/other_user}","gists_url":"https://api.github.com/users/johnfav03/gists{/gist_id}","starred_url":"https://api.github.com/users/johnfav03/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnfav03/subscriptions","organizations_url":"https://api.github.com/users/johnfav03/orgs","repos_url":"https://api.github.com/users/johnfav03/repos","events_url":"https://api.github.com/users/johnfav03/events{/privacy}","received_events_url":"https://api.github.com/users/johnfav03/received_events","type":"User","user_view_type":"public","site_admin":false}],"milestone":null,"comments":2,"created_at":"2026-06-23T22:04:26Z","updated_at":"2026-06-30T18:55:53Z","closed_at":null,"assignee":{"login":"johnfav03","id":64748847,"node_id":"MDQ6VXNlcjY0NzQ4ODQ3","avatar_url":"https://avatars.githubusercontent.com/u/64748847?v=4","gravatar_id":"","url":"https://api.github.com/users/johnfav03","html_url":"https://github.com/johnfav03","followers_url":"https://api.github.com/users/johnfav03/followers","following_url":"https://api.github.com/users/johnfav03/following{/other_user}","gists_url":"https://api.github.com/users/johnfav03/gists{/gist_id}","starred_url":"https://api.github.com/users/johnfav03/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnfav03/subscriptions","organizations_url":"https://api.github.com/users/johnfav03/orgs","repos_url":"https://api.github.com/users/johnfav03/repos","events_url":"https://api.github.com/users/johnfav03/events{/privacy}","received_events_url":"https://api.github.com/users/johnfav03/received_events","type":"User","user_view_type":"public","site_admin":false},"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"# `tsc --build` false negative through `export *` facade project\n\n## TypeScript Version\n\n`7.0.1-rc`\n\n## Repro\n\nRepo: https://github.com/jasonkuhrt/ts-project-reference-reexport-stale-repro\n\n```sh\ngit clone https://github.com/jasonkuhrt/ts-project-reference-reexport-stale-repro.git\ncd ts-project-reference-reexport-stale-repro\npnpm install\npnpm repro\n```\n\nProject layout:\n\n```text\n.\n├── source/\n│   ├── tsconfig.json     # composite project\n│   └── index.ts          # exports Status\n├── facade/\n│   ├── tsconfig.json     # composite project, references ../source\n│   └── index.ts          # re-exports source\n└── consumer/\n    ├── tsconfig.json     # composite project, references ../facade\n    └── index.ts          # imports Status through facade\n```\n\nDependency path:\n\n```text\nconsumer/index.ts -> facade/index.ts -> source/index.ts\n```\n\nRelevant source:\n\n```ts\n// source/index.ts\nexport type Status = \"old\";\n```\n\n```ts\n// facade/index.ts\nexport * from \"../source/index\";\n```\n\n```ts\n// consumer/index.ts\nimport type { Status } from \"../facade/index\";\n\nexport const status: \"old\" = null as unknown as Status;\n```\n\nThe only compiler option in each project is `composite: true`.\n\n## Actual Behavior\n\n`pnpm repro` first builds with:\n\n```ts\n// source/index.ts\nexport type Status = \"old\";\n```\n\nThen it changes the source project to:\n\n```ts\nexport type Status = \"new\";\n```\n\nThe incremental build incorrectly exits `0`.\n\nThe facade declaration remains textually unchanged:\n\n```ts\nexport * from \"../source/index\";\n```\n\nThe consumer declaration remains stale:\n\n```ts\nexport declare const status: \"old\";\n```\n\n## Expected Behavior\n\nThe incremental build should fail like the clean build does:\n\n```text\nconsumer/index.ts(3,14): error TS2322: Type '\"new\"' is not assignable to type '\"old\"'.\n```\n\n## Notes\n\nThis is not pnpm workspace/package-exports behavior. The repro uses no workspace\npackages and no package imports.\n\n[#46153](https://github.com/microsoft/TypeScript/issues/46153) looks related,\nbut this is a minimal `export *` facade case where the intermediate project emits\nstable declaration text while its re-exported public API changes.\n","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63579/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63579/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63574","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63574/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63574/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63574/events","html_url":"https://github.com/microsoft/TypeScript/pull/63574","id":4718541477,"node_id":"PR_kwDOAT9aAc7pRIY9","number":63574,"title":"Bump js-yaml from 4.1.1 to 4.2.0","user":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"labels":[{"id":1883362416,"node_id":"MDU6TGFiZWwxODgzMzYyNDE2","url":"https://api.github.com/repos/microsoft/TypeScript/labels/For%20Uncommitted%20Bug","name":"For Uncommitted Bug","color":"ededed","default":false,"description":"PR for untriaged, rejected, closed or missing bug"},{"id":3707298455,"node_id":"LA_kwDOAT9aAc7c-OKX","url":"https://api.github.com/repos/microsoft/TypeScript/labels/dependencies","name":"dependencies","color":"0366d6","default":false,"description":"Pull requests that update a dependency file"},{"id":8138650806,"node_id":"LA_kwDOAT9aAc8AAAAB5Rn0tg","url":"https://api.github.com/repos/microsoft/TypeScript/labels/javascript","name":"javascript","color":"168700","default":false,"description":"Pull requests that update Javascript code"}],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":0,"created_at":"2026-06-22T16:22:18Z","updated_at":"2026-06-22T16:24:03Z","closed_at":null,"assignee":null,"author_association":"CONTRIBUTOR","issue_field_values":[],"type":null,"active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/microsoft/TypeScript/pulls/63574","html_url":"https://github.com/microsoft/TypeScript/pull/63574","diff_url":"https://github.com/microsoft/TypeScript/pull/63574.diff","patch_url":"https://github.com/microsoft/TypeScript/pull/63574.patch","merged_at":null},"body":"Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.1 to 4.2.0.\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md\">js-yaml's changelog</a>.</em></p>\n<blockquote>\n<h2>[4.2.0] - 2026-06-01</h2>\n<h3>Added</h3>\n<ul>\n<li>Added <code>docs/safety.md</code> with notes about processing untrusted YAML.</li>\n<li>Added <code>maxDepth</code> (100) loader option. Not a problem, but gives a better\nexception instead of RangeError on stack overflow.</li>\n<li>Added <code>maxMergeSeqLength</code> (20) loader option. Not a problem after <code>merge</code> fix,\nbut an additional restriction for safety.</li>\n<li>Added sourcemaps to <code>dist/</code> builds.</li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Stop resolving numbers with underscores as numeric scalars, <a href=\"https://redirect.github.com/nodeca/js-yaml/issues/627\">#627</a>.</li>\n<li>Switched dev toolchains to Vite / neostandard.</li>\n<li>Updated demo.</li>\n<li>Reorganized tests.</li>\n<li><code>dist/</code> files are no longer kept in the repository.</li>\n</ul>\n<h3>Fixed</h3>\n<ul>\n<li>Fix parsing of properties on the first implicit block mapping key, <a href=\"https://redirect.github.com/nodeca/js-yaml/issues/62\">#62</a>.</li>\n<li>Fix trailing whitespace handling when folding flow scalar lines, <a href=\"https://redirect.github.com/nodeca/js-yaml/issues/307\">#307</a>.</li>\n<li>Reject top-level block scalars without content indentation, <a href=\"https://redirect.github.com/nodeca/js-yaml/issues/280\">#280</a>.</li>\n<li>Ensure numbers survive round-trip, <a href=\"https://redirect.github.com/nodeca/js-yaml/issues/737\">#737</a>.</li>\n<li>Fix test coverage for issue <a href=\"https://redirect.github.com/nodeca/js-yaml/issues/221\">#221</a>.</li>\n<li>Fix flow scalar trailing whitespace folding, <a href=\"https://redirect.github.com/nodeca/js-yaml/issues/307\">#307</a>.</li>\n<li>Fix digits in YAML named tag handles.</li>\n</ul>\n<h3>Security</h3>\n<ul>\n<li>Fix potential DoS via quadratic complexity in merge - deduplicate repeated\nelements (makes sense for malformed files &gt; 10K).</li>\n</ul>\n<h2>[3.14.2] - 2025-11-15</h2>\n<h3>Security</h3>\n<ul>\n<li>Backported v4.1.1 fix to v3</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/nodeca/js-yaml/commit/590dbabadd172b099c07654fab2eabec8c7a07b9\"><code>590dbab</code></a> 4.2.0 released</li>\n<li><a href=\"https://github.com/nodeca/js-yaml/commit/f944dc5cd132251752499bdb157f33027d362177\"><code>f944dc5</code></a> Add package.json funding field</li>\n<li><a href=\"https://github.com/nodeca/js-yaml/commit/f6927192223355b64f2a6e19f3071ccc579ee718\"><code>f692719</code></a> Changelog update</li>\n<li><a href=\"https://github.com/nodeca/js-yaml/commit/9971a068fe7fb67eeedec7cf15fd2aba1b71bd79\"><code>9971a06</code></a> Fix digits in YAML named tag handles</li>\n<li><a href=\"https://github.com/nodeca/js-yaml/commit/464a5b854b682691d35cc119500f74595d2e513c\"><code>464a5b8</code></a> Fix flow scalar trailing whitespace folding, close <a href=\"https://redirect.github.com/nodeca/js-yaml/issues/307\">#307</a></li>\n<li><a href=\"https://github.com/nodeca/js-yaml/commit/1fda4f715d368c74e6e65e44d3201946c9577e54\"><code>1fda4f7</code></a> Tests for <a href=\"https://redirect.github.com/nodeca/js-yaml/issues/567\">#567</a>, <a href=\"https://redirect.github.com/nodeca/js-yaml/issues/565\">#565</a></li>\n<li><a href=\"https://github.com/nodeca/js-yaml/commit/031ad079a65da5018cbe6280f3b9306e39699b5a\"><code>031ad07</code></a> Stop resolving numbers with underscores as numeric scalars, <a href=\"https://redirect.github.com/nodeca/js-yaml/issues/627\">#627</a></li>\n<li><a href=\"https://github.com/nodeca/js-yaml/commit/e46d223b37110ec2ba5b5b1da672a8f6862832d6\"><code>e46d223</code></a> CI config update</li>\n<li><a href=\"https://github.com/nodeca/js-yaml/commit/9023feec80d19f4c39e73d1b25fc7644e93bf628\"><code>9023fee</code></a> Add lockfile</li>\n<li><a href=\"https://github.com/nodeca/js-yaml/commit/990e6f4d1c51d03b53da0dc6df3c7fc0f61ad909\"><code>990e6f4</code></a> Docs update</li>\n<li>Additional commits viewable in <a href=\"https://github.com/nodeca/js-yaml/compare/4.1.1...4.2.0\">compare view</a></li>\n</ul>\n</details>\n<br />\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=js-yaml&package-manager=npm_and_yarn&previous-version=4.1.1&new-version=4.2.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n<details>\n<summary>Dependabot commands and options</summary>\n<br />\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/microsoft/TypeScript/network/alerts).\n\n</details>","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63574/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63574/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63573","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63573/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63573/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63573/events","html_url":"https://github.com/microsoft/TypeScript/issues/63573","id":4718527319,"node_id":"I_kwDOAT9aAc8AAAABGT8DVw","number":63573,"title":"Hover documentation for parameters documented with jsdoc renders improperly","user":{"login":"SirzBenjie","id":142067137,"node_id":"U_kgDOCHfFwQ","avatar_url":"https://avatars.githubusercontent.com/u/142067137?v=4","gravatar_id":"","url":"https://api.github.com/users/SirzBenjie","html_url":"https://github.com/SirzBenjie","followers_url":"https://api.github.com/users/SirzBenjie/followers","following_url":"https://api.github.com/users/SirzBenjie/following{/other_user}","gists_url":"https://api.github.com/users/SirzBenjie/gists{/gist_id}","starred_url":"https://api.github.com/users/SirzBenjie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SirzBenjie/subscriptions","organizations_url":"https://api.github.com/users/SirzBenjie/orgs","repos_url":"https://api.github.com/users/SirzBenjie/repos","events_url":"https://api.github.com/users/SirzBenjie/events{/privacy}","received_events_url":"https://api.github.com/users/SirzBenjie/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":113971155,"node_id":"MDU6TGFiZWwxMTM5NzExNTU=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Suggestion","name":"Suggestion","color":"006b75","default":false,"description":"An idea for TypeScript"},{"id":1023321108,"node_id":"MDU6TGFiZWwxMDIzMzIxMTA4","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Experience%20Enhancement","name":"Experience Enhancement","color":"556677","default":false,"description":"Noncontroversial enhancements"}],"state":"open","locked":false,"assignees":[],"milestone":{"url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29","html_url":"https://github.com/microsoft/TypeScript/milestone/29","labels_url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29/labels","id":1973940,"node_id":"MDk6TWlsZXN0b25lMTk3Mzk0MA==","number":29,"title":"Backlog","description":"Please send PRs for issues in the Backlog milestone!","creator":{"login":"mhegazy","id":8000722,"node_id":"MDQ6VXNlcjgwMDA3MjI=","avatar_url":"https://avatars.githubusercontent.com/u/8000722?v=4","gravatar_id":"","url":"https://api.github.com/users/mhegazy","html_url":"https://github.com/mhegazy","followers_url":"https://api.github.com/users/mhegazy/followers","following_url":"https://api.github.com/users/mhegazy/following{/other_user}","gists_url":"https://api.github.com/users/mhegazy/gists{/gist_id}","starred_url":"https://api.github.com/users/mhegazy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mhegazy/subscriptions","organizations_url":"https://api.github.com/users/mhegazy/orgs","repos_url":"https://api.github.com/users/mhegazy/repos","events_url":"https://api.github.com/users/mhegazy/events{/privacy}","received_events_url":"https://api.github.com/users/mhegazy/received_events","type":"User","user_view_type":"public","site_admin":false},"open_issues":1914,"closed_issues":2768,"state":"open","created_at":"2016-08-31T00:21:08Z","updated_at":"2026-06-25T15:32:53Z","due_on":null,"closed_at":null},"comments":0,"created_at":"2026-06-22T16:20:37Z","updated_at":"2026-06-23T16:44:34Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### 🔎 Search Terms\n\nparameter hover documentation\njsdoc parameter hyphen\njsdoc parameter\nvscode jsdoc parameter hover\n\n### 🕗 Version & Regression Information\n\n~~- This changed between versions ______ and _______~~\n~~- This changed in commit or PR _______~~\n- This is the behavior in every version I tried, and I reviewed the entire FAQ for anything that might be related to this\n- I was unable to test this on prior versions because this is not a regression in typescript itself, it is a VSCode issue which I know, based on experience, will get moved to this repository.\n\n### ⏯ Playground Link\n\nWon't show vscode hover, so not worth pasting.\n\n### 💻 Code\n\nissue 1:\n```ts\n/**\n * Foo method\n * @param arg - Documentation for arg\n */\nfunction ex1(arg: string) {\n  return arg;\n}\n```\n\nissue 2:\n```ts\n/**\n * Foo method\n * \n * @param arg Documentation for arg but it ends up being long enough that we \n *  must split it across lines to stay within max column width\n * @param arg2 Documentation for arg but it ends up being long enough that we must split it across lines to stay within max column width\n */\nfunction ex2(arg: string) {\n  return arg;\n}\n```\n\n\n### 🙁 Actual behavior\n\n<details><summary>Issue 1</summary>\n\nThe hover doc shows a bullet point when the hyphen is present (note the hover for the method itself renders properly)\n\n<img width=\"641\" height=\"276\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/37d31a32-904f-41b9-b6a2-91a941bb8a51\" />\n</details>\n\n<details><summary>Issue 2</summary>\n\n<img width=\"1388\" height=\"230\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/74b5a3d9-7cc2-470e-8666-7d2f8923315b\" />\n\n</details>\n\n\n### 🙂 Expected behavior\n\n<details><summary>Issue 1</summary>\n\nIn example 1: The hover for `arg` should match what it does when there is no hyphen:\n\n<img width=\"914\" height=\"303\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/614036c7-f5d2-455f-bb19-4ccffd24486c\" />\n\n</details>\n\nIssue 2:\n\nThe description for arg1 should appear exactly as arg2 does.\n\n### Additional information about the issue\n\nIssue #61603 identified the first issue, but framed it as a bug related to not supporting TSDoc. Since jsdoc explicitly mentions the [optional hyphen](https://jsdoc.app/tags-param), this is not an issue specific to TSdoc. TypeScript support in VSCode should render this properly.\n","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63573/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63573/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63565","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63565/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63565/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63565/events","html_url":"https://github.com/microsoft/TypeScript/issues/63565","id":4693952189,"node_id":"I_kwDOAT9aAc8AAAABF8gGvQ","number":63565,"title":"`export` modifier on `enum` disables `This condition will always return * ts2845`","user":{"login":"eps1lon","id":12292047,"node_id":"MDQ6VXNlcjEyMjkyMDQ3","avatar_url":"https://avatars.githubusercontent.com/u/12292047?v=4","gravatar_id":"","url":"https://api.github.com/users/eps1lon","html_url":"https://github.com/eps1lon","followers_url":"https://api.github.com/users/eps1lon/followers","following_url":"https://api.github.com/users/eps1lon/following{/other_user}","gists_url":"https://api.github.com/users/eps1lon/gists{/gist_id}","starred_url":"https://api.github.com/users/eps1lon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eps1lon/subscriptions","organizations_url":"https://api.github.com/users/eps1lon/orgs","repos_url":"https://api.github.com/users/eps1lon/repos","events_url":"https://api.github.com/users/eps1lon/events{/privacy}","received_events_url":"https://api.github.com/users/eps1lon/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":113970366,"node_id":"MDU6TGFiZWwxMTM5NzAzNjY=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Bug","name":"Bug","color":"e11d21","default":false,"description":"A bug in TypeScript"},{"id":1097658263,"node_id":"MDU6TGFiZWwxMDk3NjU4MjYz","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Domain:%20check:%20Control%20Flow","name":"Domain: check: Control Flow","color":"1d76db","default":false,"description":"The issue relates to control flow analysis"}],"state":"open","locked":false,"assignees":[],"milestone":{"url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29","html_url":"https://github.com/microsoft/TypeScript/milestone/29","labels_url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29/labels","id":1973940,"node_id":"MDk6TWlsZXN0b25lMTk3Mzk0MA==","number":29,"title":"Backlog","description":"Please send PRs for issues in the Backlog milestone!","creator":{"login":"mhegazy","id":8000722,"node_id":"MDQ6VXNlcjgwMDA3MjI=","avatar_url":"https://avatars.githubusercontent.com/u/8000722?v=4","gravatar_id":"","url":"https://api.github.com/users/mhegazy","html_url":"https://github.com/mhegazy","followers_url":"https://api.github.com/users/mhegazy/followers","following_url":"https://api.github.com/users/mhegazy/following{/other_user}","gists_url":"https://api.github.com/users/mhegazy/gists{/gist_id}","starred_url":"https://api.github.com/users/mhegazy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mhegazy/subscriptions","organizations_url":"https://api.github.com/users/mhegazy/orgs","repos_url":"https://api.github.com/users/mhegazy/repos","events_url":"https://api.github.com/users/mhegazy/events{/privacy}","received_events_url":"https://api.github.com/users/mhegazy/received_events","type":"User","user_view_type":"public","site_admin":false},"open_issues":1914,"closed_issues":2768,"state":"open","created_at":"2016-08-31T00:21:08Z","updated_at":"2026-06-25T15:32:53Z","due_on":null,"closed_at":null},"comments":4,"created_at":"2026-06-18T15:48:55Z","updated_at":"2026-06-24T15:23:58Z","closed_at":null,"assignee":null,"author_association":"CONTRIBUTOR","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### 🔎 Search Terms\n\nexport enum ts2845\n\n### 🕗 Version & Regression Information\n\n5.4 doesn't flag it without the `export` modifier either.\n\n### ⏯ Playground Link\n\nhttps://www.typescriptlang.org/play/?target=99&module=0&ts=6.0.0-dev.20260416#code/KYDwDg9gTgLgBMAdgVwLZwIIBMCGYbBQDyyMYpAKgJ5jBwDeAUHJgAqsD6rGA4gKIAaZnG78AykIC+jRlmABjADY4odeREQBneDBrAAXJlz5CJMpT0z1W+AGsAloixwAvMN21XLl0bwFipOQw1LQAdBjsXLx8cAA+sb4mAebBeqGifGLCLAD0OSwFhUXFJaUUABb2mnDWWPYw9hpwAO72iopwOIrNOFTVqjDIUIhwAOQwUMjAo6EAFABMABwALACsAJTZcAD8Y4rAAGYwo1uGo1D2AOblxwDcQA\n\n### 💻 Code\n\n```ts\n// remove `export` modifier \nexport enum AdapterOutputType {\n  APP_PAGE,\n  PAGES,\n}\n\ndeclare const type: AdapterOutputType\n\nconst kind =\n  type === AdapterOutputType.APP_PAGE || AdapterOutputType.PAGES\n    //                                   ~ should be flagged with: This condition will always return 'true'.(2845)\n    ? 'left'\n    : 'right';\n```\n\n\n### 🙁 Actual behavior\n\nNo typechecking error\n\n### 🙂 Expected behavior\n\n`ts2845` because the condition is always `true`.\n\n### Additional information about the issue\n\n_No response_","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63565/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63565/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63560","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63560/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63560/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63560/events","html_url":"https://github.com/microsoft/TypeScript/issues/63560","id":4671365275,"node_id":"I_kwDOAT9aAc8AAAABFm9gmw","number":63560,"title":"Quadratic duplicate declaration accumulation in intersection constructor properties can crash with RangeError","user":{"login":"canonic-epicure","id":72431,"node_id":"MDQ6VXNlcjcyNDMx","avatar_url":"https://avatars.githubusercontent.com/u/72431?v=4","gravatar_id":"","url":"https://api.github.com/users/canonic-epicure","html_url":"https://github.com/canonic-epicure","followers_url":"https://api.github.com/users/canonic-epicure/followers","following_url":"https://api.github.com/users/canonic-epicure/following{/other_user}","gists_url":"https://api.github.com/users/canonic-epicure/gists{/gist_id}","starred_url":"https://api.github.com/users/canonic-epicure/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/canonic-epicure/subscriptions","organizations_url":"https://api.github.com/users/canonic-epicure/orgs","repos_url":"https://api.github.com/users/canonic-epicure/repos","events_url":"https://api.github.com/users/canonic-epicure/events{/privacy}","received_events_url":"https://api.github.com/users/canonic-epicure/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":1093451982,"node_id":"MDU6TGFiZWwxMDkzNDUxOTgy","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Domain:%20Performance","name":"Domain: Performance","color":"97f4eb","default":false,"description":"Reports of unusually slow behavior"},{"id":5487621092,"node_id":"LA_kwDOAT9aAc8AAAABRxZz5A","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Possible%20Improvement","name":"Possible Improvement","color":"BFD4F2","default":false,"description":"The current behavior isn't wrong, but it's possible to see that it might be better in some cases"}],"state":"open","locked":false,"assignees":[],"milestone":{"url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29","html_url":"https://github.com/microsoft/TypeScript/milestone/29","labels_url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29/labels","id":1973940,"node_id":"MDk6TWlsZXN0b25lMTk3Mzk0MA==","number":29,"title":"Backlog","description":"Please send PRs for issues in the Backlog milestone!","creator":{"login":"mhegazy","id":8000722,"node_id":"MDQ6VXNlcjgwMDA3MjI=","avatar_url":"https://avatars.githubusercontent.com/u/8000722?v=4","gravatar_id":"","url":"https://api.github.com/users/mhegazy","html_url":"https://github.com/mhegazy","followers_url":"https://api.github.com/users/mhegazy/followers","following_url":"https://api.github.com/users/mhegazy/following{/other_user}","gists_url":"https://api.github.com/users/mhegazy/gists{/gist_id}","starred_url":"https://api.github.com/users/mhegazy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mhegazy/subscriptions","organizations_url":"https://api.github.com/users/mhegazy/orgs","repos_url":"https://api.github.com/users/mhegazy/repos","events_url":"https://api.github.com/users/mhegazy/events{/privacy}","received_events_url":"https://api.github.com/users/mhegazy/received_events","type":"User","user_view_type":"public","site_admin":false},"open_issues":1914,"closed_issues":2768,"state":"open","created_at":"2016-08-31T00:21:08Z","updated_at":"2026-06-25T15:32:53Z","due_on":null,"closed_at":null},"comments":5,"created_at":"2026-06-16T05:33:02Z","updated_at":"2026-06-23T16:51:50Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### Bug Report\n\nIntersection constructor types can repeatedly synthesize union/intersection properties with duplicate declaration arrays. In a diamond-like class/interface inheritance shape this causes quadratic/explosive declaration accumulation and can crash in `addRange` with:\n\n```text\nRangeError: Invalid array length\n```\n\n### Repro\n\nA standalone compiler testcase is available here:\n\nhttps://github.com/canonic-epicure/TypeScript/blob/fix-intersection-property-declarations-stacked/tests/cases/compiler/intersectionConstructorReductionCrash.ts\n\nThe shape is roughly:\n\n- generated base classes use constructor-side intersections\n- each constructor-side intersection includes previous mixin static sides via `Omit<typeof MixinN, \"prototype\">`\n- merged interfaces carry instance inheritance\n- checking the base constructor type repeatedly synthesizes intersection properties\n\n### Observed\n\nBefore the fix, with the related base-type traversal fix applied, the testcase still crashes:\n\n```text\nRangeError: Invalid array length\n    at Array.push\n    at addRange\n    at createUnionOrIntersectionProperty\n    at getUnionOrIntersectionProperty\n    at getPropertyOfUnionOrIntersectionType\n    at getPropertiesOfUnionOrIntersectionType\n    at getReducedType\n    at getReducedApparentType\n    at getSignaturesOfType\n    at isConstructorType\n```\n\nElapsed time before crash: about 4 seconds.\n\nThis also affects Language Service / tsserver semantic diagnostics. In the original larger scenario, `semanticDiagnosticsSync` timed out before this fix. With the fix, the same scenario completed in about 18ms for initial diagnostics and about 7ms for edit diagnostics.\n\n### Expected\n\nThe compiler should not repeatedly accumulate duplicate declarations while synthesizing intersection properties.\n\n### Candidate fix\n\nDeduplicate declarations when creating synthetic union/intersection properties:\n\nhttps://github.com/canonic-epicure/TypeScript/commit/7e6d30a2e3a10ea5eb42faa1663308e584218994\n\nWith the fix:\n\n- direct `tsc` check time: about 0.05s\n- elapsed time: about 0.22s\n- targeted compiler tests pass\n\n### Note\n\nThis fix is currently stacked on top of the related base-type traversal fix from:\n\nhttps://github.com/microsoft/TypeScript/issues/63555\n\nWithout that related fix, the same testcase no longer crashes after declaration deduplication, but still spends significant time in the separate base-type traversal path.\n","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63560/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63560/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63559","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63559/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63559/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63559/events","html_url":"https://github.com/microsoft/TypeScript/issues/63559","id":4670336569,"node_id":"I_kwDOAT9aAc8AAAABFl-uOQ","number":63559,"title":"Incorrect type resolution with nested constructors","user":{"login":"Mudloop","id":34929221,"node_id":"MDQ6VXNlcjM0OTI5MjIx","avatar_url":"https://avatars.githubusercontent.com/u/34929221?v=4","gravatar_id":"","url":"https://api.github.com/users/Mudloop","html_url":"https://github.com/Mudloop","followers_url":"https://api.github.com/users/Mudloop/followers","following_url":"https://api.github.com/users/Mudloop/following{/other_user}","gists_url":"https://api.github.com/users/Mudloop/gists{/gist_id}","starred_url":"https://api.github.com/users/Mudloop/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mudloop/subscriptions","organizations_url":"https://api.github.com/users/Mudloop/orgs","repos_url":"https://api.github.com/users/Mudloop/repos","events_url":"https://api.github.com/users/Mudloop/events{/privacy}","received_events_url":"https://api.github.com/users/Mudloop/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":113970366,"node_id":"MDU6TGFiZWwxMTM5NzAzNjY=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Bug","name":"Bug","color":"e11d21","default":false,"description":"A bug in TypeScript"},{"id":1452718701,"node_id":"MDU6TGFiZWwxNDUyNzE4NzAx","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Fix%20Available","name":"Fix Available","color":"bfe5bf","default":false,"description":"A PR has been opened for this issue"},{"id":9469686902,"node_id":"LA_kwDOAT9aAc8AAAACNG_0dg","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Domain:%20classes","name":"Domain: classes","color":"8e5f25","default":false,"description":"Behavior of various `class` constructs, e.g. mixins or base classes"}],"state":"open","locked":false,"assignees":[],"milestone":{"url":"https://api.github.com/repos/microsoft/TypeScript/milestones/197","html_url":"https://github.com/microsoft/TypeScript/milestone/197","labels_url":"https://api.github.com/repos/microsoft/TypeScript/milestones/197/labels","id":10659533,"node_id":"MI_kwDOAT9aAc4AoqbN","number":197,"title":"Dormant","description":"Dormant issues are defects that still exist as far as we know, but don't warrant additional investment and are not high-priority. This is typically due to one or more factors, such as:\n * Requiring an uncommon or discouraged configuration\n * Coding patterns that aren't idiomatic TS/JS\n * Minimal impact (e.g. error message phrasing that is only wrong in degenerate cases)\n * Low likelihood of encounter (e.g. requires very specific and unusual steps to observe)\n * Existence of a straightforward workaround\n\nPRs for issues in this milestone are accepted, but will require stronger justification in terms of risk, complexity, and performance cost. Invasive, hard-to-review, or otherwise overly impactful PRs targeting issues in this milestone won't be merged.","creator":{"login":"RyanCavanaugh","id":6685088,"node_id":"MDQ6VXNlcjY2ODUwODg=","avatar_url":"https://avatars.githubusercontent.com/u/6685088?v=4","gravatar_id":"","url":"https://api.github.com/users/RyanCavanaugh","html_url":"https://github.com/RyanCavanaugh","followers_url":"https://api.github.com/users/RyanCavanaugh/followers","following_url":"https://api.github.com/users/RyanCavanaugh/following{/other_user}","gists_url":"https://api.github.com/users/RyanCavanaugh/gists{/gist_id}","starred_url":"https://api.github.com/users/RyanCavanaugh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RyanCavanaugh/subscriptions","organizations_url":"https://api.github.com/users/RyanCavanaugh/orgs","repos_url":"https://api.github.com/users/RyanCavanaugh/repos","events_url":"https://api.github.com/users/RyanCavanaugh/events{/privacy}","received_events_url":"https://api.github.com/users/RyanCavanaugh/received_events","type":"User","user_view_type":"public","site_admin":true},"open_issues":14,"closed_issues":15,"state":"open","created_at":"2024-03-08T21:58:54Z","updated_at":"2026-06-23T16:55:06Z","due_on":null,"closed_at":null},"comments":0,"created_at":"2026-06-16T01:54:48Z","updated_at":"2026-06-24T15:23:57Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### 🔎 Search Terms\n\nnested constructors type resolution anti-pattern\n\n### 🕗 Version & Regression Information\n\n- This changed between versions ______ and _______\n- This changed in commit or PR _______\n- This is the behavior in every version I tried, and I reviewed the FAQ for entries about _________\n- I was unable to test this on prior versions because I only report bugs to be helpful, but I don't have time to dive deeper myself.\n\n\n### ⏯ Playground Link\n\nhttps://www.typescriptlang.org/play/?#code/KYDwDg9gTgLgBAE2AYwDYEMrDsiA7AZ3gCF0DgAuOAbwCgBIPYAdwAoBKKu++gawEs8CKgHIAgiIaMWHLnAFDRxEXAC+DdetyF4YuAF44TZjgwECcUDGBCLpcjTW1tROMQNGWpshas2EFnrUTsQAdAoIQA\n\n### 💻 Code\n\n```ts\nexport declare const Base: {\n\tnew(): {\n\t\tkind: 'A'\n\t\tnew(): { kind: 'B' }\n\t}\n}\nconst A = new class extends Base { }\nconst B = new class extends A { }\nB.kind // shows 'A', but should be 'B'\n```\n\n\n### 🙁 Actual behavior\n\nIf a ctor returns another ctor, it repeats the first level. In the above example, B.kind is 'A', but since we extended and instantiated twice, it should be 'B'.\n\n### 🙂 Expected behavior\n\nAfter extending twice, it should reach the inner class, instead of repeating the outer one.\n\n### Additional information about the issue\n\nI can only reproduce this bug with this weird experimental anti-pattern - so on its own probably not a priority at all, but types should probably reflect the runtime state as much as possible, even in weird edge cases such as this, and it might indicate a deeper underlying issue.","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63559/reactions","total_count":1,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":1},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63559/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63556","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63556/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63556/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63556/events","html_url":"https://github.com/microsoft/TypeScript/issues/63556","id":4666879285,"node_id":"I_kwDOAT9aAc8AAAABFirtNQ","number":63556,"title":"Overload missing from createElementNS","user":{"login":"mozesstumpf","id":78926228,"node_id":"MDQ6VXNlcjc4OTI2MjI4","avatar_url":"https://avatars.githubusercontent.com/u/78926228?v=4","gravatar_id":"","url":"https://api.github.com/users/mozesstumpf","html_url":"https://github.com/mozesstumpf","followers_url":"https://api.github.com/users/mozesstumpf/followers","following_url":"https://api.github.com/users/mozesstumpf/following{/other_user}","gists_url":"https://api.github.com/users/mozesstumpf/gists{/gist_id}","starred_url":"https://api.github.com/users/mozesstumpf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozesstumpf/subscriptions","organizations_url":"https://api.github.com/users/mozesstumpf/orgs","repos_url":"https://api.github.com/users/mozesstumpf/repos","events_url":"https://api.github.com/users/mozesstumpf/events{/privacy}","received_events_url":"https://api.github.com/users/mozesstumpf/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":151698898,"node_id":"MDU6TGFiZWwxNTE2OTg4OTg=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Domain:%20lib.d.ts","name":"Domain: lib.d.ts","color":"c7def8","default":false,"description":"The issue relates to the different libraries shipped with TypeScript"},{"id":5487621092,"node_id":"LA_kwDOAT9aAc8AAAABRxZz5A","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Possible%20Improvement","name":"Possible Improvement","color":"BFD4F2","default":false,"description":"The current behavior isn't wrong, but it's possible to see that it might be better in some cases"}],"state":"open","locked":false,"assignees":[],"milestone":{"url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29","html_url":"https://github.com/microsoft/TypeScript/milestone/29","labels_url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29/labels","id":1973940,"node_id":"MDk6TWlsZXN0b25lMTk3Mzk0MA==","number":29,"title":"Backlog","description":"Please send PRs for issues in the Backlog milestone!","creator":{"login":"mhegazy","id":8000722,"node_id":"MDQ6VXNlcjgwMDA3MjI=","avatar_url":"https://avatars.githubusercontent.com/u/8000722?v=4","gravatar_id":"","url":"https://api.github.com/users/mhegazy","html_url":"https://github.com/mhegazy","followers_url":"https://api.github.com/users/mhegazy/followers","following_url":"https://api.github.com/users/mhegazy/following{/other_user}","gists_url":"https://api.github.com/users/mhegazy/gists{/gist_id}","starred_url":"https://api.github.com/users/mhegazy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mhegazy/subscriptions","organizations_url":"https://api.github.com/users/mhegazy/orgs","repos_url":"https://api.github.com/users/mhegazy/repos","events_url":"https://api.github.com/users/mhegazy/events{/privacy}","received_events_url":"https://api.github.com/users/mhegazy/received_events","type":"User","user_view_type":"public","site_admin":false},"open_issues":1914,"closed_issues":2768,"state":"open","created_at":"2016-08-31T00:21:08Z","updated_at":"2026-06-25T15:32:53Z","due_on":null,"closed_at":null},"comments":1,"created_at":"2026-06-15T16:17:53Z","updated_at":"2026-06-23T17:00:45Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### ⚙ Compilation target\n\nESNext\n\n### ⚙ Library\n\n6.0.0\n\n### Missing / Incorrect Definition\n\noverload is missing for the `createElementNS` in case provide `\"http://www.w3.org/1999/xhtml\"` as `namespaceURI`.\n```ts\n// missing  createElementNS<K extends keyof HTMLElementTagNameMap>(namespaceURI: \"http://www.w3.org/1999/xhtml\", qualifiedName: K): HTMLElementTagNameMap[K];\ncreateElementNS(namespaceURI: \"http://www.w3.org/1999/xhtml\", qualifiedName: string): HTMLElement;\ncreateElementNS<K extends keyof SVGElementTagNameMap>(namespaceURI: \"http://www.w3.org/2000/svg\", qualifiedName: K): SVGElementTagNameMap[K];\ncreateElementNS(namespaceURI: \"http://www.w3.org/2000/svg\", qualifiedName: string): SVGElement;\ncreateElementNS<K extends keyof MathMLElementTagNameMap>(namespaceURI: \"http://www.w3.org/1998/Math/MathML\", qualifiedName: K): MathMLElementTagNameMap[K];\n```\n\n\n### Sample Code\n\n```TypeScript\ndocument.createElementNS(\"http://www.w3.org/1999/xhtml\", 'div'); // HTMLElement instead of HTMLDivElement\n```\n\n### Documentation Link\n\n_No response_","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63556/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63556/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63555","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63555/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63555/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63555/events","html_url":"https://github.com/microsoft/TypeScript/issues/63555","id":4666549759,"node_id":"I_kwDOAT9aAc8AAAABFiXl_w","number":63555,"title":"Quadratic check time for diamond-shaped interface inheritance graphs","user":{"login":"canonic-epicure","id":72431,"node_id":"MDQ6VXNlcjcyNDMx","avatar_url":"https://avatars.githubusercontent.com/u/72431?v=4","gravatar_id":"","url":"https://api.github.com/users/canonic-epicure","html_url":"https://github.com/canonic-epicure","followers_url":"https://api.github.com/users/canonic-epicure/followers","following_url":"https://api.github.com/users/canonic-epicure/following{/other_user}","gists_url":"https://api.github.com/users/canonic-epicure/gists{/gist_id}","starred_url":"https://api.github.com/users/canonic-epicure/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/canonic-epicure/subscriptions","organizations_url":"https://api.github.com/users/canonic-epicure/orgs","repos_url":"https://api.github.com/users/canonic-epicure/repos","events_url":"https://api.github.com/users/canonic-epicure/events{/privacy}","received_events_url":"https://api.github.com/users/canonic-epicure/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":1093451982,"node_id":"MDU6TGFiZWwxMDkzNDUxOTgy","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Domain:%20Performance","name":"Domain: Performance","color":"97f4eb","default":false,"description":"Reports of unusually slow behavior"},{"id":5487621092,"node_id":"LA_kwDOAT9aAc8AAAABRxZz5A","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Possible%20Improvement","name":"Possible Improvement","color":"BFD4F2","default":false,"description":"The current behavior isn't wrong, but it's possible to see that it might be better in some cases"}],"state":"open","locked":false,"assignees":[],"milestone":{"url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29","html_url":"https://github.com/microsoft/TypeScript/milestone/29","labels_url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29/labels","id":1973940,"node_id":"MDk6TWlsZXN0b25lMTk3Mzk0MA==","number":29,"title":"Backlog","description":"Please send PRs for issues in the Backlog milestone!","creator":{"login":"mhegazy","id":8000722,"node_id":"MDQ6VXNlcjgwMDA3MjI=","avatar_url":"https://avatars.githubusercontent.com/u/8000722?v=4","gravatar_id":"","url":"https://api.github.com/users/mhegazy","html_url":"https://github.com/mhegazy","followers_url":"https://api.github.com/users/mhegazy/followers","following_url":"https://api.github.com/users/mhegazy/following{/other_user}","gists_url":"https://api.github.com/users/mhegazy/gists{/gist_id}","starred_url":"https://api.github.com/users/mhegazy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mhegazy/subscriptions","organizations_url":"https://api.github.com/users/mhegazy/orgs","repos_url":"https://api.github.com/users/mhegazy/repos","events_url":"https://api.github.com/users/mhegazy/events{/privacy}","received_events_url":"https://api.github.com/users/mhegazy/received_events","type":"User","user_view_type":"public","site_admin":false},"open_issues":1914,"closed_issues":2768,"state":"open","created_at":"2016-08-31T00:21:08Z","updated_at":"2026-06-25T15:32:53Z","due_on":null,"closed_at":null},"comments":5,"created_at":"2026-06-15T15:35:49Z","updated_at":"2026-06-24T04:20:21Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"## Search Terms\n\nhasBaseType, interface inheritance performance, diamond-shaped interface inheritance, base type traversal, quadratic check time\n\n## Version & Regression Information\n\nThis reproduces on TypeScript 6.0.3 and on current `main` before the proposed fix.\n\nTested current `main` commit:\n\n```text\n7964e22f2b85f16e520f0e902c7fd7b6f0c15416\n```\n\n## Code\n\nThe repro is an interface-only diamond-shaped inheritance graph. Each interface extends up to 8 previous interfaces.\n\n<details>\n<summary>Full repro</summary>\n\n```ts\n// @strict: true\n// @noEmit: true\n\ninterface I0 {\n    p0_0: number;\n}\n\ninterface I1 extends I0 {\n    p1_0: number;\n}\n\ninterface I2 extends I1, I0 {\n    p2_0: number;\n}\n\ninterface I3 extends I2, I1, I0 {\n    p3_0: number;\n}\n\ninterface I4 extends I3, I2, I1, I0 {\n    p4_0: number;\n}\n\ninterface I5 extends I4, I3, I2, I1, I0 {\n    p5_0: number;\n}\n\ninterface I6 extends I5, I4, I3, I2, I1, I0 {\n    p6_0: number;\n}\n\ninterface I7 extends I6, I5, I4, I3, I2, I1, I0 {\n    p7_0: number;\n}\n\ninterface I8 extends I7, I6, I5, I4, I3, I2, I1, I0 {\n    p8_0: number;\n}\n\ninterface I9 extends I8, I7, I6, I5, I4, I3, I2, I1 {\n    p9_0: number;\n}\n\ninterface I10 extends I9, I8, I7, I6, I5, I4, I3, I2 {\n    p10_0: number;\n}\n\ninterface I11 extends I10, I9, I8, I7, I6, I5, I4, I3 {\n    p11_0: number;\n}\n\ninterface I12 extends I11, I10, I9, I8, I7, I6, I5, I4 {\n    p12_0: number;\n}\n\ninterface I13 extends I12, I11, I10, I9, I8, I7, I6, I5 {\n    p13_0: number;\n}\n\ninterface I14 extends I13, I12, I11, I10, I9, I8, I7, I6 {\n    p14_0: number;\n}\n\ninterface I15 extends I14, I13, I12, I11, I10, I9, I8, I7 {\n    p15_0: number;\n}\n\ninterface I16 extends I15, I14, I13, I12, I11, I10, I9, I8 {\n    p16_0: number;\n}\n\ninterface I17 extends I16, I15, I14, I13, I12, I11, I10, I9 {\n    p17_0: number;\n}\n\ninterface I18 extends I17, I16, I15, I14, I13, I12, I11, I10 {\n    p18_0: number;\n}\n\ninterface I19 extends I18, I17, I16, I15, I14, I13, I12, I11 {\n    p19_0: number;\n}\n\ninterface I20 extends I19, I18, I17, I16, I15, I14, I13, I12 {\n    p20_0: number;\n}\n\ninterface I21 extends I20, I19, I18, I17, I16, I15, I14, I13 {\n    p21_0: number;\n}\n\ninterface I22 extends I21, I20, I19, I18, I17, I16, I15, I14 {\n    p22_0: number;\n}\n\ninterface I23 extends I22, I21, I20, I19, I18, I17, I16, I15 {\n    p23_0: number;\n}\n\ninterface I24 extends I23, I22, I21, I20, I19, I18, I17, I16 {\n    p24_0: number;\n}\n\ninterface I25 extends I24, I23, I22, I21, I20, I19, I18, I17 {\n    p25_0: number;\n}\n\ninterface I26 extends I25, I24, I23, I22, I21, I20, I19, I18 {\n    p26_0: number;\n}\n\ninterface I27 extends I26, I25, I24, I23, I22, I21, I20, I19 {\n    p27_0: number;\n}\n\ninterface I28 extends I27, I26, I25, I24, I23, I22, I21, I20 {\n    p28_0: number;\n}\n\ninterface I29 extends I28, I27, I26, I25, I24, I23, I22, I21 {\n    p29_0: number;\n}\n\ninterface I30 extends I29, I28, I27, I26, I25, I24, I23, I22 {\n    p30_0: number;\n}\n\ninterface I31 extends I30, I29, I28, I27, I26, I25, I24, I23 {\n    p31_0: number;\n}\n\ndeclare const value: I31;\nvalue.p0_0;\n```\n\n</details>\n\n## Actual behavior\n\nBefore the fix, compiling the repro above timed out after 30 seconds.\n\nThe hotspot is `hasBaseType`, which recursively walks `getBaseTypes(target)` and can revisit the same reachable base-type subgraphs many times during one query.\n\n## Expected behavior\n\nThe checker should avoid revisiting the same base-type subgraph during a single `hasBaseType` query.\n\nWith a per-call `seen` set in `hasBaseType`, the same repro completes quickly:\n\n```text\nCheck time: 0.01s\nTotal time: 0.13s\n```\n\n## Proposed fix\n\nThe fix is to keep a per-call `Set<Type>` inside `hasBaseType` and skip already visited class/interface/reference/intersection nodes.\n\n```ts\nfunction hasBaseType(type: Type, checkBase: Type | undefined) {\n    if (!checkBase) {\n        return false;\n    }\n\n    const seen = new Set<Type>();\n\n    return check(type);\n    function check(type: Type): boolean {\n        if (getObjectFlags(type) & (ObjectFlags.ClassOrInterface | ObjectFlags.Reference)) {\n            const target = getTargetType(type) as InterfaceType;\n            if (target === checkBase) {\n                return true;\n            }\n            if (seen.has(target)) {\n                return false;\n            }\n            seen.add(target);\n            return some(getBaseTypes(target), check);\n        }\n        else if (type.flags & TypeFlags.Intersection) {\n            if (seen.has(type)) {\n                return false;\n            }\n            seen.add(type);\n            return some((type as IntersectionType).types, check);\n        }\n        return false;\n    }\n}\n```\n\nI have pushed a branch with the proposed fix and regression test here:\n\n```text\nhttps://github.com/canonic-epicure/TypeScript/tree/fix-has-base-type-seen\n```\n\nCommit:\n\n```text\n51938c85a396151a93ac0101f94c66a55dfafa14\n```\n\n## Additional information\n\nThe branch contains:\n\n- the `hasBaseType` fix;\n- the compiler regression test shown above;\n- updated baselines.\n\nValidation run:\n\n```bash\nnpx hereby local\nnpx hereby runtests --tests=interfaceExtendsDiamondPerformance\nnpx hereby runtests --tests='interfaceThatIndirectlyInheritsFromItself|interfaceThatInheritsFromItself|circularBaseTypes|infinitelyExpandingBaseTypes1'\nnpx hereby runtests --runner=compiler\n```\n\nResult:\n\n```text\n89845 passing\n```\n\nI can open a PR with the fix if this is considered appropriate for the JS-based TypeScript repository maintenance policy.\n","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63555/reactions","total_count":1,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":1,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63555/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63552","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63552/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63552/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63552/events","html_url":"https://github.com/microsoft/TypeScript/pull/63552","id":4652278451,"node_id":"PR_kwDOAT9aAc7l6QxV","number":63552,"title":"Bump esbuild from 0.27.4 to 0.28.1","user":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"labels":[{"id":1883362416,"node_id":"MDU6TGFiZWwxODgzMzYyNDE2","url":"https://api.github.com/repos/microsoft/TypeScript/labels/For%20Uncommitted%20Bug","name":"For Uncommitted Bug","color":"ededed","default":false,"description":"PR for untriaged, rejected, closed or missing bug"},{"id":3707298455,"node_id":"LA_kwDOAT9aAc7c-OKX","url":"https://api.github.com/repos/microsoft/TypeScript/labels/dependencies","name":"dependencies","color":"0366d6","default":false,"description":"Pull requests that update a dependency file"},{"id":8138650806,"node_id":"LA_kwDOAT9aAc8AAAAB5Rn0tg","url":"https://api.github.com/repos/microsoft/TypeScript/labels/javascript","name":"javascript","color":"168700","default":false,"description":"Pull requests that update Javascript code"}],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":0,"created_at":"2026-06-12T20:10:40Z","updated_at":"2026-06-12T20:10:49Z","closed_at":null,"assignee":null,"author_association":"CONTRIBUTOR","issue_field_values":[],"type":null,"active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/microsoft/TypeScript/pulls/63552","html_url":"https://github.com/microsoft/TypeScript/pull/63552","diff_url":"https://github.com/microsoft/TypeScript/pull/63552.diff","patch_url":"https://github.com/microsoft/TypeScript/pull/63552.patch","merged_at":null},"body":"Bumps [esbuild](https://github.com/evanw/esbuild) from 0.27.4 to 0.28.1.\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/evanw/esbuild/releases\">esbuild's releases</a>.</em></p>\n<blockquote>\n<h2>v0.28.1</h2>\n<ul>\n<li>\n<p>Disallow <code>\\</code> in local development server HTTP requests (<a href=\"https://github.com/evanw/esbuild/security/advisories/GHSA-g7r4-m6w7-qqqr\">GHSA-g7r4-m6w7-qqqr</a>)</p>\n<p>This release fixes a security issue where HTTP requests to esbuild's local development server could traverse outside of the serve directory on Windows using a <code>\\</code> backslash character. It happened due to the use of Go's <code>path.Clean()</code> function, which only handles Unix-style <code>/</code> characters. HTTP requests with paths containing <code>\\</code> are no longer allowed.</p>\n<p>Thanks to <a href=\"https://github.com/dellalibera\"><code>@​dellalibera</code></a> for reporting this issue.</p>\n</li>\n<li>\n<p>Add integrity checks to the Deno API (<a href=\"https://github.com/evanw/esbuild/security/advisories/GHSA-gv7w-rqvm-qjhr\">GHSA-gv7w-rqvm-qjhr</a>)</p>\n<p>The previous release of esbuild added integrity checks to esbuild's npm install script. This release also adds integrity checks to esbuild's Deno install script. Now esbuild's Deno API will also fail with an error if the downloaded esbuild binary contains something other than the expected content.</p>\n<p>Note that esbuild's Deno API installs from <code>registry.npmjs.org</code> by default, but allows the <code>NPM_CONFIG_REGISTRY</code> environment variable to override this with a custom package registry. This change means that the esbuild executable served by <code>NPM_CONFIG_REGISTRY</code> must now match the expected content.</p>\n<p>Thanks to <a href=\"https://github.com/sondt99\"><code>@​sondt99</code></a> for reporting this issue.</p>\n</li>\n<li>\n<p>Avoid inlining <code>using</code> and <code>await using</code> declarations (<a href=\"https://redirect.github.com/evanw/esbuild/issues/4482\">#4482</a>)</p>\n<p>Previously esbuild's minifier sometimes incorrectly inlined <code>using</code> and <code>await using</code> declarations into subsequent uses of that declaration, which then fails to dispose of the resource correctly. This bug happened because inlining was done for <code>let</code> and <code>const</code> declarations by avoiding doing it for <code>var</code> declarations, which no longer worked when more declaration types were added. Here's an example:</p>\n<pre lang=\"js\"><code>// Original code\r\n{\r\n  using x = new Resource()\r\n  x.activate()\r\n}\r\n<p>// Old output (with --minify)<br />\nnew Resource().activate();</p>\n<p>// New output (with --minify)<br />\n{using e=new Resource;e.activate()}<br />\n</code></pre></p>\n</li>\n<li>\n<p>Fix module evaluation when an error is thrown (<a href=\"https://redirect.github.com/evanw/esbuild/issues/4461\">#4461</a>, <a href=\"https://redirect.github.com/evanw/esbuild/pull/4467\">#4467</a>)</p>\n<p>If an error is thrown during module evaluation, esbuild previously didn't preserve the state of the module for subsequent module references. This was observable if <code>import()</code> or <code>require()</code> is used to import a module multiple times. The thrown error is supposed to be thrown by every call to <code>import()</code> or <code>require()</code>, not just the first. With this release, esbuild will now throw the same error every time you call <code>import()</code> or <code>require()</code> on a module that throws during its evaluation.</p>\n</li>\n<li>\n<p>Fix some edge cases around the <code>new</code> operator (<a href=\"https://redirect.github.com/evanw/esbuild/issues/4477\">#4477</a>)</p>\n<p>Previously esbuild incorrectly printed certain edge cases involving complex expressions inside the target of a <code>new</code> expression (specifically an optional chain and/or a tagged template literal). The generated code for the <code>new</code> target was not correctly wrapped with parentheses, and either contained a syntax error or had different semantics. These edge cases have been fixed so that they now correctly wrap the <code>new</code> target in parentheses. Here is an example of some affected code:</p>\n<pre lang=\"js\"><code>// Original code\r\nnew (foo()`bar`)()\r\nnew (foo()?.bar)()\r\n<p>// Old output<br />\nnew foo()<code>bar</code>();<br />\nnew (foo())?.bar();</p>\n<p></code></pre></p>\n</li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/evanw/esbuild/blob/main/CHANGELOG.md\">esbuild's changelog</a>.</em></p>\n<blockquote>\n<h2>0.28.1</h2>\n<ul>\n<li>\n<p>Disallow <code>\\</code> in local development server HTTP requests (<a href=\"https://github.com/evanw/esbuild/security/advisories/GHSA-g7r4-m6w7-qqqr\">GHSA-g7r4-m6w7-qqqr</a>)</p>\n<p>This release fixes a security issue where HTTP requests to esbuild's local development server could traverse outside of the serve directory on Windows using a <code>\\</code> backslash character. It happened due to the use of Go's <code>path.Clean()</code> function, which only handles Unix-style <code>/</code> characters. HTTP requests with paths containing <code>\\</code> are no longer allowed.</p>\n<p>Thanks to <a href=\"https://github.com/dellalibera\"><code>@​dellalibera</code></a> for reporting this issue.</p>\n</li>\n<li>\n<p>Add integrity checks to the Deno API (<a href=\"https://github.com/evanw/esbuild/security/advisories/GHSA-gv7w-rqvm-qjhr\">GHSA-gv7w-rqvm-qjhr</a>)</p>\n<p>The previous release of esbuild added integrity checks to esbuild's npm install script. This release also adds integrity checks to esbuild's Deno install script. Now esbuild's Deno API will also fail with an error if the downloaded esbuild binary contains something other than the expected content.</p>\n<p>Note that esbuild's Deno API installs from <code>registry.npmjs.org</code> by default, but allows the <code>NPM_CONFIG_REGISTRY</code> environment variable to override this with a custom package registry. This change means that the esbuild executable served by <code>NPM_CONFIG_REGISTRY</code> must now match the expected content.</p>\n<p>Thanks to <a href=\"https://github.com/sondt99\"><code>@​sondt99</code></a> for reporting this issue.</p>\n</li>\n<li>\n<p>Avoid inlining <code>using</code> and <code>await using</code> declarations (<a href=\"https://redirect.github.com/evanw/esbuild/issues/4482\">#4482</a>)</p>\n<p>Previously esbuild's minifier sometimes incorrectly inlined <code>using</code> and <code>await using</code> declarations into subsequent uses of that declaration, which then fails to dispose of the resource correctly. This bug happened because inlining was done for <code>let</code> and <code>const</code> declarations by avoiding doing it for <code>var</code> declarations, which no longer worked when more declaration types were added. Here's an example:</p>\n<pre lang=\"js\"><code>// Original code\n{\n  using x = new Resource()\n  x.activate()\n}\n<p>// Old output (with --minify)<br />\nnew Resource().activate();</p>\n<p>// New output (with --minify)<br />\n{using e=new Resource;e.activate()}<br />\n</code></pre></p>\n</li>\n<li>\n<p>Fix module evaluation when an error is thrown (<a href=\"https://redirect.github.com/evanw/esbuild/issues/4461\">#4461</a>, <a href=\"https://redirect.github.com/evanw/esbuild/pull/4467\">#4467</a>)</p>\n<p>If an error is thrown during module evaluation, esbuild previously didn't preserve the state of the module for subsequent module references. This was observable if <code>import()</code> or <code>require()</code> is used to import a module multiple times. The thrown error is supposed to be thrown by every call to <code>import()</code> or <code>require()</code>, not just the first. With this release, esbuild will now throw the same error every time you call <code>import()</code> or <code>require()</code> on a module that throws during its evaluation.</p>\n</li>\n<li>\n<p>Fix some edge cases around the <code>new</code> operator (<a href=\"https://redirect.github.com/evanw/esbuild/issues/4477\">#4477</a>)</p>\n<p>Previously esbuild incorrectly printed certain edge cases involving complex expressions inside the target of a <code>new</code> expression (specifically an optional chain and/or a tagged template literal). The generated code for the <code>new</code> target was not correctly wrapped with parentheses, and either contained a syntax error or had different semantics. These edge cases have been fixed so that they now correctly wrap the <code>new</code> target in parentheses. Here is an example of some affected code:</p>\n<pre lang=\"js\"><code>// Original code\nnew (foo()`bar`)()\nnew (foo()?.bar)()\n<p>// Old output<br />\nnew foo()<code>bar</code>();<br />\nnew (foo())?.bar();<br />\n</code></pre></p>\n</li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/evanw/esbuild/commit/bb9db84c02433fbe37b3509f53f9f3e3cc48725e\"><code>bb9db84</code></a> publish 0.28.1 to npm</li>\n<li><a href=\"https://github.com/evanw/esbuild/commit/9ff053e53b8eeb990f59355dbea365277ac45ee2\"><code>9ff053e</code></a> security: add integrity checks to the Deno API</li>\n<li><a href=\"https://github.com/evanw/esbuild/commit/0a9bf2135b67c7e28989a5ba19f0f000805a5ab5\"><code>0a9bf21</code></a> enforce non-negative size in gzip parser</li>\n<li><a href=\"https://github.com/evanw/esbuild/commit/e2a1a7132058ee067fe736eac15f695861b8654e\"><code>e2a1a71</code></a> security: forbid <code>\\\\</code> in local dev server requests</li>\n<li><a href=\"https://github.com/evanw/esbuild/commit/83a2cbfc35809f4fd5152da59572d7bed7739d78\"><code>83a2cbf</code></a> fix <a href=\"https://redirect.github.com/evanw/esbuild/issues/4482\">#4482</a>: don't inline <code>using</code> declarations</li>\n<li><a href=\"https://github.com/evanw/esbuild/commit/308ad745d824c77bc607603451b257d0f2fd9a38\"><code>308ad74</code></a> fix <a href=\"https://redirect.github.com/evanw/esbuild/issues/4471\">#4471</a>: renaming of nested <code>var</code> declarations</li>\n<li><a href=\"https://github.com/evanw/esbuild/commit/f013f5f99a015bce92ec48d49181d4ad3177b29b\"><code>f013f5f</code></a> fix some typos</li>\n<li><a href=\"https://github.com/evanw/esbuild/commit/aafd6e48b1088336a5f5a17e930be7e840d43d8c\"><code>aafd6e4</code></a> chore: fix some minor issues in comments (<a href=\"https://redirect.github.com/evanw/esbuild/issues/4462\">#4462</a>)</li>\n<li><a href=\"https://github.com/evanw/esbuild/commit/15300c30b5e22f7cfcbed850c246d35095658386\"><code>15300c3</code></a> follow up: cjs evaluation fixes</li>\n<li><a href=\"https://github.com/evanw/esbuild/commit/1bda0c31d7697c0af44b3ab39b81e599e559a395\"><code>1bda0c3</code></a> fix <a href=\"https://redirect.github.com/evanw/esbuild/issues/4461\">#4461</a>, fix <a href=\"https://redirect.github.com/evanw/esbuild/issues/4467\">#4467</a>: esm evaluation fixes</li>\n<li>Additional commits viewable in <a href=\"https://github.com/evanw/esbuild/compare/v0.27.4...v0.28.1\">compare view</a></li>\n</ul>\n</details>\n<br />\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=esbuild&package-manager=npm_and_yarn&previous-version=0.27.4&new-version=0.28.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n<details>\n<summary>Dependabot commands and options</summary>\n<br />\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/microsoft/TypeScript/network/alerts).\n\n</details>","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63552/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63552/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63551","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63551/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63551/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63551/events","html_url":"https://github.com/microsoft/TypeScript/issues/63551","id":4650646836,"node_id":"I_kwDOAT9aAc8AAAABFTM9NA","number":63551,"title":"Destructured function does not show outline of inner function parameters","user":{"login":"aiday-mar","id":61460952,"node_id":"MDQ6VXNlcjYxNDYwOTUy","avatar_url":"https://avatars.githubusercontent.com/u/61460952?v=4","gravatar_id":"","url":"https://api.github.com/users/aiday-mar","html_url":"https://github.com/aiday-mar","followers_url":"https://api.github.com/users/aiday-mar/followers","following_url":"https://api.github.com/users/aiday-mar/following{/other_user}","gists_url":"https://api.github.com/users/aiday-mar/gists{/gist_id}","starred_url":"https://api.github.com/users/aiday-mar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aiday-mar/subscriptions","organizations_url":"https://api.github.com/users/aiday-mar/orgs","repos_url":"https://api.github.com/users/aiday-mar/repos","events_url":"https://api.github.com/users/aiday-mar/events{/privacy}","received_events_url":"https://api.github.com/users/aiday-mar/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":113971155,"node_id":"MDU6TGFiZWwxMTM5NzExNTU=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Suggestion","name":"Suggestion","color":"006b75","default":false,"description":"An idea for TypeScript"},{"id":373477802,"node_id":"MDU6TGFiZWwzNzM0Nzc4MDI=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Awaiting%20More%20Feedback","name":"Awaiting More Feedback","color":"556677","default":false,"description":"This means we'd like to hear from more people who would be helped by this feature"}],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":2,"created_at":"2026-06-12T15:51:18Z","updated_at":"2026-06-24T16:06:22Z","closed_at":null,"assignee":null,"author_association":"CONTRIBUTOR","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### 🔎 Search Terms\n\noutline model\n\n\n### 🕗 Version & Regression Information\n\n- This changed between versions ______ and _______\n- This changed in commit or PR _______\n- This is the behavior in every version I tried, and I reviewed the FAQ for entries about _________\n- I was unable to test this on prior versions because _______\n\n\n### ⏯ Playground Link\n\n_No response_\n\n### 💻 Code\n\n```ts\n// Your code here\n```\n\n\n### 🙁 Actual behavior\n\nEssentially for the code:\n\n```\nexport const [var1, var2] = processLightDarkTokens({\n  a : {\n    b : {\n\n    }\n  },\n  c : {\n\n  }\n});\n```\n\nThe outline model returned by TypeScript does not show a, b and c. But for:\n\n```\nexport const abc = processLightDarkTokens({\n  a : {\n    b : {\n\n    }\n  },\n  c : {\n\n  }\n});\n```\n\nIt does.\n\n### 🙂 Expected behavior\n\nI would expect a, b, and c to be visible in the outline model in both cases. \n\n### Additional information about the issue\n\nHi, I am a developer on the VS Code team, and I recently received the following bug : https://github.com/microsoft/vscode/issues/241563. The bug is that the VS Code editor sticky scroll does not display the expected sticky lines. This happens because the outline model returned by the TypeScript server changes unexpectedly depending on if the function return variable is destructured or not. I attach a screen recording here to show the issue. \n\nEssentially for the code:\n\n```\nexport const [var1, var2] = processLightDarkTokens({\n  a : {\n    b : {\n\n    }\n  },\n  c : {\n\n  }\n});\n```\n\nThe outline does not show a, b and c. But for:\n\n```\nexport const abc = processLightDarkTokens({\n  a : {\n    b : {\n\n    }\n  },\n  c : {\n\n  }\n});\n```\n\nIt does. Is this expected?\n\nhttps://github.com/user-attachments/assets/1b425011-ae36-4b54-bb75-fc193a3246ba","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63551/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63551/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63546","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63546/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63546/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63546/events","html_url":"https://github.com/microsoft/TypeScript/issues/63546","id":4631068916,"node_id":"I_kwDOAT9aAc8AAAABFAiA9A","number":63546,"title":"Duplicate function declarations in generated `.d.ts` for non-module JS files with `allowJs` + `declaration`","user":{"login":"LangLangBart","id":92653266,"node_id":"U_kgDOBYXG0g","avatar_url":"https://avatars.githubusercontent.com/u/92653266?v=4","gravatar_id":"","url":"https://api.github.com/users/LangLangBart","html_url":"https://github.com/LangLangBart","followers_url":"https://api.github.com/users/LangLangBart/followers","following_url":"https://api.github.com/users/LangLangBart/following{/other_user}","gists_url":"https://api.github.com/users/LangLangBart/gists{/gist_id}","starred_url":"https://api.github.com/users/LangLangBart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LangLangBart/subscriptions","organizations_url":"https://api.github.com/users/LangLangBart/orgs","repos_url":"https://api.github.com/users/LangLangBart/repos","events_url":"https://api.github.com/users/LangLangBart/events{/privacy}","received_events_url":"https://api.github.com/users/LangLangBart/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":113970366,"node_id":"MDU6TGFiZWwxMTM5NzAzNjY=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Bug","name":"Bug","color":"e11d21","default":false,"description":"A bug in TypeScript"},{"id":670961382,"node_id":"MDU6TGFiZWw2NzA5NjEzODI=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Domain:%20Declaration%20Emit","name":"Domain: Declaration Emit","color":"fef2c0","default":false,"description":"The issue relates to the emission of d.ts files"}],"state":"open","locked":false,"assignees":[],"milestone":{"url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29","html_url":"https://github.com/microsoft/TypeScript/milestone/29","labels_url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29/labels","id":1973940,"node_id":"MDk6TWlsZXN0b25lMTk3Mzk0MA==","number":29,"title":"Backlog","description":"Please send PRs for issues in the Backlog milestone!","creator":{"login":"mhegazy","id":8000722,"node_id":"MDQ6VXNlcjgwMDA3MjI=","avatar_url":"https://avatars.githubusercontent.com/u/8000722?v=4","gravatar_id":"","url":"https://api.github.com/users/mhegazy","html_url":"https://github.com/mhegazy","followers_url":"https://api.github.com/users/mhegazy/followers","following_url":"https://api.github.com/users/mhegazy/following{/other_user}","gists_url":"https://api.github.com/users/mhegazy/gists{/gist_id}","starred_url":"https://api.github.com/users/mhegazy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mhegazy/subscriptions","organizations_url":"https://api.github.com/users/mhegazy/orgs","repos_url":"https://api.github.com/users/mhegazy/repos","events_url":"https://api.github.com/users/mhegazy/events{/privacy}","received_events_url":"https://api.github.com/users/mhegazy/received_events","type":"User","user_view_type":"public","site_admin":false},"open_issues":1914,"closed_issues":2768,"state":"open","created_at":"2016-08-31T00:21:08Z","updated_at":"2026-06-25T15:32:53Z","due_on":null,"closed_at":null},"comments":3,"created_at":"2026-06-10T12:13:00Z","updated_at":"2026-06-25T15:03:02Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### 🔎 Search Terms\n\nallowJs declaration duplicate, allowJs declaration emit multiple files global function, declaration emit global scope merged symbol resolveAnonymousTypeMembers, script file declaration emit duplicates\n\n### 🕗 Version & Regression Information\n\nThis is the behavior in every version I tried, including 6.0.3 (also tested typescript@next)\n\nPlayground Link: requires multi-file setup with tsconfig.json. \n\nI used stackblitz instead. \n\n### ⏯ Playground Link\n\nhttps://stackblitz.com/edit/node-emxsybj1?file=tsconfig.json\n\n### 💻 Code\n\n**tsconfig.json**\n\n```json\n{\n  \"compilerOptions\": {\n    \"allowJs\": true,\n    \"declaration\": true,\n    \"emitDeclarationOnly\": true\n  },\n  \"include\": [\"*.js\"]\n}\n```\n\n**a.js**\n\n```js\n/** @filename: a.js */\nfunction func(x) {\n  return x + 1;\n}\n```\n\n**b.js**\n\n```js\n/** @filename: b.js */\nfunction func(x) {\n  return x + 2;\n}\n```\n\n\n\n### 🙁 Actual behavior\n\n**a.d.ts** and **b.d.ts** each contain the function declaration twice (once from each file).\n\n**a.d.ts**\n\n```ts\n/** @filename: a.js */\ndeclare function func(x: any): any;\ndeclare function func(x: any): any;\n```\n\n**b.d.ts**\n\n```ts\ndeclare function func(x: any): any;\n/** @filename: b.js */\ndeclare function func(x: any): any;\n```\n\n\n### 🙂 Expected behavior\n\nEach **.d.ts** should only contain the declaration from its own source file or error (not sure).\n\n### Additional information about the issue\n\nrelated issues:\n\n- #27011\n- #49200\n\n**EDIT1:** updated _Expected behavior_","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63546/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63546/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63540","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63540/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63540/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63540/events","html_url":"https://github.com/microsoft/TypeScript/issues/63540","id":4601075575,"node_id":"I_kwDOAT9aAc8AAAABEj7Xdw","number":63540,"title":"Better ownership lint to eliminate ownership chaos for generated code","user":{"login":"loynoir","id":78727408,"node_id":"MDQ6VXNlcjc4NzI3NDA4","avatar_url":"https://avatars.githubusercontent.com/u/78727408?v=4","gravatar_id":"","url":"https://api.github.com/users/loynoir","html_url":"https://github.com/loynoir","followers_url":"https://api.github.com/users/loynoir/followers","following_url":"https://api.github.com/users/loynoir/following{/other_user}","gists_url":"https://api.github.com/users/loynoir/gists{/gist_id}","starred_url":"https://api.github.com/users/loynoir/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/loynoir/subscriptions","organizations_url":"https://api.github.com/users/loynoir/orgs","repos_url":"https://api.github.com/users/loynoir/repos","events_url":"https://api.github.com/users/loynoir/events{/privacy}","received_events_url":"https://api.github.com/users/loynoir/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":113971155,"node_id":"MDU6TGFiZWwxMTM5NzExNTU=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Suggestion","name":"Suggestion","color":"006b75","default":false,"description":"An idea for TypeScript"},{"id":114201833,"node_id":"MDU6TGFiZWwxMTQyMDE4MzM=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Needs%20Proposal","name":"Needs Proposal","color":"556b75","default":false,"description":"This issue needs a plan that clarifies the finer details of how it could be implemented."}],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":6,"created_at":"2026-06-06T00:37:31Z","updated_at":"2026-06-08T15:51:20Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### 🔍 Search Terms\n\n- proposal-explicit-resource-management\n- ownership\n- lifetime\n\n### ✅ Viability Checklist\n\n- [x] This wouldn't be a breaking change in existing TypeScript/JavaScript code\n- [x] This wouldn't change the runtime behavior of existing JavaScript code\n- [x] This could be implemented without emitting different JS based on the types of the expressions\n- [x] This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)\n- [x] This isn't a request to add a new utility type: https://github.com/microsoft/TypeScript/wiki/No-New-Utility-Types\n- [x] This feature would agree with the rest of our Design Goals: https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals\n\n### ⭐ Suggestion\n\nBetter ownership lint to kill ownership chaos.\n\nMaybe rust lifetime?\n\n### 📃 Motivating Example\n\nSee\n\nhttps://github.com/denoland/deno/issues/34953\n\nTypescript should lint below code will crash due to ownership\n\n```js\nDeno.serve({}, async (_req) => {\n  using file = await Deno.open(new URL(import.meta.url).pathname);\n  return new Response(file.readable);\n});\n```\n\nhttps://github.com/denoland/deno/issues/34953#issuecomment-4636526241\n\nSome think\n\n> `file.readable` carries ownership of the file\n\nhttps://github.com/denoland/deno/issues/34953#issuecomment-4636588109\n\nSome think `file.readable` does not carries ownership of the file\n\n```js\n> file.readable[Symbol.dispose]\nundefined\n```\n\n\n### 💻 Use Cases\n\n1. What do you want to use this for?\n\nBetter ownership type\n\n2. What shortcomings exist with current approaches?\n\nTBD\n\n3. What workarounds are you using in the meantime?\n\nNo way.\n\n## related\n\nhttps://github.com/denoland/deno/issues/34931\n\nSimple code leads to server crash due to ownership\n\nGenered by AI.\n\nSimplified for reproduce.\n\n```ts\nDeno.serve({}, async (_req) => {\n  using file = await Deno.open(new URL(import.meta.url).pathname);\n  return new Response(file.readable);\n});\n```\n\n---\n\nhttps://github.com/denoland/deno/issues/34953\n\nHow to easy stream file within deno server?\n\n---\n\nhttps://github.com/tc39/proposal-explicit-resource-management/issues/274\n\nHow does proposal-explicit-resource-management suggest how to easy extend stream file lifetime within server?\n\n---\n\nhttps://github.com/microsoft/TypeScript/issues/63540\n\nBetter ownership lint to kill ownership chaos\n","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63540/reactions","total_count":2,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":2,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63540/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63539","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63539/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63539/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63539/events","html_url":"https://github.com/microsoft/TypeScript/pull/63539","id":4600357742,"node_id":"PR_kwDOAT9aAc7jRtUp","number":63539,"title":"ignore me, testing bot","user":{"login":"jakebailey","id":5341706,"node_id":"MDQ6VXNlcjUzNDE3MDY=","avatar_url":"https://avatars.githubusercontent.com/u/5341706?v=4","gravatar_id":"","url":"https://api.github.com/users/jakebailey","html_url":"https://github.com/jakebailey","followers_url":"https://api.github.com/users/jakebailey/followers","following_url":"https://api.github.com/users/jakebailey/following{/other_user}","gists_url":"https://api.github.com/users/jakebailey/gists{/gist_id}","starred_url":"https://api.github.com/users/jakebailey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jakebailey/subscriptions","organizations_url":"https://api.github.com/users/jakebailey/orgs","repos_url":"https://api.github.com/users/jakebailey/repos","events_url":"https://api.github.com/users/jakebailey/events{/privacy}","received_events_url":"https://api.github.com/users/jakebailey/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":1503029093,"node_id":"MDU6TGFiZWwxNTAzMDI5MDkz","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Author:%20Team","name":"Author: Team","color":"3178C6","default":false,"description":""},{"id":1883362416,"node_id":"MDU6TGFiZWwxODgzMzYyNDE2","url":"https://api.github.com/repos/microsoft/TypeScript/labels/For%20Uncommitted%20Bug","name":"For Uncommitted Bug","color":"ededed","default":false,"description":"PR for untriaged, rejected, closed or missing bug"}],"state":"open","locked":false,"assignees":[{"login":"jakebailey","id":5341706,"node_id":"MDQ6VXNlcjUzNDE3MDY=","avatar_url":"https://avatars.githubusercontent.com/u/5341706?v=4","gravatar_id":"","url":"https://api.github.com/users/jakebailey","html_url":"https://github.com/jakebailey","followers_url":"https://api.github.com/users/jakebailey/followers","following_url":"https://api.github.com/users/jakebailey/following{/other_user}","gists_url":"https://api.github.com/users/jakebailey/gists{/gist_id}","starred_url":"https://api.github.com/users/jakebailey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jakebailey/subscriptions","organizations_url":"https://api.github.com/users/jakebailey/orgs","repos_url":"https://api.github.com/users/jakebailey/repos","events_url":"https://api.github.com/users/jakebailey/events{/privacy}","received_events_url":"https://api.github.com/users/jakebailey/received_events","type":"User","user_view_type":"public","site_admin":false}],"milestone":null,"comments":33,"created_at":"2026-06-05T21:47:16Z","updated_at":"2026-06-08T22:54:55Z","closed_at":null,"assignee":{"login":"jakebailey","id":5341706,"node_id":"MDQ6VXNlcjUzNDE3MDY=","avatar_url":"https://avatars.githubusercontent.com/u/5341706?v=4","gravatar_id":"","url":"https://api.github.com/users/jakebailey","html_url":"https://github.com/jakebailey","followers_url":"https://api.github.com/users/jakebailey/followers","following_url":"https://api.github.com/users/jakebailey/following{/other_user}","gists_url":"https://api.github.com/users/jakebailey/gists{/gist_id}","starred_url":"https://api.github.com/users/jakebailey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jakebailey/subscriptions","organizations_url":"https://api.github.com/users/jakebailey/orgs","repos_url":"https://api.github.com/users/jakebailey/repos","events_url":"https://api.github.com/users/jakebailey/events{/privacy}","received_events_url":"https://api.github.com/users/jakebailey/received_events","type":"User","user_view_type":"public","site_admin":false},"author_association":"MEMBER","issue_field_values":[],"type":null,"active_lock_reason":null,"draft":true,"pull_request":{"url":"https://api.github.com/repos/microsoft/TypeScript/pulls/63539","html_url":"https://github.com/microsoft/TypeScript/pull/63539","diff_url":"https://github.com/microsoft/TypeScript/pull/63539.diff","patch_url":"https://github.com/microsoft/TypeScript/pull/63539.patch","merged_at":null},"body":null,"closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63539/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63539/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63533","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63533/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63533/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63533/events","html_url":"https://github.com/microsoft/TypeScript/issues/63533","id":4591873673,"node_id":"I_kwDOAT9aAc8AAAABEbJuiQ","number":63533,"title":"Design Meeting Notes, 2026-06-04","user":{"login":"RyanCavanaugh","id":6685088,"node_id":"MDQ6VXNlcjY2ODUwODg=","avatar_url":"https://avatars.githubusercontent.com/u/6685088?v=4","gravatar_id":"","url":"https://api.github.com/users/RyanCavanaugh","html_url":"https://github.com/RyanCavanaugh","followers_url":"https://api.github.com/users/RyanCavanaugh/followers","following_url":"https://api.github.com/users/RyanCavanaugh/following{/other_user}","gists_url":"https://api.github.com/users/RyanCavanaugh/gists{/gist_id}","starred_url":"https://api.github.com/users/RyanCavanaugh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RyanCavanaugh/subscriptions","organizations_url":"https://api.github.com/users/RyanCavanaugh/orgs","repos_url":"https://api.github.com/users/RyanCavanaugh/repos","events_url":"https://api.github.com/users/RyanCavanaugh/events{/privacy}","received_events_url":"https://api.github.com/users/RyanCavanaugh/received_events","type":"User","user_view_type":"public","site_admin":true},"labels":[{"id":263799193,"node_id":"MDU6TGFiZWwyNjM3OTkxOTM=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Design%20Notes","name":"Design Notes","color":"bfdadc","default":false,"description":"Notes from our design meetings"}],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":2,"created_at":"2026-06-04T20:17:59Z","updated_at":"2026-06-05T18:20:32Z","closed_at":null,"assignee":null,"author_association":"MEMBER","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"## `as`/`satisfies` precedence and `erasableSyntaxOnly`\n\nIssue: #63527\n\n * Problem: `1 + 2 as number / 3` parses as `((1 + 2) as number) / 3`\n * This can't be emitted without parenthesizing `1 + 2`, since `1 + 2 / 3` has different meaning\n * This in turn requires \"moving\" `1 + 2` over by one to make room for the opening paren\n * Bug report: Therefore this should be banned under `erasableSyntaxOnly` (ESO)\n * Question 1: Does the violate the implied constraints of ESO?\n   * Argument against: No, ESO was only about *removing* annotations, and this is still a removal of type info. \"blankability\" was never a discussed property when designing ESO.\n   * Argument for: Many current ESO type strippers, e.g. `ts-blank-space`, treat this as an invariant for the sake of reusing source maps\n * Conclusion 1: Preserving source maps is a very useful invariant, and all other ESO limitations have this property. Adopt the \"new\" interpretation where ESO implies that you can type-strip by space substitution without moving anything around\n * Question 2: Isn't this precedence awful? Does anyone writing `1 + 2 as number / 3` actually expect this expression to evaluate the way it does?\n * Also applies to `satisfies`\n * This is generally not a live question because this really only matters for binary computation operators, which rarely need type assertions, and this code looks odd enough already that you're likely to add parens anyway. Nevertheless.\n * There's modern JS precedent for erroring on \"too-confusing precedence\" situations, e.g. `-2 ** 3`\n * Conclusion 2: Make this an error in *all* configurations, assuming a top800 run produces reasonable results\n\n## Template literals and Unicode\n\nIssue: microsoft/typescript-go#4137\n\n * Problem: Consider this code\n\n```ts\ntype Heads<S> = S extends `${infer C}${infer R}` ? [C, R] : never;\ntype A = Heads<\"😀abc\">;\ndeclare let a: A;\nconst chk: [\"😀\", \"abc\"] = a;\n```\n\nCorsa says this code is OK, which seems reasonable. This is consistent with e.g. `[...\"😀abc\"]`, or `for (const c of \"😀abc\") {`, or `/^./u.exec(`.\n\nStrada splits `\"😀\"` into `\\uD83D` and `\\uDE00`, which seems a bit less reasonable. This is consistent with `\"😀abc\"[0]` or `\"😀abc\".split(\"\")`, or `/^./.exec(`, but generally when this actually happens in a way that matters, it's a bug.\n\nShould we change this? The usefulness of splitting these surrogates apart is... questionable. You end up with `A` here as an illegal unpaired surrogate, which we can't even send over the wire or serialize without special encoding. Re-joining strings that might have isolated surrogates requires extra work to detect and re-join them. At best this is exposing an implementation detail of JS.\n\nThe downside of changing this that a Peano-computed `Length` type primitive will turn up a different number than the JS `.length` property, but this is already a hazard in JS (`\"😀\".length !== [...\"😀\"]).length`).\n\nConclusion: Change template literal inference to split on runes instead of code points. Run top800 and see what happens - if OK, accept this as a breaking change for 7.0.\n\n","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63533/reactions","total_count":2,"+1":0,"-1":0,"laugh":0,"hooray":1,"confused":0,"heart":1,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63533/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63522","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63522/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63522/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63522/events","html_url":"https://github.com/microsoft/TypeScript/issues/63522","id":4560250911,"node_id":"I_kwDOAT9aAc8AAAABD8_oHw","number":63522,"title":"Declarations that shadow global `Symbol`  break emit for `using` declarations","user":{"login":"DanielRosenwasser","id":972891,"node_id":"MDQ6VXNlcjk3Mjg5MQ==","avatar_url":"https://avatars.githubusercontent.com/u/972891?v=4","gravatar_id":"","url":"https://api.github.com/users/DanielRosenwasser","html_url":"https://github.com/DanielRosenwasser","followers_url":"https://api.github.com/users/DanielRosenwasser/followers","following_url":"https://api.github.com/users/DanielRosenwasser/following{/other_user}","gists_url":"https://api.github.com/users/DanielRosenwasser/gists{/gist_id}","starred_url":"https://api.github.com/users/DanielRosenwasser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DanielRosenwasser/subscriptions","organizations_url":"https://api.github.com/users/DanielRosenwasser/orgs","repos_url":"https://api.github.com/users/DanielRosenwasser/repos","events_url":"https://api.github.com/users/DanielRosenwasser/events{/privacy}","received_events_url":"https://api.github.com/users/DanielRosenwasser/received_events","type":"User","user_view_type":"public","site_admin":true},"labels":[{"id":113970366,"node_id":"MDU6TGFiZWwxMTM5NzAzNjY=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Bug","name":"Bug","color":"e11d21","default":false,"description":"A bug in TypeScript"},{"id":1193152259,"node_id":"MDU6TGFiZWwxMTkzMTUyMjU5","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Domain:%20JS%20Emit","name":"Domain: JS Emit","color":"fce66c","default":false,"description":"The issue relates to the emission of JavaScript"}],"state":"open","locked":false,"assignees":[],"milestone":{"url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29","html_url":"https://github.com/microsoft/TypeScript/milestone/29","labels_url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29/labels","id":1973940,"node_id":"MDk6TWlsZXN0b25lMTk3Mzk0MA==","number":29,"title":"Backlog","description":"Please send PRs for issues in the Backlog milestone!","creator":{"login":"mhegazy","id":8000722,"node_id":"MDQ6VXNlcjgwMDA3MjI=","avatar_url":"https://avatars.githubusercontent.com/u/8000722?v=4","gravatar_id":"","url":"https://api.github.com/users/mhegazy","html_url":"https://github.com/mhegazy","followers_url":"https://api.github.com/users/mhegazy/followers","following_url":"https://api.github.com/users/mhegazy/following{/other_user}","gists_url":"https://api.github.com/users/mhegazy/gists{/gist_id}","starred_url":"https://api.github.com/users/mhegazy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mhegazy/subscriptions","organizations_url":"https://api.github.com/users/mhegazy/orgs","repos_url":"https://api.github.com/users/mhegazy/repos","events_url":"https://api.github.com/users/mhegazy/events{/privacy}","received_events_url":"https://api.github.com/users/mhegazy/received_events","type":"User","user_view_type":"public","site_admin":false},"open_issues":1914,"closed_issues":2768,"state":"open","created_at":"2016-08-31T00:21:08Z","updated_at":"2026-06-25T15:32:53Z","due_on":null,"closed_at":null},"comments":4,"created_at":"2026-06-01T04:06:53Z","updated_at":"2026-06-06T04:51:41Z","closed_at":null,"assignee":null,"author_association":"MEMBER","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"```ts\n// @lib: esnext\n// @target: es2024, esnext\nexport class Symbol {\n}\n\n{\n  using _ = {\n    [globalThis.Symbol.dispose]() {\n        console.log(\"Hello world!\");\n    }\n  };\n}\n```\n\n**Expected**: Running the emitted code for both es2024 and esnext display \"Hello world!\".\n**Actual**:\n\n```\n> node testfile.js\nfile:///D:/ts-track-any/testfile.js:10\n            if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n                                       ^\n\nTypeError: Symbol.dispose is not defined.\n```\n\n<details><summary>Emitted JS code</summary>\n<p>\n\n\n```js\nvar __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {\n    if (value !== null && value !== void 0) {\n        if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n        var dispose, inner;\n        if (async) {\n            if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n            dispose = value[Symbol.asyncDispose];\n        }\n        if (dispose === void 0) {\n            if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n            dispose = value[Symbol.dispose];\n            if (async) inner = dispose;\n        }\n        if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n        if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n        env.stack.push({ value: value, dispose: dispose, async: async });\n    }\n    else if (async) {\n        env.stack.push({ async: true });\n    }\n    return value;\n};\nvar __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {\n    return function (env) {\n        function fail(e) {\n            env.error = env.hasError ? new SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n            env.hasError = true;\n        }\n        var r, s = 0;\n        function next() {\n            while (r = env.stack.pop()) {\n                try {\n                    if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n                    if (r.dispose) {\n                        var result = r.dispose.call(r.value);\n                        if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n                    }\n                    else s |= 1;\n                }\n                catch (e) {\n                    fail(e);\n                }\n            }\n            if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n            if (env.hasError) throw env.error;\n        }\n        return next();\n    };\n})(typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n    var e = new Error(message);\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n});\nexport class Symbol {\n}\n{\n    const env_1 = { stack: [], error: void 0, hasError: false };\n    try {\n        const _ = __addDisposableResource(env_1, {\n            [globalThis.Symbol.dispose]() {\n                console.log(\"Hello world!\");\n            }\n        }, false);\n    }\n    catch (e_1) {\n        env_1.error = e_1;\n        env_1.hasError = true;\n    }\n    finally {\n        __disposeResources(env_1);\n    }\n}\n```\n\n</p>\n</details> ","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63522/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63522/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63507","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63507/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63507/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63507/events","html_url":"https://github.com/microsoft/TypeScript/issues/63507","id":4523704651,"node_id":"I_kwDOAT9aAc8AAAABDaJBSw","number":63507,"title":"Font bug","user":{"login":"Liam1-dev","id":229143657,"node_id":"U_kgDODah0aQ","avatar_url":"https://avatars.githubusercontent.com/u/229143657?v=4","gravatar_id":"","url":"https://api.github.com/users/Liam1-dev","html_url":"https://github.com/Liam1-dev","followers_url":"https://api.github.com/users/Liam1-dev/followers","following_url":"https://api.github.com/users/Liam1-dev/following{/other_user}","gists_url":"https://api.github.com/users/Liam1-dev/gists{/gist_id}","starred_url":"https://api.github.com/users/Liam1-dev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Liam1-dev/subscriptions","organizations_url":"https://api.github.com/users/Liam1-dev/orgs","repos_url":"https://api.github.com/users/Liam1-dev/repos","events_url":"https://api.github.com/users/Liam1-dev/events{/privacy}","received_events_url":"https://api.github.com/users/Liam1-dev/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":113971304,"node_id":"MDU6TGFiZWwxMTM5NzEzMDQ=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Needs%20More%20Info","name":"Needs More Info","color":"556b75","default":false,"description":"The issue still hasn't been fully clarified"}],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":4,"created_at":"2026-05-26T11:07:59Z","updated_at":"2026-05-26T18:14:29Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### 🔎 Search Terms\n\nI was was changing the code font and after changing the font it came back on Cascadia everytime.\n\n### 🕗 Version & Regression Information\n\n- This changed between versions ______ and _______\n- This changed in commit or PR _______\n- This is the behavior in every version I tried, and I reviewed the FAQ for entries about _________\n- I was unable to test this on prior versions because _______\n\n\n### ⏯ Playground Link\n\nhttps://www.typescriptlang.org/play/?#code/C4TwDgpgBAyghgSxHAdlAvFA3gKClFOAWwgC4oBnYAJwRQHMBuPKMAewHcJryUBXIgCNuzfAAswvAcOqiCbakTgAbACbE49MgWkiWFPpGoBBYMDgBjANYARDVqlC9+OIoWOZLImwBuEEijAMJAQqh7cOAC+zDgAZnwoFsAIbGjKbPTwSKgAjAAUFIjIKDnkWcUAlNgsUBapFGzKEAB06fR5AAYAJFiF2SXNhCSRUGJwFKyc3FBNfspQPX3FOc3sXNQjdLCG0+WoAIQdFcyRODh1KFSURbllN2iYuPhD2gBEgHwbgNK7gKwbgGW734A63e+gCrd76AFt3AJlMrwANCw1txyDkAAwo1Gw8SSKA5ACsaJYKAUSjU9m0ACZsejKDsTGZLLYSeRcUjKa5vDwscyvL5-BBAsEIKFGZzomcLlclqhSXd+hhqs9iG9ALwbgFJdr4AcTYYxQgHSmGFwqbs5Go42cjHkcnGykExQqdRKBxQADspqpRlM5msdnt2hxKJZbnZuMp3j8ASCITCUAAHMLmGLgNd+gBmaXFWVPAgK8gfT6KwAsuwAFVCARYZAM8MisAUjt6-Dww0ml0SRGkpFB-GE20MqCt-AGN20z2d7FD-1sxEukM8vkR81+qLneoJiUoAAsqdQ6fxWagr0VgEUdxWAEj2AGoQLTmQCbDIAOhkAPwyAfoZAIVk1cm6zHJspjaxy7xz3bxO95GdSle24d06S9TRtCZF1WXcLFg25MN+UFKAv1hU540TYpsTXB45XwTMSGzPcABVqASKwKEfSkawNcgADZLRqUZMSNWd8PkG0-wg+iXR7alQIHf8oAATm7fCYLrXioAnRDpxE4V50uRd7jonCN3lQjtwAIT4ZRlDgJ9ayFd9MQAWmbF1rSJO1uLg-R+P7ekhOREdYNM1i2OkhDeXDAVIxyNC4gSJIUjSDI9hQUkCnuKVYHuKoMzFRoWjaTpFhiwYFRGMYJlrGYIDmBZegy2tNjQGBqTimVSUOY45xwNoIvyJccjqxqYui-pSTqoLEmSVIoFiBB6DEYBmvuUoquKaFMMlHCEpYJKmlaDJOhgGAACksSKlrMuGKAEAmIaRuSBhFUAUp3YE2qBSR2jKXkiGbBD4BMODEEAAH4jn0CbmgkWVdv+0yoE64pSUGX8bK0KBgd2iSKh+-oVn+zBAbAGHZsi5pgJpD0nIgxb6mSlb2g6dattu9Kur2iARjgRyjoQagrjEaBVAgFQJjgKBBGGnn0g4C6oGANgrq2nI7qRmnImaKANSsPhRnGSXlj+sBsvRppYmAWr6viPrQsG4bRqipcUym1AZqXVcLZQBb8CWlLVrJ66Jap4ok2lg7GZOuh6CF8ntvd1Bl2l3We3uUOUcxqP0eBvJQdQT2rI7b0oAAKhuqpYcj5p4cJy5idSjotLYNgiAu-YxaD4rky9+m8cZ5mE0Dt3a+KUOHuFuArAgLnRgQYBK6gAAJQ7mO9lWQ7VyJvtOY7RvGpGrZihGF+AU37iTFf+mXCogA\n\n### 💻 Code\n\n```ts\ntype Saiyan = {\n  name: string;\n  power: number;\n  hp: number;\n  normaldamage: number;\n  superAttackDamage: number;\n  armor: number\n  movementSpeed: number\n};\n\nfunction logSaiyan1(saiyan1: Saiyan) {\n   console.log(`${saiyan1.name} has power level ${saiyan1.power} in Super Saiyan!`);\n}\n\nconst saiyan1: Saiyan = {\n  name: \"🥋𝖦𝖮𝖪𝖴㊙\",\n  power: 1000000,\n  hp: 15000,\n  normaldamage: 25,\n  superAttackDamage: 500,\n  armor: 10,\n  movementSpeed: 50,\n};\n\nconst saiyan2: Saiyan = {\n  name: \"🔥🥋Gohan㊗\",\n  power: 1000000000,\n  hp: 250000,\n  normaldamage: 70,\n  superAttackDamage: 1500,\n  armor: 50,\n  movementSpeed: 80,\n};\nconst saiyan3: Saiyan = {\n  name: \"🥋🔴Panパン👊\",\n  power: 1000000,\n  hp: 12050,\n  normaldamage: 50,\n  superAttackDamage: 555,\n  armor: 10,\n  movementSpeed: 200,\n}\nconst saiyan4: Saiyan = {\n  name: \"👑😤Vegetaベジータ⚡\",\n  power: 1000000,\n  hp: 14000,\n  normaldamage: 70,\n  superAttackDamage: 5000,\n  armor: 1,\n  movementSpeed: 40,\n}\nconst saiyan5: Saiyan = {\n    name: \"👑Trunks⚡\",\n    power: 60000,\n    hp: 10000,\n    normaldamage: 60,\n    superAttackDamage: 950,\n    armor: 100,\n    movementSpeed: 90,\n}\nconst saiyan6: Saiyan = {\n  name: \"Bulla\",\n  power: 50,\n  hp: -200,\n  normaldamage: 1,\n  superAttackDamage: 10,\n  armor: -100000,\n  movementSpeed: 1,\n}\nfunction logSaiyan2(saiyan2: Saiyan) {\n  console.log(`${saiyan2.name} has power level ${saiyan2.power} in Super Saiyan 2!`);\n}\n\nlogSaiyan1(saiyan1);\nlogSaiyan2(saiyan2);\n\nfunction fight1(saiyan1: Saiyan, saiyan2: Saiyan) {\n  console.log(`SSJ 1 ${saiyan1.name} is fighting💥 SSJ 2 ${saiyan2.name}, but why?`)\n  saiyan1.hp = saiyan1.hp - (saiyan2.normaldamage - saiyan1.armor)\n  saiyan1.hp = saiyan1.hp - saiyan2.superAttackDamage\n  console.log(`SSJ 2 ${saiyan2.name} attacks first he deals a big blow💥 to SSJ 1 ${saiyan1.name}. Goku has ${saiyan1.hp} hp left!`)\n}\n\nfunction fight2(saiyan3: Saiyan, saiyan4: Saiyan) {\n  console.log(`SSJ 1 ${saiyan3.name} is fighting💥 SSJ 1 ${saiyan4.name}!`)\n  saiyan4.hp = saiyan4.hp - ((saiyan3.normaldamage * 2) - saiyan4.armor)\n  console.log(`Boom💥! SSJ 1 ${saiyan3.name} attacks first SSJ 1 ${saiyan4.name} takes a hit💥! His hp is ${saiyan4.hp}`)\n}\nfight1(saiyan1, saiyan2)\nfight2(saiyan3, saiyan4)\n```\n\n\n### 🙁 Actual behavior\n\nThe font remained the same when I tried to change it.\n\n### 🙂 Expected behavior\n\nThe font would change because the name of the feature is code font .\n\n### Additional information about the issue\n\n_No response_","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63507/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63507/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63500","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63500/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63500/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63500/events","html_url":"https://github.com/microsoft/TypeScript/pull/63500","id":4505037929,"node_id":"PR_kwDOAT9aAc7ed3ne","number":63500,"title":"Bump qs from 6.15.0 to 6.15.2","user":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"labels":[{"id":1883362416,"node_id":"MDU6TGFiZWwxODgzMzYyNDE2","url":"https://api.github.com/repos/microsoft/TypeScript/labels/For%20Uncommitted%20Bug","name":"For Uncommitted Bug","color":"ededed","default":false,"description":"PR for untriaged, rejected, closed or missing bug"},{"id":3707298455,"node_id":"LA_kwDOAT9aAc7c-OKX","url":"https://api.github.com/repos/microsoft/TypeScript/labels/dependencies","name":"dependencies","color":"0366d6","default":false,"description":"Pull requests that update a dependency file"},{"id":8138650806,"node_id":"LA_kwDOAT9aAc8AAAAB5Rn0tg","url":"https://api.github.com/repos/microsoft/TypeScript/labels/javascript","name":"javascript","color":"168700","default":false,"description":"Pull requests that update Javascript code"}],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":0,"created_at":"2026-05-22T19:10:19Z","updated_at":"2026-05-22T19:10:25Z","closed_at":null,"assignee":null,"author_association":"CONTRIBUTOR","issue_field_values":[],"type":null,"active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/microsoft/TypeScript/pulls/63500","html_url":"https://github.com/microsoft/TypeScript/pull/63500","diff_url":"https://github.com/microsoft/TypeScript/pull/63500.diff","patch_url":"https://github.com/microsoft/TypeScript/pull/63500.patch","merged_at":null},"body":"Bumps [qs](https://github.com/ljharb/qs) from 6.15.0 to 6.15.2.\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/ljharb/qs/blob/main/CHANGELOG.md\">qs's changelog</a>.</em></p>\n<blockquote>\n<h2><strong>6.15.2</strong></h2>\n<ul>\n<li>[Fix] <code>stringify</code>: skip null/undefined entries in <code>arrayFormat: 'comma'</code> + <code>encodeValuesOnly</code> instead of crashing in <code>encoder</code></li>\n<li>[Fix] <code>stringify</code>: use configured <code>delimiter</code> after <code>charsetSentinel</code> (<a href=\"https://redirect.github.com/ljharb/qs/issues/555\">#555</a>)</li>\n<li>[Fix] <code>stringify</code>: apply <code>formatter</code> to encoded key under <code>strictNullHandling</code> (<a href=\"https://redirect.github.com/ljharb/qs/issues/554\">#554</a>)</li>\n<li>[Fix] <code>stringify</code>: skip null/undefined filter-array entries instead of crashing in <code>encoder</code> (<a href=\"https://redirect.github.com/ljharb/qs/issues/551\">#551</a>)</li>\n<li>[Fix] <code>parse</code>: handle nested bracket groups and add regression tests (<a href=\"https://redirect.github.com/ljharb/qs/issues/530\">#530</a>)</li>\n<li>[readme] fix grammar (<a href=\"https://redirect.github.com/ljharb/qs/issues/550\">#550</a>)</li>\n<li>[Dev Deps] update <code>@ljharb/eslint-config</code></li>\n<li>[Tests] add regression tests for keys containing percent-encoded bracket text</li>\n</ul>\n<h2><strong>6.15.1</strong></h2>\n<ul>\n<li>[Fix] <code>parse</code>: <code>parameterLimit: Infinity</code> with <code>throwOnLimitExceeded: true</code> silently drops all parameters</li>\n<li>[Deps] update <code>@ljharb/eslint-config</code></li>\n<li>[Dev Deps] update <code>@ljharb/eslint-config</code>, <code>iconv-lite</code></li>\n<li>[Tests] increase coverage</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/ljharb/qs/commit/9aca4076fe788338c67cf7e115f0be6bc58d85a8\"><code>9aca407</code></a> v6.15.2</li>\n<li><a href=\"https://github.com/ljharb/qs/commit/5e33d33447ed0bf1ddab9abc41d27dea4687d992\"><code>5e33d33</code></a> [Dev Deps] update <code>@ljharb/eslint-config</code></li>\n<li><a href=\"https://github.com/ljharb/qs/commit/21f80b33e5c8b3f7eba1034fff0da4a4a37a1d41\"><code>21f80b3</code></a> [Fix] <code>stringify</code>: skip null/undefined entries in <code>arrayFormat: 'comma'</code> + `e...</li>\n<li><a href=\"https://github.com/ljharb/qs/commit/a0a81ea2071acce3eff41a040f719ac8f5c4f64c\"><code>a0a81ea</code></a> [Fix] <code>stringify</code>: use configured <code>delimiter</code> after <code>charsetSentinel</code></li>\n<li><a href=\"https://github.com/ljharb/qs/commit/e3062f78f5233b338ceeb8e8dfa5a07dea4b32a8\"><code>e3062f7</code></a> [Fix] <code>stringify</code>: apply <code>formatter</code> to encoded key under <code>strictNullHandling</code></li>\n<li><a href=\"https://github.com/ljharb/qs/commit/0c180a40adb8c6703fffc85b2ff06ca209f5c1e0\"><code>0c180a4</code></a> [Fix] <code>stringify</code>: skip null/undefined filter-array entries instead of crashi...</li>\n<li><a href=\"https://github.com/ljharb/qs/commit/3a8b94aec19bd664720f6f6b1e66c4a0dfe4b656\"><code>3a8b94a</code></a> [Tests] add regression tests for keys containing percent-encoded bracket text</li>\n<li><a href=\"https://github.com/ljharb/qs/commit/96755abd357c0e534dd3442a84a04d08864bfe0d\"><code>96755ab</code></a> [readme] fix grammar</li>\n<li><a href=\"https://github.com/ljharb/qs/commit/a419ce5bbfcdb98a299f1a0bb47ea055baef20e6\"><code>a419ce5</code></a> [Fix] <code>parse</code>: handle nested bracket groups and add regression tests</li>\n<li><a href=\"https://github.com/ljharb/qs/commit/3f5e1c528c967d915096787efbffa73cf6044170\"><code>3f5e1c5</code></a> v6.15.1</li>\n<li>Additional commits viewable in <a href=\"https://github.com/ljharb/qs/compare/v6.15.0...v6.15.2\">compare view</a></li>\n</ul>\n</details>\n<br />\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=qs&package-manager=npm_and_yarn&previous-version=6.15.0&new-version=6.15.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n<details>\n<summary>Dependabot commands and options</summary>\n<br />\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/microsoft/TypeScript/network/alerts).\n\n</details>","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63500/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63500/timeline","performed_via_github_app":null,"state_reason":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63499","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63499/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63499/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63499/events","html_url":"https://github.com/microsoft/TypeScript/issues/63499","id":4504663099,"node_id":"I_kwDOAT9aAc8AAAABDH-0Ow","number":63499,"title":"Wildcard package.json exports auto-import path does not apply traversal containment checks","user":{"login":"zainnadeem786","id":165761530,"node_id":"U_kgDOCeFR-g","avatar_url":"https://avatars.githubusercontent.com/u/165761530?v=4","gravatar_id":"","url":"https://api.github.com/users/zainnadeem786","html_url":"https://github.com/zainnadeem786","followers_url":"https://api.github.com/users/zainnadeem786/followers","following_url":"https://api.github.com/users/zainnadeem786/following{/other_user}","gists_url":"https://api.github.com/users/zainnadeem786/gists{/gist_id}","starred_url":"https://api.github.com/users/zainnadeem786/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zainnadeem786/subscriptions","organizations_url":"https://api.github.com/users/zainnadeem786/orgs","repos_url":"https://api.github.com/users/zainnadeem786/repos","events_url":"https://api.github.com/users/zainnadeem786/events{/privacy}","received_events_url":"https://api.github.com/users/zainnadeem786/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":113970366,"node_id":"MDU6TGFiZWwxMTM5NzAzNjY=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Bug","name":"Bug","color":"e11d21","default":false,"description":"A bug in TypeScript"},{"id":1478314712,"node_id":"MDU6TGFiZWwxNDc4MzE0NzEy","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Domain:%20LS:%20Auto-import","name":"Domain: LS: Auto-import","color":"61a8f4","default":false,"description":""}],"state":"open","locked":false,"assignees":[],"milestone":{"url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29","html_url":"https://github.com/microsoft/TypeScript/milestone/29","labels_url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29/labels","id":1973940,"node_id":"MDk6TWlsZXN0b25lMTk3Mzk0MA==","number":29,"title":"Backlog","description":"Please send PRs for issues in the Backlog milestone!","creator":{"login":"mhegazy","id":8000722,"node_id":"MDQ6VXNlcjgwMDA3MjI=","avatar_url":"https://avatars.githubusercontent.com/u/8000722?v=4","gravatar_id":"","url":"https://api.github.com/users/mhegazy","html_url":"https://github.com/mhegazy","followers_url":"https://api.github.com/users/mhegazy/followers","following_url":"https://api.github.com/users/mhegazy/following{/other_user}","gists_url":"https://api.github.com/users/mhegazy/gists{/gist_id}","starred_url":"https://api.github.com/users/mhegazy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mhegazy/subscriptions","organizations_url":"https://api.github.com/users/mhegazy/orgs","repos_url":"https://api.github.com/users/mhegazy/repos","events_url":"https://api.github.com/users/mhegazy/events{/privacy}","received_events_url":"https://api.github.com/users/mhegazy/received_events","type":"User","user_view_type":"public","site_admin":false},"open_issues":1914,"closed_issues":2768,"state":"open","created_at":"2016-08-31T00:21:08Z","updated_at":"2026-06-25T15:32:53Z","due_on":null,"closed_at":null},"comments":3,"created_at":"2026-05-22T18:03:34Z","updated_at":"2026-05-22T21:49:27Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### Demo Repo\n\nhttps://github.com/zainnadeem786/typescript-autoimport-traversal-poc\n\n### Which of the following problems are you reporting?\n\nSomething else more complicated which I'll explain in more detail\n\n### Demonstrate the defect described above with a code sample.\n\nimport { LEAKED_SECRET_SYMBOL } from \"evil-pkg/secret\";\n\n\n### Run `tsc --showConfig` and paste its output here\n\n{\n  \"compilerOptions\": {\n    \"module\": \"nodenext\",\n    \"moduleResolution\": \"nodenext\",\n    \"target\": \"es2022\",\n    \"strict\": true\n  },\n  \"files\": [\n    \"./src/app.ts\"\n  ]\n}\n\n### Run `tsc --traceResolution` and paste its output here\n\n======== Resolving module 'evil-pkg/secret' ========\nModule name 'evil-pkg/secret' was not resolved.\n======== Module name 'evil-pkg/secret' was not resolved. ========\n\n### Paste the `package.json` of the *importing* module, if it exists\n\n{\n  \"name\": \"victim-project\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"dependencies\": {\n    \"evil-pkg\": \"1.0.0\"\n  }\n}\n\n### Paste the `package.json` of the *target* module, if it exists\n\n{\n  \"name\": \"evil-pkg\",\n  \"version\": \"1.0.0\",\n  \"exports\": {\n    \"./*\": \"./../../private/*.ts\"\n  }\n}\n\n### Any other comments can go here\n\nThis is not a standard runtime/build-time module resolution mismatch. I selected “Something else more complicated” because the issue is specifically in tsserver package-json auto-import indexing.\n\nNormal module resolution rejects the traversal export target:\n\n```text\nresolveModuleName(\"evil-pkg/secret\"): undefined\n```\n\nHowever, the tsserver auto-import provider still indexes a file outside the package boundary:\n\n```text\nD:/TypeScript/msrc-tsserver-autoimport-traversal-poc/victim-project/private/secret.ts\n```\n\nThe relevant behavior appears to be in `loadEntrypointsFromTargetExports()`, where the wildcard export target is expanded and passed to `readDirectory()` without applying the same traversal/containment validation used by normal export resolution.\n\nThe minimal reproduction repository includes a script that demonstrates:\n\n1. normal module resolution rejects the traversal target\n2. auto-import indexing still includes the out-of-package file\n3. completion details expose the out-of-package symbol metadata\n\nThis was originally reviewed by MSRC and treated as defense-in-depth hardening rather than a serviced security vulnerability. MSRC recom\nmended opening a GitHub issue so the TypeScript team can consider applying the same `../`, `./`, and `node_modules` containment checks to the wildcard branch.\n","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63499/reactions","total_count":1,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":1,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63499/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null},{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63498","repository_url":"https://api.github.com/repos/microsoft/TypeScript","labels_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63498/labels{/name}","comments_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63498/comments","events_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63498/events","html_url":"https://github.com/microsoft/TypeScript/issues/63498","id":4491429749,"node_id":"I_kwDOAT9aAc8AAAABC7XHdQ","number":63498,"title":"`js/ts.preferences.autoImportFileExcludePatterns` is not reflected promptly in IntelliSense suggestions","user":{"login":"heroboy","id":54468,"node_id":"MDQ6VXNlcjU0NDY4","avatar_url":"https://avatars.githubusercontent.com/u/54468?v=4","gravatar_id":"","url":"https://api.github.com/users/heroboy","html_url":"https://github.com/heroboy","followers_url":"https://api.github.com/users/heroboy/followers","following_url":"https://api.github.com/users/heroboy/following{/other_user}","gists_url":"https://api.github.com/users/heroboy/gists{/gist_id}","starred_url":"https://api.github.com/users/heroboy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/heroboy/subscriptions","organizations_url":"https://api.github.com/users/heroboy/orgs","repos_url":"https://api.github.com/users/heroboy/repos","events_url":"https://api.github.com/users/heroboy/events{/privacy}","received_events_url":"https://api.github.com/users/heroboy/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[{"id":611777722,"node_id":"MDU6TGFiZWw2MTE3Nzc3MjI=","url":"https://api.github.com/repos/microsoft/TypeScript/labels/Needs%20Investigation","name":"Needs Investigation","color":"DDDDDD","default":false,"description":"This issue needs a team member to investigate its status."}],"state":"open","locked":false,"assignees":[],"milestone":{"url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29","html_url":"https://github.com/microsoft/TypeScript/milestone/29","labels_url":"https://api.github.com/repos/microsoft/TypeScript/milestones/29/labels","id":1973940,"node_id":"MDk6TWlsZXN0b25lMTk3Mzk0MA==","number":29,"title":"Backlog","description":"Please send PRs for issues in the Backlog milestone!","creator":{"login":"mhegazy","id":8000722,"node_id":"MDQ6VXNlcjgwMDA3MjI=","avatar_url":"https://avatars.githubusercontent.com/u/8000722?v=4","gravatar_id":"","url":"https://api.github.com/users/mhegazy","html_url":"https://github.com/mhegazy","followers_url":"https://api.github.com/users/mhegazy/followers","following_url":"https://api.github.com/users/mhegazy/following{/other_user}","gists_url":"https://api.github.com/users/mhegazy/gists{/gist_id}","starred_url":"https://api.github.com/users/mhegazy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mhegazy/subscriptions","organizations_url":"https://api.github.com/users/mhegazy/orgs","repos_url":"https://api.github.com/users/mhegazy/repos","events_url":"https://api.github.com/users/mhegazy/events{/privacy}","received_events_url":"https://api.github.com/users/mhegazy/received_events","type":"User","user_view_type":"public","site_admin":false},"open_issues":1914,"closed_issues":2768,"state":"open","created_at":"2016-08-31T00:21:08Z","updated_at":"2026-06-25T15:32:53Z","due_on":null,"closed_at":null},"comments":1,"created_at":"2026-05-21T03:15:11Z","updated_at":"2026-06-03T12:31:17Z","closed_at":null,"assignee":null,"author_association":"NONE","issue_field_values":[],"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"### 🔎 Search Terms\n\nautoImportFileExcludePatterns\n\n### 🕗 Version & Regression Information\n\n- I test this in 4.8.4, 6.0.3 and tsgo 0.20260520.1\n\n### ⏯ Playground Link\n\n_No response_\n\n### 💻 Code\nin `.vscode/settings.json`\n```json\n\"js/ts.preferences.autoImportFileExcludePatterns\": [\n\t//\"**/node_modules/@types/node\",\n\t// \"node\",\n\t\"fs.d.ts\",\n\t// \"node_modules/@types/node/fs.d.ts\",\n\t// \"node:fs\"\n]\n```\n\na.ts\n\n```ts\nreadFileSync('','');\nreadF\n```\n\n### 🙁 Actual behavior\n\nIn VSCode,  \nwhen repeatedly toggling `\"fs.d.ts\"` in the config above:  \nNormal part: you will find that for the first line `readFileSync('','')`, the `Quick Fix` menu item like `import from \"fs\"` will appear or disappear as expected when `\"fs.d.ts\"` is added or removed from the config.  \nBut for the case when you type `readF` and trigger IntelliSense, whether `readFileSync...` appears in the completion suggestions is unpredictable. Sometimes using \"Reload Window\" can fix it, but in most cases, it doesn't work as expected—toggling `\"fs.d.ts\"` doesn't immediately change the current IntelliSense state.\n\n### 🙂 Expected behavior\n\nFor the above example, after modifying `\"js/ts.preferences.autoImportFileExcludePatterns\"` in the VSCode config, I expect the IntelliSense suggestions to reflect the changes immediately.\n\n### Additional information about the issue\n\nThere is a similar issue: https://github.com/microsoft/TypeScript/issues/60082  \nHowever, that one is a bit old and the phenomenon I described is somewhat different.\n\nAdditionally, I have a question: For the setting `js/ts.preferences.autoImportFileExcludePatterns`, does it only match a single file, or does it match the `xxx` part in` import ... from 'xxx'`? After all, a single file can define multiple modules, and multiple \"exports\" can also be defined in `package.json`.","closed_by":null,"reactions":{"url":"https://api.github.com/repos/microsoft/TypeScript/issues/63498/reactions","total_count":2,"+1":2,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/microsoft/TypeScript/issues/63498/timeline","performed_via_github_app":null,"state_reason":null,"pinned_comment":null}]