From d123b9349d0f3d06cf07999784163f9f4e33edf7 Mon Sep 17 00:00:00 2001 From: Neal Richardson Date: Fri, 25 Sep 2026 18:11:17 -0400 Subject: [PATCH] build: unify TypeScript on 5.9 and @types/node on 22 TypeScript was split between 4.9.4 (hoisted, used by most tsc runs) and 5.8.3 (nested under the @quarto/* packages). - typescript ^5.9.3 as a devDependency only in workspaces that run tsc, plus the root (one hoisted copy for typescript-eslint and tsdk). It was a runtime `dependency` in ~20 source-only workspaces that never import it. - The published @quarto/* packages no longer list typescript, tsconfig or build as runtime dependencies (npm consumers were installing TypeScript and the unrelated public `tsconfig` and `build` packages). - @types/node ^22.15.0 everywhere (was 16.x / 18 / 20). This matches the decided engines.vscode ^1.101 floor (Node 22), and is required: TS 5.9's Buffer/ArrayBufferView typings break against the old @types/node, and @types/node 22 needs TS >= 5.6, so the two have to move together. yarn.lock merges the transitive @types/node@* into the 22 entry so a single copy is hoisted. - Fix a regex TS 5.5 now rejects: in `[^\2]`, `\2` is the octal escape \x02, not a backreference, so the include_graphics() path match ran greedily past the closing quote (and across lines). Emitted dist/cjs for the four published packages is byte-identical. Co-Authored-By: Claude Opus 5.5 (1M context) --- apps/lsp/package.json | 4 +- apps/panmirror/package.json | 2 +- apps/quarto-utils/package.json | 3 +- apps/vscode-editor/package.json | 2 +- apps/vscode-markdownit/package.json | 2 +- apps/vscode/package.json | 4 +- package.json | 3 +- packages/_annotated-json/package.json | 1 - packages/_json-validator/package.json | 1 - packages/_mapped-string/package.json | 1 - packages/_tidyverse-errors/package.json | 1 - packages/annotated-json/package.json | 6 +-- packages/build/package.json | 3 +- packages/core-browser/package.json | 3 +- packages/core-node/package.json | 1 - packages/core/package.json | 1 - packages/editor-codemirror/package.json | 1 - packages/editor-core/package.json | 3 +- packages/editor-server/package.json | 3 +- packages/editor-types/package.json | 1 - packages/editor-ui/package.json | 3 +- packages/editor/package.json | 1 - .../src/nodes/rmd_chunk/rmd_chunk-image.ts | 2 +- packages/json-validator/package.json | 8 ++-- packages/mapped-string/package.json | 6 +-- packages/quarto-core/package.json | 1 - packages/tidyverse-errors/package.json | 6 +-- packages/ui-widgets/package.json | 3 +- yarn.lock | 41 ++++++------------- 29 files changed, 43 insertions(+), 74 deletions(-) diff --git a/apps/lsp/package.json b/apps/lsp/package.json index fe101b12e..d3a6c2662 100644 --- a/apps/lsp/package.json +++ b/apps/lsp/package.json @@ -31,7 +31,7 @@ }, "devDependencies": { "@types/js-yaml": "^4.0.5", - "@types/node": "^20.10.6", + "@types/node": "^22.15.0", "@types/picomatch": "^2.3.0", "build": "*", "esbuild": "^0.16.7", @@ -39,6 +39,6 @@ "eslint-config-custom-server": "*", "tsconfig": "*", "tsx": "^3.12.1", - "typescript": "^4.5.2" + "typescript": "^5.9.3" } } diff --git a/apps/panmirror/package.json b/apps/panmirror/package.json index 1fe16e2a6..934a5c3f6 100644 --- a/apps/panmirror/package.json +++ b/apps/panmirror/package.json @@ -23,7 +23,7 @@ "eslint": "^7.32.0", "eslint-config-custom": "*", "tsconfig": "*", - "typescript": "^4.5.2", + "typescript": "^5.9.3", "vite": "^3.0.0", "vite-plugin-css-injected-by-js": "^2.1.1", "vite-plugin-static-copy": "^0.13.0" diff --git a/apps/quarto-utils/package.json b/apps/quarto-utils/package.json index 5032e9717..017b2e761 100644 --- a/apps/quarto-utils/package.json +++ b/apps/quarto-utils/package.json @@ -7,10 +7,9 @@ "types": "./src/index.ts", "dependencies": { "tsconfig": "*", - "typescript": "^4.5.2", "vscode-uri": "^3.0.3" }, "devDependencies": { - "@types/node": "^20.10.6" + "@types/node": "^22.15.0" } } diff --git a/apps/vscode-editor/package.json b/apps/vscode-editor/package.json index f61ddf898..8273b7195 100644 --- a/apps/vscode-editor/package.json +++ b/apps/vscode-editor/package.json @@ -44,7 +44,7 @@ "eslint-config-custom": "*", "sass": "^1.56.1", "tsconfig": "*", - "typescript": "^4.5.2", + "typescript": "^5.9.3", "vite": "^3.0.0", "vite-plugin-static-copy": "^0.13.0" } diff --git a/apps/vscode-markdownit/package.json b/apps/vscode-markdownit/package.json index ee97c10aa..4cf58c44d 100644 --- a/apps/vscode-markdownit/package.json +++ b/apps/vscode-markdownit/package.json @@ -39,7 +39,7 @@ "eslint": "^7.32.0", "eslint-config-custom": "*", "tsconfig": "*", - "typescript": "^4.5.2", + "typescript": "^5.9.3", "vite": "^3.0.0", "vite-plugin-static-copy": "^0.13.0" } diff --git a/apps/vscode/package.json b/apps/vscode/package.json index bda512f4b..0bf9a6d33 100644 --- a/apps/vscode/package.json +++ b/apps/vscode/package.json @@ -1564,7 +1564,7 @@ "@types/markdown-it": "^12.2.3", "@types/markdown-it-highlightjs": "^3.3.1", "@types/mocha": "^9.1.0", - "@types/node": "16.x", + "@types/node": "^22.15.0", "@types/picomatch": "^2.3.0", "@types/semver": "^7.3.13", "@types/tmp": "^0.2.3", @@ -1583,7 +1583,7 @@ "mocha": "^9.2.1", "plist": "^3.0.6", "tsx": "^3.12.1", - "typescript": "^4.9.3", + "typescript": "^5.9.3", "vsce": "^2.15.0", "vscode-languageserver": "^8.1.0", "vscode-languageserver-textdocument": "^1.0.4" diff --git a/package.json b/package.json index c35d2803f..9e6436ed8 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "eslint": "^7.32.0", "eslint-config-custom": "*", "prettier": "^2.5.1", - "turbo": "^1.8.5" + "turbo": "^1.8.5", + "typescript": "^5.9.3" } } diff --git a/packages/_annotated-json/package.json b/packages/_annotated-json/package.json index 567a4d8b1..d83679d6a 100644 --- a/packages/_annotated-json/package.json +++ b/packages/_annotated-json/package.json @@ -19,7 +19,6 @@ "types": "src/index.ts", "dependencies": { "tsconfig": "*", - "typescript": "^5.4.2", "@quarto/_mapped-string": "*", "@quarto/_tidyverse-errors": "*" }, diff --git a/packages/_json-validator/package.json b/packages/_json-validator/package.json index aad2df778..28cc5109d 100644 --- a/packages/_json-validator/package.json +++ b/packages/_json-validator/package.json @@ -20,7 +20,6 @@ "dependencies": { "tsconfig": "*", "build": "*", - "typescript": "^5.4.2", "regexpp": "^3.2.0", "ansi-colors": "^4.1.3", "@quarto/_mapped-string": "*", diff --git a/packages/_mapped-string/package.json b/packages/_mapped-string/package.json index 4c7384172..3f44cc4f9 100644 --- a/packages/_mapped-string/package.json +++ b/packages/_mapped-string/package.json @@ -19,7 +19,6 @@ "types": "src/index.ts", "dependencies": { "tsconfig": "*", - "typescript": "^5.4.2", "ansi-colors": "^4.1.3", "@quarto/_tidyverse-errors": "*" }, diff --git a/packages/_tidyverse-errors/package.json b/packages/_tidyverse-errors/package.json index 935fb8d76..c6dd5ea59 100644 --- a/packages/_tidyverse-errors/package.json +++ b/packages/_tidyverse-errors/package.json @@ -11,7 +11,6 @@ "types": "./src/index.ts", "dependencies": { "tsconfig": "*", - "typescript": "^5.4.2", "ansi-colors": "^4.1.3" }, "devDependencies": { diff --git a/packages/annotated-json/package.json b/packages/annotated-json/package.json index 4c884b288..63d65922f 100644 --- a/packages/annotated-json/package.json +++ b/packages/annotated-json/package.json @@ -18,13 +18,13 @@ "types": "dist/cjs/index.d.ts", "files": ["dist"], "dependencies": { - "tsconfig": "*", - "typescript": "^5.4.2", "@quarto/mapped-string": "^0.1.8", "@quarto/tidyverse-errors": "^0.1.9" }, "devDependencies": { - "tsx": "^4.7.1" + "tsconfig": "*", + "tsx": "^4.7.1", + "typescript": "^5.9.3" }, "scripts": { "build": "npm run build:cjs", diff --git a/packages/build/package.json b/packages/build/package.json index d24c566e6..4ef8527ff 100644 --- a/packages/build/package.json +++ b/packages/build/package.json @@ -8,8 +8,7 @@ "devDependencies": { "esbuild": "^0.16.7", "esbuild-plugin-copy": "^2.0.1", - "tsconfig": "*", - "typescript": "^4.5.2" + "tsconfig": "*" }, "dependencies": {} } diff --git a/packages/core-browser/package.json b/packages/core-browser/package.json index 2e74ebd02..40cf00b95 100644 --- a/packages/core-browser/package.json +++ b/packages/core-browser/package.json @@ -8,7 +8,6 @@ "dependencies": { "core": "*", "jayson": "^4.0.0", - "tsconfig": "*", - "typescript": "^4.5.2" + "tsconfig": "*" } } diff --git a/packages/core-node/package.json b/packages/core-node/package.json index 16c91ecf3..7eec534cc 100644 --- a/packages/core-node/package.json +++ b/packages/core-node/package.json @@ -9,7 +9,6 @@ "core": "*", "jayson": "^4.0.0", "tsconfig": "*", - "typescript": "^4.5.2", "vscode-languageclient": "^8.1.0", "vscode-languageserver": "^8.1.0" } diff --git a/packages/core/package.json b/packages/core/package.json index 83b71dbdb..331874536 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -9,7 +9,6 @@ "markdown-it": "^13.0.1", "markdown-it-attrs": "^4.1.6", "tsconfig": "*", - "typescript": "^4.5.2", "wcwidth": "^1.0.1" }, "devDependencies": { diff --git a/packages/editor-codemirror/package.json b/packages/editor-codemirror/package.json index 065577e06..ee3c84569 100644 --- a/packages/editor-codemirror/package.json +++ b/packages/editor-codemirror/package.json @@ -43,7 +43,6 @@ "prosemirror-model": "^1.18.2", "prosemirror-state": "^1.4.2", "tsconfig": "*", - "typescript": "^4.5.2", "vscode-languageserver-types": "^3.17.3", "@lezer/highlight": "^1.1.3", "lodash.debounce": "^4.0.8", diff --git a/packages/editor-core/package.json b/packages/editor-core/package.json index db8a71e27..326f39df9 100644 --- a/packages/editor-core/package.json +++ b/packages/editor-core/package.json @@ -8,7 +8,6 @@ "dependencies": { "core": "*", "editor-types": "*", - "tsconfig": "*", - "typescript": "^4.5.2" + "tsconfig": "*" } } diff --git a/packages/editor-server/package.json b/packages/editor-server/package.json index 3d69c1b95..881eb713e 100644 --- a/packages/editor-server/package.json +++ b/packages/editor-server/package.json @@ -17,13 +17,12 @@ "quarto-core": "*", "tmp": "^0.2.7", "tsconfig": "*", - "typescript": "^4.5.2", "uuid": "^9.0.0", "vscode-languageserver-types": "^3.17.3", "vscode-uri": "^3.0.3" }, "devDependencies": { - "@types/node": "^18.11.17", + "@types/node": "^22.15.0", "@types/tmp": "^0.2.3", "vscode-languageserver": "^8.1.0" } diff --git a/packages/editor-types/package.json b/packages/editor-types/package.json index 29ea8b115..e75dd9305 100644 --- a/packages/editor-types/package.json +++ b/packages/editor-types/package.json @@ -7,7 +7,6 @@ "types": "./src/index.ts", "dependencies": { "tsconfig": "*", - "typescript": "^4.5.2", "vscode-languageserver-types": "^3.17.3" } } diff --git a/packages/editor-ui/package.json b/packages/editor-ui/package.json index 987c0ee79..481da099c 100644 --- a/packages/editor-ui/package.json +++ b/packages/editor-ui/package.json @@ -30,7 +30,6 @@ "@types/react-dom": "^18.2.4", "@types/react-transition-group": "^4.4.5", "@types/typo-js": "^1.2.0", - "tsconfig": "*", - "typescript": "^4.5.2" + "tsconfig": "*" } } diff --git a/packages/editor/package.json b/packages/editor/package.json index 5d2024b8e..a44b5914d 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -45,7 +45,6 @@ "thenby": "^1.3.3", "tlite": "^0.1.9", "transliteration": "^2.2.0", - "typescript": "^4.5.2", "use-debounce": "^9.0.2", "vscode-languageserver-types": "^3.17.3", "zenscroll": "^4.0.2" diff --git a/packages/editor/src/nodes/rmd_chunk/rmd_chunk-image.ts b/packages/editor/src/nodes/rmd_chunk/rmd_chunk-image.ts index 7dfb3c4e4..3daf8f692 100644 --- a/packages/editor/src/nodes/rmd_chunk/rmd_chunk-image.ts +++ b/packages/editor/src/nodes/rmd_chunk/rmd_chunk-image.ts @@ -62,7 +62,7 @@ function imagePreviewDecorations(state: EditorState, uiContext: EditorUIContext) const decorations: Decoration[] = []; findChildrenByType(state.doc, state.schema.nodes.rmd_chunk).forEach(rmdChunk => { // look for a line with knitr::include_graphics - const match = rmdChunk.node.textContent.match(/^(knitr::)?include_graphics\((['"])([^\2]+)\2/m); + const match = rmdChunk.node.textContent.match(/^(knitr::)?include_graphics\((['"])(.+?)\2/m); if (match) { // see if we can also find an out.width on the first line let width = ''; diff --git a/packages/json-validator/package.json b/packages/json-validator/package.json index e5d440742..cf2a41c0c 100644 --- a/packages/json-validator/package.json +++ b/packages/json-validator/package.json @@ -18,9 +18,6 @@ "types": "dist/cjs/index.d.ts", "files": ["dist"], "dependencies": { - "tsconfig": "*", - "build": "*", - "typescript": "^5.4.2", "regexpp": "^3.2.0", "ansi-colors": "^4.1.3", "@quarto/mapped-string": "^0.1.8", @@ -28,7 +25,10 @@ "@quarto/annotated-json": "^0.1.4" }, "devDependencies": { - "tsx": "^4.7.1" + "build": "*", + "tsconfig": "*", + "tsx": "^4.7.1", + "typescript": "^5.9.3" }, "scripts": { "build": "npm run build:cjs", diff --git a/packages/mapped-string/package.json b/packages/mapped-string/package.json index 9611e383a..d720e2280 100644 --- a/packages/mapped-string/package.json +++ b/packages/mapped-string/package.json @@ -18,13 +18,13 @@ "types": "dist/cjs/index.d.ts", "files": ["dist"], "dependencies": { - "tsconfig": "*", - "typescript": "^5.4.2", "ansi-colors": "^4.1.3", "@quarto/tidyverse-errors": "^0.1.9" }, "devDependencies": { - "tsx": "^4.7.1" + "tsconfig": "*", + "tsx": "^4.7.1", + "typescript": "^5.9.3" }, "scripts": { "build": "npm run build:cjs", diff --git a/packages/quarto-core/package.json b/packages/quarto-core/package.json index 67d16b041..cd1b1c678 100644 --- a/packages/quarto-core/package.json +++ b/packages/quarto-core/package.json @@ -13,7 +13,6 @@ "markdown-it-attrs": "^4.1.6", "semver": "^7.3.8", "tsconfig": "*", - "typescript": "^4.5.2", "vscode-languageserver-types": "^3.17.3", "vscode-uri": "^3.0.3" }, diff --git a/packages/tidyverse-errors/package.json b/packages/tidyverse-errors/package.json index 108a9d39f..f27f95c29 100644 --- a/packages/tidyverse-errors/package.json +++ b/packages/tidyverse-errors/package.json @@ -18,12 +18,12 @@ "types": "./dist/cjs/index.d.ts", "files": ["dist"], "dependencies": { - "tsconfig": "*", - "typescript": "^5.4.2", "ansi-colors": "^4.1.3" }, "devDependencies": { - "tsx": "^4.7.1" + "tsconfig": "*", + "tsx": "^4.7.1", + "typescript": "^5.9.3" }, "scripts": { "build": "npm run build:cjs", diff --git a/packages/ui-widgets/package.json b/packages/ui-widgets/package.json index de20f1d02..8d3abf3d4 100644 --- a/packages/ui-widgets/package.json +++ b/packages/ui-widgets/package.json @@ -11,8 +11,7 @@ "flat": "^5.0.2", "react": "^18.2.0", "react-dom": "^18.2.0", - "tsconfig": "*", - "typescript": "^4.5.2" + "tsconfig": "*" }, "devDependencies": { "@types/flat": "^5.0.2" diff --git a/yarn.lock b/yarn.lock index 4dc7a0c99..ae6fed25f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2167,16 +2167,6 @@ resolved "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz" integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== -"@types/node@*", "@types/node@^18.11.17": - version "18.11.18" - resolved "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz" - integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== - -"@types/node@16.x": - version "16.18.11" - resolved "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz" - integrity sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA== - "@types/node@^12.12.54": version "12.20.55" resolved "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" @@ -2187,12 +2177,12 @@ resolved "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz" integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ== -"@types/node@^20.10.6": - version "20.10.6" - resolved "https://registry.npmjs.org/@types/node/-/node-20.10.6.tgz" - integrity sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw== +"@types/node@*", "@types/node@^22.15.0": + version "22.20.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.20.4.tgz#37aab5e1beb215f4c036ea0e17343e59abf430de" + integrity sha512-zJRE40jpHtKqE/C4fgHrAKQLJuSpzEnP9ff9Y7YtoR3Wd2pwqzlekDeEuUQXjRd+QCYnVnNwuJYmhdk9XV8gvA== dependencies: - undici-types "~5.26.4" + undici-types "~6.21.0" "@types/orderedmap@^1.0.0": version "1.0.0" @@ -8215,15 +8205,10 @@ typedarray@^0.0.6: resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@^4.5.2, typescript@^4.9.3: - version "4.9.4" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz" - integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== - -typescript@^5.4.2: - version "5.8.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz" - integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== +typescript@^5.9.3: + version "5.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== typo-js@^1.2.2: version "1.2.2" @@ -8255,10 +8240,10 @@ underscore@^1.12.1: resolved "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz" integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== union@^0.5.0: version "0.5.0"