From a349f53f318640596b31b49f80db144528bfe49d Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Mon, 16 Mar 2026 10:47:34 +0100 Subject: [PATCH 01/37] Build from source --- .github/workflows/deploy.yml | 6 - .github/workflows/test.yml | 9 +- .vscode/tasks.json | 48 +----- AGENTS.md | 4 +- package.json | 10 +- packages/cheatsheet-local/README.md | 8 +- packages/cheatsheet-local/package.json | 13 +- packages/cheatsheet-local/tsconfig.json | 8 - packages/cheatsheet-local/vite.config.ts | 1 - packages/cheatsheet/package.json | 15 +- packages/cheatsheet/tsconfig.json | 5 - packages/common/package.json | 15 +- packages/common/scripts/my-ts-node.js | 1 - packages/common/src/Debouncer.ts | 2 +- .../src/testUtil/shouldUpdateFixtures.ts | 4 +- .../src/util/getEnvironmentVariableStrict.ts | 4 +- packages/common/src/util/getProcessEnv.ts | 9 ++ packages/cursorless-cheatsheet/package.json | 15 +- packages/cursorless-cheatsheet/tsconfig.json | 10 +- packages/cursorless-engine/package.json | 19 +-- packages/cursorless-engine/tsconfig.json | 13 +- .../package.json | 15 +- .../tsconfig.json | 8 - .../package.json | 2 +- .../scripts/test-quickjs.sh | 1 - .../tsconfig.json | 16 +- .../cursorless-everywhere-talon/package.json | 15 +- .../scripts/esbuild.sh | 1 - .../cursorless-everywhere-talon/tsconfig.json | 8 - packages/cursorless-neovim-e2e/package.json | 8 +- packages/cursorless-neovim-e2e/tsconfig.json | 21 --- packages/cursorless-neovim/package.json | 20 +-- .../scripts/compile-esbuild.sh | 1 - packages/cursorless-neovim/tsconfig.json | 24 --- packages/cursorless-org-docs/package.json | 9 +- .../src/docs/contributing/CONTRIBUTING.mdx | 1 - .../docs/contributing/adding-a-new-package.md | 12 +- .../architecture/package-scripts.md | 150 ++++++++++++++++++ packages/cursorless-org-docs/tsconfig.json | 12 +- packages/cursorless-org/package.json | 10 +- packages/cursorless-org/tsconfig.json | 8 - packages/cursorless-org/vite.config.ts | 1 - packages/cursorless-tutorial/package.json | 15 +- packages/cursorless-tutorial/tsconfig.json | 12 -- packages/cursorless-vscode-e2e/package.json | 8 +- packages/cursorless-vscode-e2e/tsconfig.json | 11 -- .../README.md | 4 +- .../package.json | 8 +- .../tsconfig.json | 5 - .../vite.config.ts | 1 - packages/cursorless-vscode/package.json | 17 +- .../scripts/compile-esbuild.sh | 1 - .../scripts/install-local.sh | 8 +- packages/cursorless-vscode/tsconfig.json | 25 +-- packages/meta-updater/package.json | 3 +- .../meta-updater/src/updatePackageJson.ts | 46 ++---- packages/meta-updater/tsconfig.json | 8 +- packages/neovim-common/package.json | 15 +- packages/neovim-common/tsconfig.json | 15 -- packages/neovim-registry/package.json | 15 +- packages/neovim-registry/tsconfig.json | 5 - packages/node-common/package.json | 15 +- packages/node-common/tsconfig.json | 7 +- packages/sentence-parser/package.json | 15 +- packages/sentence-parser/tsconfig.json | 1 - packages/test-case-recorder/package.json | 15 +- packages/test-case-recorder/tsconfig.json | 13 +- packages/test-harness/package.json | 16 +- packages/test-harness/scripts/build-tests.sh | 2 +- .../test-harness/scripts/compile-esbuild.sh | 1 - packages/test-harness/tsconfig.json | 16 +- packages/vscode-common/package.json | 15 +- packages/vscode-common/tsconfig.json | 7 +- scripts/build-and-assemble-website.sh | 1 - tsconfig.base.json | 31 +++- 75 files changed, 326 insertions(+), 613 deletions(-) create mode 100644 packages/common/src/util/getProcessEnv.ts create mode 100644 packages/cursorless-org-docs/src/docs/contributing/architecture/package-scripts.md diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index c01bbd75f6..25fa789321 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -26,9 +26,6 @@ jobs: - name: Set up Node.js uses: ./.github/actions/setup-node - - name: Compile - run: pnpm --color compile - - name: Build run: pnpm --color --filter '!cursorless-org' --filter '!cursorless-org-*' build env: @@ -67,9 +64,6 @@ jobs: - name: Set up Node.js uses: ./.github/actions/setup-node - - name: Compile - run: pnpm --color compile - - name: Build run: pnpm --color --filter '!cursorless-org' --filter '!cursorless-org-*' build env: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c1a152747e..71f2f838c8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -27,6 +27,9 @@ jobs: - name: Set up Node.js uses: ./.github/actions/setup-node + - name: Typecheck + run: pnpm --color typecheck + - name: Lint run: pnpm --color lint @@ -75,9 +78,6 @@ jobs: run: mkdir -p "${{ env.VSCODE_CRASH_DIR }}" "${{ env.VSCODE_LOGS_DIR }}" "${{ env.TEMP_DIR }}" shell: bash - - name: Compile - run: pnpm --color compile - - name: Build run: pnpm --color --filter '!cursorless-org' --filter '!cursorless-org-*' build @@ -163,9 +163,6 @@ jobs: - name: Set up Node.js uses: ./.github/actions/setup-node - - name: Compile - run: pnpm --color compile - - name: Build run: pnpm --color --filter '!cursorless-org' --filter '!cursorless-org-*' build diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 57c9c596cb..da5931afdc 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -4,20 +4,10 @@ "version": "2.0.0", "tasks": [ // Generic build tasks - { - "label": "TSBuild", - "type": "npm", - "script": "compile", - "problemMatcher": "$tsc", - "presentation": { - "reveal": "silent" - }, - "group": "build" - }, { "label": "Build test harness", "type": "npm", - "script": "build", + "script": "bundle", "path": "packages/test-harness", "presentation": { "reveal": "silent" @@ -34,34 +24,6 @@ "group": "build" }, - // Generic watch tasks - { - "label": "watch", - "dependsOn": ["Watch esbuild", "Watch typescript"], - "group": "build" - }, - { - "type": "npm", - "script": "watch:esbuild", - "label": "Watch esbuild", - "isBackground": true, - "presentation": { - "reveal": "never" - }, - "group": "build" - }, - { - "type": "npm", - "script": "watch:tsc", - "label": "Watch typescript", - "problemMatcher": "$tsc-watch", - "isBackground": true, - "presentation": { - "reveal": "never" - }, - "group": "build" - }, - // Generic test tasks { "label": "Ensure test subset file exists", @@ -102,7 +64,7 @@ { "label": "VSCode: ESBuild", "type": "npm", - "script": "esbuild", + "script": "bundle:dev", "path": "packages/cursorless-vscode", "dependsOn": ["Generate grammar"], "presentation": { @@ -124,7 +86,7 @@ { "label": "VSCode: Build tutorial webview", "type": "npm", - "script": "build:dev", + "script": "bundle:dev", "path": "packages/cursorless-vscode-tutorial-webview", "presentation": { "reveal": "silent" @@ -134,7 +96,7 @@ { "label": "VSCode: Watch tutorial", "type": "npm", - "script": "watch", + "script": "bundle:watch", "isBackground": true, "presentation": { "reveal": "never" @@ -176,7 +138,7 @@ { "label": "Neovim: ESBuild", "type": "npm", - "script": "esbuild", + "script": "bundle:dev", "path": "packages/cursorless-neovim", "dependsOn": ["Generate grammar"], "presentation": { diff --git a/AGENTS.md b/AGENTS.md index f3bd40d041..de99a5b242 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -15,9 +15,9 @@ ## Build and Test -- Always run lint and compile when making changes: +- Always run lint and typecheck when making changes: - `pnpm run lint` - - `pnpm run compile` + - `pnpm run typecheck` - Tests can be run with: - `pnpm test` diff --git a/package.json b/package.json index d7a6f92156..4e1812352a 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "scripts": { "build": "pnpm -r build", "clean": "pnpm -r clean", - "compile": "tsc --build && pnpm -r compile:esbuild", + "typecheck": "pnpm -r typecheck", "fix:meta": "pnpm run meta-updater && pnpm -r exec prettier --write tsconfig.json package.json", "fix:syncpack": "syncpack fix", "fix:eslint": "pnpm lint:ts --fix", @@ -25,18 +25,14 @@ "lint:style": "stylelint '**/*.{css,scss}'", "lint": "pnpm run lint:meta && pnpm run lint:syncpack && pnpm run lint:ts && pnpm run lint:style", "init-vscode-sandbox": "pnpm -F @cursorless/cursorless-vscode init-launch-sandbox", - "meta-updater": "env NODE_OPTIONS='--import=tsx --conditions=cursorless:bundler' meta-updater", + "meta-updater": "env NODE_OPTIONS='--import=tsx' meta-updater", "preinstall": "npx only-allow pnpm", - "test-compile": "tsc --build", "test": "pnpm -r test", "test:subset": "pnpm -r test:subset", "test:update": "pnpm -r test:update", "test:update:subset": "pnpm -r test:update:subset", "generate-grammar": "pnpm -r generate-grammar", - "transform-recorded-tests": "pnpm exec ./packages/common/scripts/my-ts-node.js ./packages/cursorless-engine/src/scripts/transformRecordedTests/index.ts", - "watch": "pnpm run -w --parallel '/^watch:.*/'", - "watch:esbuild": "pnpm run -r --parallel watch:esbuild", - "watch:tsc": "tsc --build --watch" + "transform-recorded-tests": "pnpm exec ./packages/common/scripts/my-ts-node.js ./packages/cursorless-engine/src/scripts/transformRecordedTests/index.ts" }, "devDependencies": { "@eslint/config-helpers": "^0.5.3", diff --git a/packages/cheatsheet-local/README.md b/packages/cheatsheet-local/README.md index 9f3373ffb1..9b01f4aac2 100644 --- a/packages/cheatsheet-local/README.md +++ b/packages/cheatsheet-local/README.md @@ -2,16 +2,16 @@ This app just bundles up the cheatsheet into a single file to be used when the user says `"cursorless cheatsheet"`. The file inlines all css and js so that it can be opened as a single file by the end user. During actual production use, Talon will send the user's custom spoken forms to the Cursorless engine, which will [inject them](../cursorless-engine/src/core/Cheatsheet.ts) into the cheatsheet using a global variable. -Note that there is no development server for this app. It is just a build step. If you want a live development environment for the cheatsheet, you should use the cheatsheet page in [the `cursorless-org` package (our webpage defined in Next.js)](../cursorless-org). +Note that there is no development server for this app. It is just a bundle step. If you want a live development environment for the cheatsheet, you should use the cheatsheet page in [the `cursorless-org` package](../cursorless-org). ## Tasks -### build +### bundle Builds the cheatsheet into a single file for deployment. -``` -pnpm run build +```bash +pnpm bundle ``` The output will be in `dist/index.html`. Note that this file includes a bit of fake data so that it can be opened to check that it is functioning, but in production it will be replaced with the real data (see above). diff --git a/packages/cheatsheet-local/package.json b/packages/cheatsheet-local/package.json index 518abb7eee..7fa8d06aa5 100644 --- a/packages/cheatsheet-local/package.json +++ b/packages/cheatsheet-local/package.json @@ -8,19 +8,16 @@ "main": "./out/index.js", "types": "./out/index.d.ts", "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.js" - } + ".": "./out/index.js" }, "scripts": { "test": "jest", - "compile": "tsc --build", - "watch": "tsc --build --watch", + "typecheck": "tsc", "serve": "vite serve", "preview": "vite preview", - "build": "vite build", - "build:dev": "vite build --mode development", + "bundle": "vite build", + "bundle:dev": "vite build --mode development", + "bundle:watch": "vite build --mode development --watch", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { diff --git a/packages/cheatsheet-local/tsconfig.json b/packages/cheatsheet-local/tsconfig.json index 1af66ad93a..9c70cf58cb 100644 --- a/packages/cheatsheet-local/tsconfig.json +++ b/packages/cheatsheet-local/tsconfig.json @@ -13,14 +13,6 @@ "ts-node": { "esm": true }, - "references": [ - { - "path": "../cheatsheet" - }, - { - "path": "../common" - } - ], "include": [ "src/**/*.ts", "src/**/*.json", diff --git a/packages/cheatsheet-local/vite.config.ts b/packages/cheatsheet-local/vite.config.ts index 0f535e6b03..f3fdfd3f23 100644 --- a/packages/cheatsheet-local/vite.config.ts +++ b/packages/cheatsheet-local/vite.config.ts @@ -11,7 +11,6 @@ export default defineConfig((): UserConfig => { }, resolve: { - conditions: ["cursorless:bundler"], alias: vitePreactAlias, }, diff --git a/packages/cheatsheet/package.json b/packages/cheatsheet/package.json index 077cdb8cdd..0574c6be71 100644 --- a/packages/cheatsheet/package.json +++ b/packages/cheatsheet/package.json @@ -4,26 +4,15 @@ "description": "Core cheatsheet Preact component", "license": "MIT", "type": "module", - "main": "./out/index.js", - "types": "./out/index.d.ts", "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.js" - } + ".": "./src/index.ts" }, "sideEffects": [ "*.css" ], "scripts": { "test": "jest", - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", - "compile:tsc": "tsc --build", - "compile:esbuild": "bash ../../scripts/compile-esbuild.sh", - "compile": "pnpm compile:tsc && pnpm compile:esbuild", - "watch:tsc": "pnpm compile:tsc --watch", - "watch:esbuild": "pnpm compile:esbuild --watch", - "watch": "pnpm run --filter @cursorless/cheatsheet --parallel '/^watch:.*/'" + "typecheck": "tsc" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/cheatsheet/tsconfig.json b/packages/cheatsheet/tsconfig.json index 8a0fde570c..8c2cb0d195 100644 --- a/packages/cheatsheet/tsconfig.json +++ b/packages/cheatsheet/tsconfig.json @@ -8,11 +8,6 @@ "esModuleInterop": true, "skipLibCheck": true }, - "references": [ - { - "path": "../common" - } - ], "include": [ "src/**/*.ts", "src/**/*.json", diff --git a/packages/common/package.json b/packages/common/package.json index c13a005a9c..871b552a71 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -4,25 +4,14 @@ "description": "Common utilities for use anywhere in our codebase", "license": "MIT", "type": "module", - "main": "./out/index.js", - "types": "./out/index.d.ts", "bin": { "my-ts-node": "./scripts/my-ts-node.js" }, "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.js" - } + ".": "./src/index.ts" }, "scripts": { - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", - "compile:tsc": "tsc --build", - "compile:esbuild": "bash ../../scripts/compile-esbuild.sh", - "compile": "pnpm compile:tsc && pnpm compile:esbuild", - "watch:tsc": "pnpm compile:tsc --watch", - "watch:esbuild": "pnpm compile:esbuild --watch", - "watch": "pnpm run --filter @cursorless/common --parallel '/^watch:.*/'" + "typecheck": "tsc" }, "dependencies": { "itertools": "^2.6.0", diff --git a/packages/common/scripts/my-ts-node.js b/packages/common/scripts/my-ts-node.js index 5f0b65bf39..33cc3e1056 100755 --- a/packages/common/scripts/my-ts-node.js +++ b/packages/common/scripts/my-ts-node.js @@ -82,7 +82,6 @@ async function main() { await build({ entryPoints: [fileToRun], sourcemap: true, - conditions: ["cursorless:bundler"], logLevel: "warning", platform: "node", bundle: true, diff --git a/packages/common/src/Debouncer.ts b/packages/common/src/Debouncer.ts index 6a8674519a..a4f5281342 100644 --- a/packages/common/src/Debouncer.ts +++ b/packages/common/src/Debouncer.ts @@ -3,7 +3,7 @@ * value to determine the debounce delay. */ export class Debouncer { - private timeoutHandle: NodeJS.Timeout | null = null; + private timeoutHandle: ReturnType | null = null; constructor( /** The callback to debounce */ diff --git a/packages/common/src/testUtil/shouldUpdateFixtures.ts b/packages/common/src/testUtil/shouldUpdateFixtures.ts index 9f0eb7b498..747fb7e5ac 100644 --- a/packages/common/src/testUtil/shouldUpdateFixtures.ts +++ b/packages/common/src/testUtil/shouldUpdateFixtures.ts @@ -1,7 +1,9 @@ +import { getProcessEnv } from "../util/getProcessEnv"; + /** * Used to check weather the update fixtures launch config was used. * @returns `true` if developer used to the update fixtures launch config */ export function shouldUpdateFixtures() { - return process.env.CURSORLESS_TEST_UPDATE_FIXTURES === "true"; + return getProcessEnv().CURSORLESS_TEST_UPDATE_FIXTURES === "true"; } diff --git a/packages/common/src/util/getEnvironmentVariableStrict.ts b/packages/common/src/util/getEnvironmentVariableStrict.ts index 9b05dacd70..3443e19d4f 100644 --- a/packages/common/src/util/getEnvironmentVariableStrict.ts +++ b/packages/common/src/util/getEnvironmentVariableStrict.ts @@ -1,5 +1,7 @@ +import { getProcessEnv } from "./getProcessEnv"; + export function getEnvironmentVariableStrict(name: string): string { - const value = process.env[name]; + const value = getProcessEnv()[name]; if (value == null) { throw new Error(`Missing environment variable ${name}`); } diff --git a/packages/common/src/util/getProcessEnv.ts b/packages/common/src/util/getProcessEnv.ts new file mode 100644 index 0000000000..1fb94adf80 --- /dev/null +++ b/packages/common/src/util/getProcessEnv.ts @@ -0,0 +1,9 @@ +export function getProcessEnv() { + return ( + ( + globalThis as typeof globalThis & { + process?: { env?: Record }; + } + ).process?.env ?? {} + ); +} diff --git a/packages/cursorless-cheatsheet/package.json b/packages/cursorless-cheatsheet/package.json index 67f97f1b2b..704b664b74 100644 --- a/packages/cursorless-cheatsheet/package.json +++ b/packages/cursorless-cheatsheet/package.json @@ -4,22 +4,11 @@ "description": "Cursorless cheatsheet implementation", "license": "MIT", "type": "module", - "main": "./out/index.js", - "types": "./out/index.d.ts", "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.js" - } + ".": "./src/index.ts" }, "scripts": { - "compile:tsc": "tsc --build", - "compile:esbuild": "bash ../../scripts/compile-esbuild.sh", - "compile": "pnpm compile:tsc && pnpm compile:esbuild", - "watch:tsc": "pnpm compile:tsc --watch", - "watch:esbuild": "pnpm compile:esbuild --watch", - "watch": "pnpm run --filter @cursorless/cursorless-cheatsheet --parallel '/^watch:.*/'", - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" + "typecheck": "tsc" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/cursorless-cheatsheet/tsconfig.json b/packages/cursorless-cheatsheet/tsconfig.json index 28f94c07f4..d4fbbd0828 100644 --- a/packages/cursorless-cheatsheet/tsconfig.json +++ b/packages/cursorless-cheatsheet/tsconfig.json @@ -1,12 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"], - "references": [ - { - "path": "../common" - }, - { - "path": "../node-common" - } - ] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-engine/package.json b/packages/cursorless-engine/package.json index b4839d8688..14a8f794a3 100644 --- a/packages/cursorless-engine/package.json +++ b/packages/cursorless-engine/package.json @@ -4,27 +4,16 @@ "description": "The core Cursorless engine, which is responsible for parsing and executing commands, allocating hats, etc", "license": "MIT", "type": "module", - "main": "./out/index.js", - "types": "./out/index.d.ts", "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.js" - } + ".": "./src/index.ts" }, "scripts": { - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", - "compile:tsc": "tsc --build", - "compile:esbuild": "bash ../../scripts/compile-esbuild.sh", - "compile": "pnpm compile:tsc && pnpm compile:esbuild", + "typecheck": "tsc", + "test": "pnpm ensure-grammar-up-to-date", "generate-grammar:base": "nearleyc src/customCommandGrammar/grammar.ne", "ensure-grammar-up-to-date": "pnpm -s generate-grammar:base | diff -u src/customCommandGrammar/generated/grammar.ts -", "generate-grammar": "pnpm generate-grammar:base -o src/customCommandGrammar/generated/grammar.ts", - "generate-railroad": "nearley-railroad src/customCommandGrammar/grammar.ne -o out/railroad.html", - "test": "pnpm ensure-grammar-up-to-date", - "watch:tsc": "pnpm compile:tsc --watch", - "watch:esbuild": "pnpm compile:esbuild --watch", - "watch": "pnpm run --filter @cursorless/cursorless-engine --parallel '/^watch:.*/'" + "generate-railroad": "nearley-railroad src/customCommandGrammar/grammar.ne -o out/railroad.html" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/cursorless-engine/tsconfig.json b/packages/cursorless-engine/tsconfig.json index abf496b58c..d4fbbd0828 100644 --- a/packages/cursorless-engine/tsconfig.json +++ b/packages/cursorless-engine/tsconfig.json @@ -1,15 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"], - "references": [ - { - "path": "../common" - }, - { - "path": "../node-common" - }, - { - "path": "../sentence-parser" - } - ] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-everywhere-talon-core/package.json b/packages/cursorless-everywhere-talon-core/package.json index 77d4a298cd..d82ec6ec55 100644 --- a/packages/cursorless-everywhere-talon-core/package.json +++ b/packages/cursorless-everywhere-talon-core/package.json @@ -4,22 +4,11 @@ "description": "cursorless in talon js core packagee", "license": "MIT", "type": "module", - "main": "./out/index.js", - "types": "./out/index.d.ts", "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.js" - } + ".": "./src/index.ts" }, "scripts": { - "compile:tsc": "tsc --build", - "compile:esbuild": "bash ../../scripts/compile-esbuild.sh", - "compile": "pnpm compile:tsc && pnpm compile:esbuild", - "watch:tsc": "pnpm compile:tsc --watch", - "watch:esbuild": "pnpm compile:esbuild --watch", - "watch": "pnpm run --filter @cursorless/cursorless-everywhere-talon-core --parallel '/^watch:.*/'", - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" + "typecheck": "tsc" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/cursorless-everywhere-talon-core/tsconfig.json b/packages/cursorless-everywhere-talon-core/tsconfig.json index fe0f62e62c..4fa263afd0 100644 --- a/packages/cursorless-everywhere-talon-core/tsconfig.json +++ b/packages/cursorless-everywhere-talon-core/tsconfig.json @@ -3,13 +3,5 @@ "compilerOptions": { "typeRoots": ["src/types", "node_modules/@types"] }, - "references": [ - { - "path": "../common" - }, - { - "path": "../cursorless-engine" - } - ], "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-everywhere-talon-e2e/package.json b/packages/cursorless-everywhere-talon-e2e/package.json index a8b748c3c1..3a0ecab721 100644 --- a/packages/cursorless-everywhere-talon-e2e/package.json +++ b/packages/cursorless-everywhere-talon-e2e/package.json @@ -7,7 +7,7 @@ "type": "module", "main": "./out/index.js", "scripts": { - "compile": "tsc --build", + "typecheck": "tsc", "test:quickjs": "bash scripts/test-quickjs.sh", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, diff --git a/packages/cursorless-everywhere-talon-e2e/scripts/test-quickjs.sh b/packages/cursorless-everywhere-talon-e2e/scripts/test-quickjs.sh index 581be1444a..de7b8f7d1b 100755 --- a/packages/cursorless-everywhere-talon-e2e/scripts/test-quickjs.sh +++ b/packages/cursorless-everywhere-talon-e2e/scripts/test-quickjs.sh @@ -10,7 +10,6 @@ esbuild \ --platform=neutral \ --format=esm \ --main-fields=main,module \ - --conditions=cursorless:bundler \ --bundle \ --external:std \ --external:node:crypto \ diff --git a/packages/cursorless-everywhere-talon-e2e/tsconfig.json b/packages/cursorless-everywhere-talon-e2e/tsconfig.json index a6b67fbd55..d4fbbd0828 100644 --- a/packages/cursorless-everywhere-talon-e2e/tsconfig.json +++ b/packages/cursorless-everywhere-talon-e2e/tsconfig.json @@ -1,18 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"], - "references": [ - { - "path": "../common" - }, - { - "path": "../cursorless-everywhere-talon-core" - }, - { - "path": "../node-common" - }, - { - "path": "../test-case-recorder" - } - ] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-everywhere-talon/package.json b/packages/cursorless-everywhere-talon/package.json index 32ce6ff01c..951b8b69ac 100644 --- a/packages/cursorless-everywhere-talon/package.json +++ b/packages/cursorless-everywhere-talon/package.json @@ -7,13 +7,14 @@ "type": "module", "main": "./out/index.js", "scripts": { - "esbuild:dev": "pnpm run esbuild:base src/mainDevelopment.ts", - "esbuild:prod": "pnpm run esbuild:base --minify src/mainProduction.ts", - "esbuild:watch": "pnpm run esbuild:base --watch src/mainDevelopment.ts", - "esbuild:profile": "pnpm run esbuild:base --metafile=meta.json src/mainDevelopment.ts", - "esbuild:base": "bash scripts/esbuild.sh", - "compile": "tsc --build", - "compile:esbuild": "pnpm run esbuild:prod", + "bundle:dev": "pnpm run bundle:base src/mainDevelopment.ts", + "bundle": "pnpm run bundle:base --minify src/mainProduction.ts", + "bundle:watch": "pnpm run bundle:base --watch src/mainDevelopment.ts", + "bundle:profile": "pnpm run bundle:base --metafile=meta.json src/mainDevelopment.ts", + "bundle:base": "bash scripts/esbuild.sh", + "dev": "pnpm run bundle:watch", + "build": "pnpm run bundle", + "typecheck": "tsc", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { diff --git a/packages/cursorless-everywhere-talon/scripts/esbuild.sh b/packages/cursorless-everywhere-talon/scripts/esbuild.sh index 47c61e4ba6..93337184dc 100755 --- a/packages/cursorless-everywhere-talon/scripts/esbuild.sh +++ b/packages/cursorless-everywhere-talon/scripts/esbuild.sh @@ -6,7 +6,6 @@ esbuild \ --platform=neutral \ --format=esm \ --main-fields=main,module \ - --conditions=cursorless:bundler \ --bundle \ --sourcemap \ --external:talon \ diff --git a/packages/cursorless-everywhere-talon/tsconfig.json b/packages/cursorless-everywhere-talon/tsconfig.json index e60cb3c225..2e00312d72 100644 --- a/packages/cursorless-everywhere-talon/tsconfig.json +++ b/packages/cursorless-everywhere-talon/tsconfig.json @@ -4,13 +4,5 @@ "noEmit": true, "typeRoots": ["src/types", "node_modules/@types"] }, - "references": [ - { - "path": "../common" - }, - { - "path": "../cursorless-everywhere-talon-core" - } - ], "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-neovim-e2e/package.json b/packages/cursorless-neovim-e2e/package.json index 8d3ac076a4..f0d3171dc7 100644 --- a/packages/cursorless-neovim-e2e/package.json +++ b/packages/cursorless-neovim-e2e/package.json @@ -8,14 +8,10 @@ "main": "./out/index.js", "types": "./out/index.d.ts", "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.js" - } + ".": "./out/index.js" }, "scripts": { - "compile": "tsc --build", - "watch": "tsc --build --watch", + "typecheck": "tsc", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { diff --git a/packages/cursorless-neovim-e2e/tsconfig.json b/packages/cursorless-neovim-e2e/tsconfig.json index fa151fb52b..d4fbbd0828 100644 --- a/packages/cursorless-neovim-e2e/tsconfig.json +++ b/packages/cursorless-neovim-e2e/tsconfig.json @@ -1,25 +1,4 @@ { "extends": "../../tsconfig.base.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "out" - }, - "references": [ - { - "path": "../common" - }, - { - "path": "../neovim-common" - }, - { - "path": "../neovim-registry" - }, - { - "path": "../node-common" - }, - { - "path": "../test-case-recorder" - } - ], "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-neovim/package.json b/packages/cursorless-neovim/package.json index 8859471472..820c0d5a2f 100644 --- a/packages/cursorless-neovim/package.json +++ b/packages/cursorless-neovim/package.json @@ -7,22 +7,18 @@ "main": "./out/index.cjs", "types": "./out/index.d.ts", "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.cjs" - } + ".": "./out/index.cjs" }, "scripts": { - "build": "pnpm run esbuild:prod && pnpm run populate-dist", - "compile": "tsc --build", - "esbuild:base": "bash ./scripts/compile-esbuild.sh", - "esbuild": "pnpm run esbuild:base --sourcemap", - "esbuild:prod": "pnpm run esbuild:base --minify", + "build": "pnpm -F @cursorless/test-harness bundle:runner:neovim && pnpm run bundle && pnpm run populate-dist", + "dev": "pnpm run bundle:dev && pnpm run populate-dist", + "typecheck": "tsc", + "bundle:base": "bash ./scripts/compile-esbuild.sh", + "bundle:dev": "pnpm run bundle:base --sourcemap", + "bundle:watch": "pnpm run bundle:base --sourcemap --watch", + "bundle": "pnpm run bundle:base --minify", "populate-dist": "bash ./scripts/populate-dist.sh", "populate-dist:prod": "bash ./scripts/populate-dist.sh", - "watch:tsc": "pnpm compile --watch", - "watch:esbuild": "pnpm esbuild --watch", - "watch": "pnpm run --filter @cursorless/cursorless-neovim --parallel '/^watch:.*/'", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { diff --git a/packages/cursorless-neovim/scripts/compile-esbuild.sh b/packages/cursorless-neovim/scripts/compile-esbuild.sh index beca2717a6..8488720560 100755 --- a/packages/cursorless-neovim/scripts/compile-esbuild.sh +++ b/packages/cursorless-neovim/scripts/compile-esbuild.sh @@ -8,5 +8,4 @@ esbuild \ --format=cjs \ --bundle \ --platform=node \ - --conditions=cursorless:bundler \ "$@" diff --git a/packages/cursorless-neovim/tsconfig.json b/packages/cursorless-neovim/tsconfig.json index ebb84f2ad6..d4fbbd0828 100644 --- a/packages/cursorless-neovim/tsconfig.json +++ b/packages/cursorless-neovim/tsconfig.json @@ -1,28 +1,4 @@ { "extends": "../../tsconfig.base.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "out" - }, - "references": [ - { - "path": "../common" - }, - { - "path": "../cursorless-engine" - }, - { - "path": "../neovim-common" - }, - { - "path": "../neovim-registry" - }, - { - "path": "../node-common" - }, - { - "path": "../test-case-recorder" - } - ], "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-org-docs/package.json b/packages/cursorless-org-docs/package.json index a389d5f7ea..f22e8e3b4d 100644 --- a/packages/cursorless-org-docs/package.json +++ b/packages/cursorless-org-docs/package.json @@ -7,10 +7,7 @@ "main": "./out/index.js", "types": "./out/index.d.ts", "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.js" - } + ".": "./out/index.js" }, "browserslist": { "production": [ @@ -26,6 +23,7 @@ }, "scripts": { "docusaurus": "docusaurus", + "dev": "docusaurus start", "start": "docusaurus start", "build": "docusaurus build", "swizzle": "docusaurus swizzle", @@ -34,8 +32,7 @@ "serve": "docusaurus serve", "write-translations": "docusaurus write-translations", "write-heading-ids": "docusaurus write-heading-ids", - "compile": "tsc --build", - "watch": "tsc --build --watch", + "typecheck": "tsc", "clean": "pnpm clear && rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { diff --git a/packages/cursorless-org-docs/src/docs/contributing/CONTRIBUTING.mdx b/packages/cursorless-org-docs/src/docs/contributing/CONTRIBUTING.mdx index 799b436dbe..3921adcf56 100644 --- a/packages/cursorless-org-docs/src/docs/contributing/CONTRIBUTING.mdx +++ b/packages/cursorless-org-docs/src/docs/contributing/CONTRIBUTING.mdx @@ -23,7 +23,6 @@ Welcome! So glad you've decided to help make Cursorless better. You'll want to s ```bash pnpm install - pnpm compile ``` 4. Run the following in the terminal: diff --git a/packages/cursorless-org-docs/src/docs/contributing/adding-a-new-package.md b/packages/cursorless-org-docs/src/docs/contributing/adding-a-new-package.md index 72abeac26d..ecf1201e2d 100644 --- a/packages/cursorless-org-docs/src/docs/contributing/adding-a-new-package.md +++ b/packages/cursorless-org-docs/src/docs/contributing/adding-a-new-package.md @@ -6,15 +6,17 @@ Replace `foo` with your new package name in the instructions below. 2. `mkdir foo && cd foo` 3. `pnpm init` 4. `code package.json` and update the `description` field. If your package is - not a library (ie it's an entrypoint), add a `"private": true,` line to your + not a top-level application package, add a `"private": true,` line to your `package.json`. 5. `pnpm install` 6. `pnpm -w fix:meta` -If your package is not a library, you get a bit less scaffolding for free, so -you may want to steal some of the scripts, as well as possibly the `main`, -`types`, and `exports` fields, from one of our library's `package.json`s. The -`@cursorless/common` package is a decent one to steal from. +Internal source-only packages should generally just expose `typecheck`, and if +needed `test`. + +If your package is a top-level application package, you will usually also want +`dev` and `build`, and possibly helper `bundle:*` scripts if it produces +internal artifacts for another package. For any packages that you need to depend on, you can run diff --git a/packages/cursorless-org-docs/src/docs/contributing/architecture/package-scripts.md b/packages/cursorless-org-docs/src/docs/contributing/architecture/package-scripts.md new file mode 100644 index 0000000000..4f6efbcce4 --- /dev/null +++ b/packages/cursorless-org-docs/src/docs/contributing/architecture/package-scripts.md @@ -0,0 +1,150 @@ +# Package Scripts + +This page describes the script architecture used in the Cursorless monorepo. + +## Overview + +The repository uses four main script concepts: + +- `typecheck`: Validate TypeScript for a package or the whole workspace +- `bundle`: Produce an internal runtime artifact for another package to consume +- `build`: Produce a top-level distributable artifact +- `dev`: Run the primary development workflow for a top-level package + +The main distinction is between internal packages and top-level application packages. + +## Internal packages + +Internal packages are not published independently. They are consumed only from +within this repository. + +There are two important kinds of internal packages: + +- Source-only shared code packages, such as `common` or `cursorless-engine` +- Internal asset packages, such as `cheatsheet-local` or + `cursorless-vscode-tutorial-webview` + +### Source-only shared code packages + +These packages should expose `typecheck`, but they should not expose public +`build`, `compile`, or `clean` scripts. + +These packages export source directly from `src`, and they should not rely on an +`out` directory as part of their package contract. + +### Internal asset packages + +Some internal packages still need to generate runtime artifacts, but these +artifacts are implementation details of another package. + +These packages expose `bundle` scripts instead of `build` scripts. For example: + +- `bundle` +- `bundle:dev` +- `bundle:watch` + +These scripts are intended to be called by another package, not to define the +main top-level workflow for the repository. + +## Top-level application packages + +Top-level application packages expose the primary workflows that developers +actually use directly. + +These packages generally expose: + +- `typecheck` +- `dev` +- `build` + +Examples include: + +- `@cursorless/cursorless-vscode` +- `@cursorless/cursorless-neovim` +- `@cursorless/cursorless-org` +- `@cursorless/cursorless-org-docs` +- `@cursorless/cursorless-everywhere-talon` + +## Script meanings + +### `typecheck` + +`typecheck` validates TypeScript for the package. At the repository root, it +walks the project reference graph without emitting compiled output. + +Use this when you want to validate the codebase without implying that a +distributable artifact should be produced. + +### `bundle` + +`bundle` means "produce an internal runtime artifact". It is used for packages +that generate files consumed by another package, but which are not themselves +top-level deliverables. + +Examples: + +- the local cheatsheet single-file bundle +- the VS Code tutorial webview bundle +- test harness runner bundles + +### `build` + +`build` means "produce the final artifact for a top-level application package". + +`build` scripts should be self-contained. If a top-level package depends on +internal bundle-producing packages, its `build` script should invoke their +`bundle` scripts itself. + +For example: + +- `cursorless-vscode build` is responsible for building the assets it embeds +- `cursorless-neovim build` is responsible for building the support artifacts it + packages + +### `dev` + +`dev` is the main development entrypoint for a top-level application package. + +For web applications this is usually a long-running development server, such as +Vite or Docusaurus. + +For extension-style packages, `dev` currently means "prepare a development +build" rather than a fully self-updating hot-deploy pipeline. If more advanced +hot-deploy behavior is needed, it should still hang off the top-level `dev` +entrypoint rather than reintroducing older script names like `build:dev`. + +## Repository-level rules + +At the repository root: + +- use `pnpm typecheck` to validate the TypeScript graph +- use `pnpm build` to build top-level distributable packages +- do not use root-level `compile` or generic `watch:*` scripts + +For internal source-only packages, `typecheck` should not create an `out` +directory. + +The goal is to keep the public vocabulary small and make each script name mean +one thing consistently across the repository. + +## Naming guidelines + +Use `bundle` when: + +- the package is internal +- the output is consumed by another package +- the script is mostly an implementation detail + +Use `build` when: + +- the package is a top-level application or distributable +- the script produces the main artifact developers care about + +Use `dev` when: + +- the script is the primary entrypoint for local development of a top-level + package + +Use `typecheck` when: + +- the goal is validating TypeScript rather than producing a runtime artifact diff --git a/packages/cursorless-org-docs/tsconfig.json b/packages/cursorless-org-docs/tsconfig.json index 561c8d4a1b..a50ba36d44 100644 --- a/packages/cursorless-org-docs/tsconfig.json +++ b/packages/cursorless-org-docs/tsconfig.json @@ -3,8 +3,6 @@ "compilerOptions": { "target": "es2022", "lib": ["dom", "es2022"], - "moduleResolution": "nodenext", - "module": "nodenext", "jsx": "react", "esModuleInterop": true }, @@ -14,13 +12,5 @@ "src/**/*.tsx", "../../typings/**/*.d.ts" ], - "exclude": ["node_modules"], - "references": [ - { - "path": "../common" - }, - { - "path": "../node-common" - } - ] + "exclude": ["node_modules"] } diff --git a/packages/cursorless-org/package.json b/packages/cursorless-org/package.json index 58e3675713..c325d37177 100644 --- a/packages/cursorless-org/package.json +++ b/packages/cursorless-org/package.json @@ -8,15 +8,11 @@ "main": "./out/index.js", "types": "./out/index.d.ts", "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.js" - } + ".": "./out/index.js" }, "scripts": { - "compile": "tsc --build", - "watch": "tsc --build --watch", - "serve": "vite serve", + "typecheck": "tsc", + "dev": "vite serve", "build": "vite build", "preview": "vite preview", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" diff --git a/packages/cursorless-org/tsconfig.json b/packages/cursorless-org/tsconfig.json index 55af974f02..4e327eddf3 100644 --- a/packages/cursorless-org/tsconfig.json +++ b/packages/cursorless-org/tsconfig.json @@ -18,13 +18,5 @@ "src/**/*.tsx", "../../typings/**/*.d.ts" ], - "references": [ - { - "path": "../cheatsheet" - }, - { - "path": "../common" - } - ], "exclude": ["node_modules"] } diff --git a/packages/cursorless-org/vite.config.ts b/packages/cursorless-org/vite.config.ts index 89639cb123..7bdfc18731 100644 --- a/packages/cursorless-org/vite.config.ts +++ b/packages/cursorless-org/vite.config.ts @@ -32,7 +32,6 @@ export default defineConfig((): UserConfig => { }, resolve: { - conditions: ["cursorless:bundler"], alias: vitePreactAlias, }, diff --git a/packages/cursorless-tutorial/package.json b/packages/cursorless-tutorial/package.json index 4043300064..fdaa78b638 100644 --- a/packages/cursorless-tutorial/package.json +++ b/packages/cursorless-tutorial/package.json @@ -4,22 +4,11 @@ "description": "Cursorless tutorial driver code", "license": "MIT", "type": "module", - "main": "./out/index.js", - "types": "./out/index.d.ts", "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.js" - } + ".": "./src/index.ts" }, "scripts": { - "compile:tsc": "tsc --build", - "compile:esbuild": "bash ../../scripts/compile-esbuild.sh", - "compile": "pnpm compile:tsc && pnpm compile:esbuild", - "watch:tsc": "pnpm compile:tsc --watch", - "watch:esbuild": "pnpm compile:esbuild --watch", - "watch": "pnpm run --filter @cursorless/cursorless-tutorial --parallel '/^watch:.*/'", - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" + "typecheck": "tsc" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/cursorless-tutorial/tsconfig.json b/packages/cursorless-tutorial/tsconfig.json index 8f5961799f..d4fbbd0828 100644 --- a/packages/cursorless-tutorial/tsconfig.json +++ b/packages/cursorless-tutorial/tsconfig.json @@ -1,16 +1,4 @@ { "extends": "../../tsconfig.base.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "out" - }, - "references": [ - { - "path": "../common" - }, - { - "path": "../cursorless-engine" - } - ], "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-vscode-e2e/package.json b/packages/cursorless-vscode-e2e/package.json index 73e0edab3a..37cea18233 100644 --- a/packages/cursorless-vscode-e2e/package.json +++ b/packages/cursorless-vscode-e2e/package.json @@ -8,14 +8,10 @@ "main": "./out/index.js", "types": "./out/index.d.ts", "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.js" - } + ".": "./out/index.js" }, "scripts": { - "compile": "tsc --build", - "watch": "tsc --build --watch", + "typecheck": "tsc", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { diff --git a/packages/cursorless-vscode-e2e/tsconfig.json b/packages/cursorless-vscode-e2e/tsconfig.json index 01add93940..d4fbbd0828 100644 --- a/packages/cursorless-vscode-e2e/tsconfig.json +++ b/packages/cursorless-vscode-e2e/tsconfig.json @@ -1,15 +1,4 @@ { "extends": "../../tsconfig.base.json", - "references": [ - { - "path": "../common" - }, - { - "path": "../node-common" - }, - { - "path": "../vscode-common" - } - ], "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-vscode-tutorial-webview/README.md b/packages/cursorless-vscode-tutorial-webview/README.md index e4d3fabb04..5be2e3d9a9 100644 --- a/packages/cursorless-vscode-tutorial-webview/README.md +++ b/packages/cursorless-vscode-tutorial-webview/README.md @@ -5,8 +5,8 @@ the user opens any tutorial in VSCode. It is rendered in the sidebar. ## Development -To enable hot reloading, run the following command: +To rebuild the bundle on every change, run the following command: ```bash -pnpm watch +pnpm bundle:watch ``` diff --git a/packages/cursorless-vscode-tutorial-webview/package.json b/packages/cursorless-vscode-tutorial-webview/package.json index 846a4fa6ef..24d4055055 100644 --- a/packages/cursorless-vscode-tutorial-webview/package.json +++ b/packages/cursorless-vscode-tutorial-webview/package.json @@ -7,10 +7,10 @@ "type": "module", "main": "./out/index.js", "scripts": { - "compile": "tsc --build", - "watch": "tsc --build --watch", - "build": "vite build", - "build:dev": "vite build --mode development", + "typecheck": "tsc", + "bundle": "vite build", + "bundle:dev": "vite build --mode development", + "bundle:watch": "vite build --mode development --watch", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { diff --git a/packages/cursorless-vscode-tutorial-webview/tsconfig.json b/packages/cursorless-vscode-tutorial-webview/tsconfig.json index 3886a30398..947756b576 100644 --- a/packages/cursorless-vscode-tutorial-webview/tsconfig.json +++ b/packages/cursorless-vscode-tutorial-webview/tsconfig.json @@ -5,11 +5,6 @@ "jsx": "react-jsx", "jsxImportSource": "preact" }, - "references": [ - { - "path": "../common" - } - ], "include": [ "src/**/*.ts", "src/**/*.json", diff --git a/packages/cursorless-vscode-tutorial-webview/vite.config.ts b/packages/cursorless-vscode-tutorial-webview/vite.config.ts index eb54cfeca2..19325e5c65 100644 --- a/packages/cursorless-vscode-tutorial-webview/vite.config.ts +++ b/packages/cursorless-vscode-tutorial-webview/vite.config.ts @@ -22,7 +22,6 @@ export default defineConfig((): UserConfig => { }, resolve: { - conditions: ["cursorless:bundler"], alias: vitePreactAlias, }, diff --git a/packages/cursorless-vscode/package.json b/packages/cursorless-vscode/package.json index 8c3d4c2866..3a904ef1dd 100644 --- a/packages/cursorless-vscode/package.json +++ b/packages/cursorless-vscode/package.json @@ -1281,16 +1281,16 @@ ] }, "scripts": { - "build": "pnpm run esbuild:prod && pnpm run populate-dist", - "build:dev": "pnpm generate-grammar && pnpm run esbuild && pnpm run populate-dist", - "esbuild:base": "bash ./scripts/compile-esbuild.sh", + "build": "pnpm generate-grammar && pnpm -F @cursorless/cheatsheet-local bundle && pnpm -F @cursorless/cursorless-vscode-tutorial-webview bundle && pnpm run bundle && pnpm run populate-dist", + "dev": "pnpm generate-grammar && pnpm -F @cursorless/cursorless-vscode-tutorial-webview bundle:dev && pnpm run bundle:dev && pnpm run populate-dist", + "bundle:base": "bash ./scripts/compile-esbuild.sh", "install-local": "bash ./scripts/install-local.sh", "install-from-pr": "bash ./scripts/install-from-pr.sh", "uninstall-local": "bash ./scripts/uninstall-local.sh", - "esbuild": "pnpm run esbuild:base --sourcemap", - "esbuild:watch": "pnpm run esbuild:base --sourcemap --watch", - "esbuild:prod": "pnpm run esbuild:base --minify", - "esbuild:meta": "pnpm run esbuild:base --metafile=meta.json", + "bundle:dev": "pnpm run bundle:base --sourcemap", + "bundle:watch": "pnpm run bundle:base --sourcemap --watch", + "bundle": "pnpm run bundle:base --minify", + "bundle:meta": "pnpm run bundle:base --metafile=meta.json", "populate-dist": "my-ts-node ./src/scripts/populateDist/index.ts", "init-launch-sandbox": "my-ts-node src/scripts/initLaunchSandbox.ts", "preprocess-svg-hats": "my-ts-node src/scripts/preprocessSvgHats.ts", @@ -1301,8 +1301,7 @@ "generate-grammar": "pnpm generate-grammar:base -o src/keyboard/grammar/generated/grammar.ts", "generate-railroad": "nearley-railroad src/keyboard/grammar/grammar.ne -o out/railroad.html", "test": "pnpm ensure-grammar-up-to-date", - "compile": "tsc --build", - "watch": "tsc --build --watch", + "typecheck": "tsc", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "extensionDependencies": [ diff --git a/packages/cursorless-vscode/scripts/compile-esbuild.sh b/packages/cursorless-vscode/scripts/compile-esbuild.sh index a0436f515b..6ca4f51105 100755 --- a/packages/cursorless-vscode/scripts/compile-esbuild.sh +++ b/packages/cursorless-vscode/scripts/compile-esbuild.sh @@ -9,5 +9,4 @@ esbuild \ --bundle \ --external:vscode \ --platform=node \ - --conditions=cursorless:bundler \ "$@" diff --git a/packages/cursorless-vscode/scripts/install-local.sh b/packages/cursorless-vscode/scripts/install-local.sh index 73a8f301ff..167f5a2224 100755 --- a/packages/cursorless-vscode/scripts/install-local.sh +++ b/packages/cursorless-vscode/scripts/install-local.sh @@ -16,10 +16,10 @@ fi # Cursorless first and using a special extension id to break update chain # 1. Build local cursorless, using special extension id to break update chain -pnpm esbuild:prod -pnpm -F cheatsheet-local build -pnpm -F cursorless-vscode-tutorial-webview build -pnpm populate-dist --local-install +pnpm bundle +pnpm -F @cursorless/cheatsheet-local bundle +pnpm -F @cursorless/cursorless-vscode-tutorial-webview bundle +pnpm build --local-install # 2. Bundle the extension cd dist diff --git a/packages/cursorless-vscode/tsconfig.json b/packages/cursorless-vscode/tsconfig.json index 8a62c77d93..d4fbbd0828 100644 --- a/packages/cursorless-vscode/tsconfig.json +++ b/packages/cursorless-vscode/tsconfig.json @@ -1,27 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"], - "references": [ - { - "path": "../common" - }, - { - "path": "../cursorless-cheatsheet" - }, - { - "path": "../cursorless-engine" - }, - { - "path": "../cursorless-tutorial" - }, - { - "path": "../node-common" - }, - { - "path": "../test-case-recorder" - }, - { - "path": "../vscode-common" - } - ] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/meta-updater/package.json b/packages/meta-updater/package.json index 385a4e3b84..31ac017f5b 100644 --- a/packages/meta-updater/package.json +++ b/packages/meta-updater/package.json @@ -6,8 +6,7 @@ "private": true, "type": "module", "scripts": { - "compile": "tsc --build", - "watch": "tsc --build --watch", + "typecheck": "tsc", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "devDependencies": { diff --git a/packages/meta-updater/src/updatePackageJson.ts b/packages/meta-updater/src/updatePackageJson.ts index ab9700cfa9..461089da01 100644 --- a/packages/meta-updater/src/updatePackageJson.ts +++ b/packages/meta-updater/src/updatePackageJson.ts @@ -6,8 +6,6 @@ import type { Context } from "./Context"; import { getCursorlessVscodeFields } from "./getCursorlessVscodeFields"; const LIB_ENTRY_POINT = "./src/index.ts"; -const LIB_JS_OUTPUT = "./out/index.js"; -const LIB_TS_DECL_OUTPUT = "./out/index.d.ts"; /** * Given a package.json, update it to match our conventions. This function is @@ -46,20 +44,8 @@ export async function updatePackageJson( const exportFields: Partial = !isLib ? {} : { - main: LIB_JS_OUTPUT, - types: LIB_TS_DECL_OUTPUT, exports: { - ["."]: { - // We add a custom condition called `cursorless:bundler` for use with esbuild to - // ensure that it uses source .ts files when importing from another - // package in our monorepo. We use this both for esbuild and for tsx. - // See - // https://github.com/evanw/esbuild/issues/1250#issuecomment-1463826174 - // and - // https://github.com/esbuild-kit/tsx/issues/96#issuecomment-1463825643 - ["cursorless:bundler"]: LIB_ENTRY_POINT, - default: LIB_JS_OUTPUT, - }, + ["."]: LIB_ENTRY_POINT, }, }; @@ -97,32 +83,26 @@ async function getScripts( ) { const scripts: PackageJson.Scripts = { ...(inputScripts ?? {}), - ...(isLib - ? { - ["compile:tsc"]: "tsc --build", - ["compile:esbuild"]: `bash ../../scripts/compile-esbuild.sh`, - compile: "pnpm compile:tsc && pnpm compile:esbuild", - ["watch:tsc"]: "pnpm compile:tsc --watch", - ["watch:esbuild"]: "pnpm compile:esbuild --watch", - watch: `pnpm run --filter ${name} --parallel '/^watch:.*/'`, - } - : {}), }; if (isRoot) { return scripts; } - const cleanDirs = ["./out", "tsconfig.tsbuildinfo", "./dist", "./build"]; + scripts.typecheck = "tsc"; - const clean = `rm -rf ${cleanDirs.join(" ")}`; + if (!isLib) { + const cleanDirs = ["./out", "tsconfig.tsbuildinfo", "./dist", "./build"]; + const clean = `rm -rf ${cleanDirs.join(" ")}`; + const cleanScripts = + name === "@cursorless/cursorless-org-docs" + ? ["pnpm clear", clean] + : [clean]; - const cleanScripts = - name === "@cursorless/cursorless-org-docs" - ? ["pnpm clear", clean] - : [clean]; - - scripts.clean = cleanScripts.join(" && "); + scripts.clean = cleanScripts.join(" && "); + } else { + delete scripts.clean; + } return scripts; } diff --git a/packages/meta-updater/tsconfig.json b/packages/meta-updater/tsconfig.json index 525f87033c..9f02581c94 100644 --- a/packages/meta-updater/tsconfig.json +++ b/packages/meta-updater/tsconfig.json @@ -1,13 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "moduleResolution": "node", "esModuleInterop": true }, - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"], - "references": [ - { - "path": "../common" - } - ] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/neovim-common/package.json b/packages/neovim-common/package.json index af49f11750..772d7d498d 100644 --- a/packages/neovim-common/package.json +++ b/packages/neovim-common/package.json @@ -4,22 +4,11 @@ "description": "Common utility functions usable anywhere that neovim api is available", "license": "MIT", "type": "module", - "main": "./out/index.js", - "types": "./out/index.d.ts", "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.js" - } + ".": "./src/index.ts" }, "scripts": { - "compile:tsc": "tsc --build", - "compile:esbuild": "bash ../../scripts/compile-esbuild.sh", - "compile": "pnpm compile:tsc && pnpm compile:esbuild", - "watch:tsc": "pnpm compile:tsc --watch", - "watch:esbuild": "pnpm compile:esbuild --watch", - "watch": "pnpm run --filter @cursorless/neovim-common --parallel '/^watch:.*/'", - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" + "typecheck": "tsc" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/neovim-common/tsconfig.json b/packages/neovim-common/tsconfig.json index ef71cc5ee9..d4fbbd0828 100644 --- a/packages/neovim-common/tsconfig.json +++ b/packages/neovim-common/tsconfig.json @@ -1,19 +1,4 @@ { "extends": "../../tsconfig.base.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "out" - }, - "references": [ - { - "path": "../common" - }, - { - "path": "../neovim-registry" - }, - { - "path": "../node-common" - } - ], "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/neovim-registry/package.json b/packages/neovim-registry/package.json index dc06a2ab0e..4f33079b8f 100644 --- a/packages/neovim-registry/package.json +++ b/packages/neovim-registry/package.json @@ -4,22 +4,11 @@ "description": "Registry to share apis and commands between packages for neovim", "license": "MIT", "type": "module", - "main": "./out/index.js", - "types": "./out/index.d.ts", "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.js" - } + ".": "./src/index.ts" }, "scripts": { - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", - "compile:tsc": "tsc --build", - "compile:esbuild": "bash ../../scripts/compile-esbuild.sh", - "compile": "pnpm compile:tsc && pnpm compile:esbuild", - "watch:tsc": "pnpm compile:tsc --watch", - "watch:esbuild": "pnpm compile:esbuild --watch", - "watch": "pnpm run --filter @cursorless/neovim-registry --parallel '/^watch:.*/'" + "typecheck": "tsc" }, "devDependencies": { "neovim": "^5.4.0" diff --git a/packages/neovim-registry/tsconfig.json b/packages/neovim-registry/tsconfig.json index cea565539b..d4fbbd0828 100644 --- a/packages/neovim-registry/tsconfig.json +++ b/packages/neovim-registry/tsconfig.json @@ -1,9 +1,4 @@ { "extends": "../../tsconfig.base.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "out" - }, - "references": [], "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/node-common/package.json b/packages/node-common/package.json index afef752b72..0762a83c85 100644 --- a/packages/node-common/package.json +++ b/packages/node-common/package.json @@ -4,22 +4,11 @@ "description": "Package containing node utilities", "license": "MIT", "type": "module", - "main": "./out/index.js", - "types": "./out/index.d.ts", "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.js" - } + ".": "./src/index.ts" }, "scripts": { - "compile:tsc": "tsc --build", - "compile:esbuild": "bash ../../scripts/compile-esbuild.sh", - "compile": "pnpm compile:tsc && pnpm compile:esbuild", - "watch:tsc": "pnpm compile:tsc --watch", - "watch:esbuild": "pnpm compile:esbuild --watch", - "watch": "pnpm run --filter @cursorless/node-common --parallel '/^watch:.*/'", - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" + "typecheck": "tsc" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/node-common/tsconfig.json b/packages/node-common/tsconfig.json index 0f90f239b4..d4fbbd0828 100644 --- a/packages/node-common/tsconfig.json +++ b/packages/node-common/tsconfig.json @@ -1,9 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"], - "references": [ - { - "path": "../common" - } - ] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/sentence-parser/package.json b/packages/sentence-parser/package.json index 41c0dc34e3..bf7a7f59a4 100644 --- a/packages/sentence-parser/package.json +++ b/packages/sentence-parser/package.json @@ -4,22 +4,11 @@ "description": "Parse text for sentence boundary detection", "license": "MIT", "type": "module", - "main": "./out/index.js", - "types": "./out/index.d.ts", "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.js" - } + ".": "./src/index.ts" }, "scripts": { - "compile:tsc": "tsc --build", - "compile:esbuild": "bash ../../scripts/compile-esbuild.sh", - "compile": "pnpm compile:tsc && pnpm compile:esbuild", - "watch:tsc": "pnpm compile:tsc --watch", - "watch:esbuild": "pnpm compile:esbuild --watch", - "watch": "pnpm run --filter @cursorless/sentence-parser --parallel '/^watch:.*/'", - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" + "typecheck": "tsc" }, "devDependencies": { "@types/mocha": "^10.0.10", diff --git a/packages/sentence-parser/tsconfig.json b/packages/sentence-parser/tsconfig.json index 1eba1fa892..d4fbbd0828 100644 --- a/packages/sentence-parser/tsconfig.json +++ b/packages/sentence-parser/tsconfig.json @@ -1,5 +1,4 @@ { "extends": "../../tsconfig.base.json", - "references": [], "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/test-case-recorder/package.json b/packages/test-case-recorder/package.json index 5324785bf4..8186f4ca49 100644 --- a/packages/test-case-recorder/package.json +++ b/packages/test-case-recorder/package.json @@ -4,22 +4,11 @@ "description": "Package containing the test case recorder", "license": "MIT", "type": "module", - "main": "./out/index.js", - "types": "./out/index.d.ts", "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.js" - } + ".": "./src/index.ts" }, "scripts": { - "compile:tsc": "tsc --build", - "compile:esbuild": "bash ../../scripts/compile-esbuild.sh", - "compile": "pnpm compile:tsc && pnpm compile:esbuild", - "watch:tsc": "pnpm compile:tsc --watch", - "watch:esbuild": "pnpm compile:esbuild --watch", - "watch": "pnpm run --filter @cursorless/test-case-recorder --parallel '/^watch:.*/'", - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" + "typecheck": "tsc" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/test-case-recorder/tsconfig.json b/packages/test-case-recorder/tsconfig.json index d66e443d06..d4fbbd0828 100644 --- a/packages/test-case-recorder/tsconfig.json +++ b/packages/test-case-recorder/tsconfig.json @@ -1,15 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"], - "references": [ - { - "path": "../common" - }, - { - "path": "../cursorless-engine" - }, - { - "path": "../node-common" - } - ] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/test-harness/package.json b/packages/test-harness/package.json index c2c1f18670..646ba4210f 100644 --- a/packages/test-harness/package.json +++ b/packages/test-harness/package.json @@ -17,16 +17,18 @@ "test:subset": "my-ts-node src/scripts/runUnitTestsOnly.ts --subset", "test:update": "my-ts-node src/scripts/runUnitTestsOnly.ts --update", "test:update:subset": "my-ts-node src/scripts/runUnitTestsOnly.ts --update --subset", + "pretest:vscode": "pnpm run bundle:runner:vscode && pnpm run bundle:tests", "test:vscode": "my-ts-node src/scripts/runVscodeTestsCI.ts", + "pretest:neovim": "pnpm run bundle:runner:neovim && pnpm run bundle:tests", "test:neovim": "my-ts-node src/scripts/runNeovimTestsCI.ts", + "pretest:talonJs": "pnpm run bundle:tests", "test:talonJs": "my-ts-node src/scripts/runTalonJsTests.ts", - "build:base": "bash ./scripts/compile-esbuild.sh", - "build": "pnpm run build:runner:vscode && pnpm run build:runner:neovim && pnpm run build:tests", - "build:runner:vscode": "pnpm run build:base ./src/runners/extensionTestsVscode.ts --outfile=dist/extensionTestsVscode.cjs", - "build:runner:neovim": "pnpm run build:base ./src/runners/extensionTestsNeovim.ts --outfile=out/runners/extensionTestsNeovim.cjs", - "build:tests": "bash ./scripts/build-tests.sh", - "compile": "tsc --build", - "watch": "tsc --build --watch", + "bundle:base": "bash ./scripts/compile-esbuild.sh", + "bundle": "pnpm run bundle:runner:vscode && pnpm run bundle:runner:neovim && pnpm run bundle:tests", + "bundle:runner:vscode": "pnpm run bundle:base ./src/runners/extensionTestsVscode.ts --outfile=dist/extensionTestsVscode.cjs", + "bundle:runner:neovim": "pnpm run bundle:base ./src/runners/extensionTestsNeovim.ts --outfile=out/runners/extensionTestsNeovim.cjs", + "bundle:tests": "bash ./scripts/build-tests.sh", + "typecheck": "tsc", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", "generate-test-subset-file": "my-ts-node ./src/scripts/generateTestSubsetFile.ts --always-open", "generate-test-subset-file-strict": "my-ts-node ./src/scripts/generateTestSubsetFile.ts --fail-if-not-exists" diff --git a/packages/test-harness/scripts/build-tests.sh b/packages/test-harness/scripts/build-tests.sh index c738692a89..38cd432cc3 100755 --- a/packages/test-harness/scripts/build-tests.sh +++ b/packages/test-harness/scripts/build-tests.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash set -euo pipefail -find .. -name '*.test.ts' -print0 | xargs -0 -n 50 pnpm run build:base --outdir=dist --out-extension:.js=.cjs +find .. -name '*.test.ts' -print0 | xargs -0 -n 50 pnpm run bundle:base --outdir=dist --out-extension:.js=.cjs diff --git a/packages/test-harness/scripts/compile-esbuild.sh b/packages/test-harness/scripts/compile-esbuild.sh index 45fee394eb..d81dcbbf20 100755 --- a/packages/test-harness/scripts/compile-esbuild.sh +++ b/packages/test-harness/scripts/compile-esbuild.sh @@ -5,7 +5,6 @@ set -euo pipefail esbuild \ --format=cjs \ --bundle \ - --conditions=cursorless:bundler \ --external:vscode \ --external:./reporters/parallel-buffered \ --external:./worker.js \ diff --git a/packages/test-harness/tsconfig.json b/packages/test-harness/tsconfig.json index e49927123b..d4fbbd0828 100644 --- a/packages/test-harness/tsconfig.json +++ b/packages/test-harness/tsconfig.json @@ -1,18 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"], - "references": [ - { - "path": "../common" - }, - { - "path": "../neovim-common" - }, - { - "path": "../neovim-registry" - }, - { - "path": "../node-common" - } - ] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/vscode-common/package.json b/packages/vscode-common/package.json index de4bb44675..cf3aa3ed5b 100644 --- a/packages/vscode-common/package.json +++ b/packages/vscode-common/package.json @@ -4,22 +4,11 @@ "description": "Common utility functions usable anywhere that VSCode api is available", "license": "MIT", "type": "module", - "main": "./out/index.js", - "types": "./out/index.d.ts", "exports": { - ".": { - "cursorless:bundler": "./src/index.ts", - "default": "./out/index.js" - } + ".": "./src/index.ts" }, "scripts": { - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", - "compile:tsc": "tsc --build", - "compile:esbuild": "bash ../../scripts/compile-esbuild.sh", - "compile": "pnpm compile:tsc && pnpm compile:esbuild", - "watch:tsc": "pnpm compile:tsc --watch", - "watch:esbuild": "pnpm compile:esbuild --watch", - "watch": "pnpm run --filter @cursorless/vscode-common --parallel '/^watch:.*/'" + "typecheck": "tsc" }, "dependencies": { "@cursorless/common": "workspace:*" diff --git a/packages/vscode-common/tsconfig.json b/packages/vscode-common/tsconfig.json index 0f90f239b4..d4fbbd0828 100644 --- a/packages/vscode-common/tsconfig.json +++ b/packages/vscode-common/tsconfig.json @@ -1,9 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"], - "references": [ - { - "path": "../common" - } - ] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/scripts/build-and-assemble-website.sh b/scripts/build-and-assemble-website.sh index 25767181d3..c111d54099 100755 --- a/scripts/build-and-assemble-website.sh +++ b/scripts/build-and-assemble-website.sh @@ -2,7 +2,6 @@ set -euox pipefail pnpm install -pnpm compile NODE_OPTIONS="--max-old-space-size=6144" \ pnpm \ diff --git a/tsconfig.base.json b/tsconfig.base.json index c4c433f627..d951ce6c35 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,18 +1,39 @@ { "compilerOptions": { + "baseUrl": ".", "module": "ESNext", "moduleResolution": "Bundler", "moduleDetection": "force", "target": "es2022", "lib": ["es2022"], - "emitDeclarationOnly": true, - "declarationMap": true, + "noEmit": true, "resolveJsonModule": true, - "composite": true, "forceConsistentCasingInFileNames": true, "isolatedModules": true, "strict": true, - "rootDir": "${configDir}/src", - "outDir": "${configDir}/out" + "paths": { + "@cursorless/cheatsheet": ["packages/cheatsheet/src/index.ts"], + "@cursorless/common": ["packages/common/src/index.ts"], + "@cursorless/cursorless-cheatsheet": [ + "packages/cursorless-cheatsheet/src/index.ts" + ], + "@cursorless/cursorless-engine": [ + "packages/cursorless-engine/src/index.ts" + ], + "@cursorless/cursorless-everywhere-talon-core": [ + "packages/cursorless-everywhere-talon-core/src/index.ts" + ], + "@cursorless/cursorless-tutorial": [ + "packages/cursorless-tutorial/src/index.ts" + ], + "@cursorless/neovim-common": ["packages/neovim-common/src/index.ts"], + "@cursorless/neovim-registry": ["packages/neovim-registry/src/index.ts"], + "@cursorless/node-common": ["packages/node-common/src/index.ts"], + "@cursorless/sentence-parser": ["packages/sentence-parser/src/index.ts"], + "@cursorless/test-case-recorder": [ + "packages/test-case-recorder/src/index.ts" + ], + "@cursorless/vscode-common": ["packages/vscode-common/src/index.ts"] + } } } From 7f38816aedc2f592c4931e67ec2acb4ef24e8eb7 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Mon, 16 Mar 2026 14:29:52 +0100 Subject: [PATCH 02/37] Type fixes --- packages/common/src/util/uniqWithHash.ts | 2 +- .../generateSpokenForm.test.ts | 8 ++++-- .../src/test/spokenForms.talon.test.ts | 4 ++- .../src/testUtil/TalonRepl.ts | 2 +- .../util/allocateHats/getDisplayLineMap.ts | 25 +++++++------------ .../CursorlessCommandComponentParser.ts | 3 ++- .../src/suite/breakpoints.vscode.test.ts | 12 ++++++--- .../crossCellsSetSelection.vscode.test.ts | 2 +- .../intraCellSetSelection.vscode.test.ts | 6 +++-- .../src/FileSystemTutorialContentProvider.ts | 7 ++++-- packages/node-common/src/walkAsync.ts | 3 ++- packages/node-common/src/walkSync.ts | 5 ++-- packages/test-case-recorder/src/TestCase.ts | 4 +-- .../src/launchNeovimAndRunTests.ts | 2 +- 14 files changed, 49 insertions(+), 36 deletions(-) diff --git a/packages/common/src/util/uniqWithHash.ts b/packages/common/src/util/uniqWithHash.ts index 5e01782395..5233f041cc 100644 --- a/packages/common/src/util/uniqWithHash.ts +++ b/packages/common/src/util/uniqWithHash.ts @@ -51,7 +51,7 @@ export function uniqWithHash( // For hash collisions, uniq the items, // letting uniqWith provide correct semantics. needsUniq.forEach((key) => { - hashToItems.set(key, uniqWith(hashToItems.get(key), isEqual)); + hashToItems.set(key, uniqWith(hashToItems.get(key) ?? [], isEqual)); }); // To preserve order, step through the original items diff --git a/packages/cursorless-engine/src/generateSpokenForm/generateSpokenForm.test.ts b/packages/cursorless-engine/src/generateSpokenForm/generateSpokenForm.test.ts index ee702a71cb..06871ee4f1 100644 --- a/packages/cursorless-engine/src/generateSpokenForm/generateSpokenForm.test.ts +++ b/packages/cursorless-engine/src/generateSpokenForm/generateSpokenForm.test.ts @@ -50,7 +50,9 @@ suite("Generate spoken forms", () => { regex: "foo", }); - assert(spokenForm.type === "success"); + if (spokenForm.type !== "success") { + assert.fail("Expected spoken form generation to succeed"); + } assert.equal(spokenForm.spokenForms, "bar"); }); }); @@ -75,7 +77,9 @@ async function runTest(file: string) { const hatMapSpokenForm = generator.processCommand( getHatMapCommand(fixture.marksToCheck), ); - assert(hatMapSpokenForm.type === "success"); + if (hatMapSpokenForm.type !== "success") { + assert.fail("Expected hat map spoken form generation to succeed"); + } assert(hatMapSpokenForm.spokenForms.length === 1); generatedSpokenForm.spokenForms[0] += " " + hatMapSpokenForm.spokenForms[0]; } diff --git a/packages/cursorless-engine/src/test/spokenForms.talon.test.ts b/packages/cursorless-engine/src/test/spokenForms.talon.test.ts index 23b2829832..8abcff1884 100644 --- a/packages/cursorless-engine/src/test/spokenForms.talon.test.ts +++ b/packages/cursorless-engine/src/test/spokenForms.talon.test.ts @@ -63,7 +63,9 @@ async function runRecordedFixture(repl: TalonRepl, file: string) { commands.push(getHatMapCommand(fixture.marksToCheck)); } - assert(fixture.command.spokenForm != null); + if (fixture.command.spokenForm == null) { + assert.fail("Expected spoken form to be defined"); + } await runTest(repl, fixture.command.spokenForm, commands); } diff --git a/packages/cursorless-engine/src/testUtil/TalonRepl.ts b/packages/cursorless-engine/src/testUtil/TalonRepl.ts index 03f2727235..2a1e69e111 100644 --- a/packages/cursorless-engine/src/testUtil/TalonRepl.ts +++ b/packages/cursorless-engine/src/testUtil/TalonRepl.ts @@ -19,7 +19,7 @@ export class TalonRepl { const path = getReplPath(); this.child = childProcess.spawn(path, { shell: true }); - if (!this.child.stdin) { + if (this.child?.stdin == null) { reject("stdin is null"); return; } diff --git a/packages/cursorless-engine/src/util/allocateHats/getDisplayLineMap.ts b/packages/cursorless-engine/src/util/allocateHats/getDisplayLineMap.ts index e6692a7abb..bf55100370 100644 --- a/packages/cursorless-engine/src/util/allocateHats/getDisplayLineMap.ts +++ b/packages/cursorless-engine/src/util/allocateHats/getDisplayLineMap.ts @@ -1,5 +1,5 @@ import type { TextEditor } from "@cursorless/common"; -import { concat, flatten, flow, range, uniq } from "lodash-es"; +import { range, uniq } from "lodash-es"; /** * Returns a map from line numbers in the file to display lines, which skip @@ -12,19 +12,12 @@ export function getDisplayLineMap( editor: TextEditor, extraLines: number[] = [], ): Map { - return new Map( - flow( - flatten, - uniq, - )( - concat( - [extraLines], - editor.visibleRanges.map((visibleRange) => - range(visibleRange.start.line, visibleRange.end.line + 1), - ), - ), - ) - .sort((a, b) => a - b) - .map((value, index) => [value, index]), - ); + const lines = uniq([ + ...extraLines, + ...editor.visibleRanges.flatMap((visibleRange) => + range(visibleRange.start.line, visibleRange.end.line + 1), + ), + ]).sort((a, b) => a - b); + + return new Map(lines.map((value, index) => [value, index])); } diff --git a/packages/cursorless-tutorial/src/stepComponentParsers/CursorlessCommandComponentParser.ts b/packages/cursorless-tutorial/src/stepComponentParsers/CursorlessCommandComponentParser.ts index d4fc10599a..0a5b28859f 100644 --- a/packages/cursorless-tutorial/src/stepComponentParsers/CursorlessCommandComponentParser.ts +++ b/packages/cursorless-tutorial/src/stepComponentParsers/CursorlessCommandComponentParser.ts @@ -115,8 +115,9 @@ function substituteMissingHats( // Update the hats in the initial state snapshot if (initialState.marks != null) { + const { marks } = initialState; initialState = produce(initialState, (draft) => { - draft.marks = mapKeys(draft.marks, (_value, key) => { + draft.marks = mapKeys(marks, (_value, key) => { const { hatStyle, character } = splitKey(key); if (enabledHatStyles[hatStyle] === undefined) { return getKey(Object.keys(enabledHatStyles)[0], character); diff --git a/packages/cursorless-vscode-e2e/src/suite/breakpoints.vscode.test.ts b/packages/cursorless-vscode-e2e/src/suite/breakpoints.vscode.test.ts index dc2b319d74..c8db5f815d 100644 --- a/packages/cursorless-vscode-e2e/src/suite/breakpoints.vscode.test.ts +++ b/packages/cursorless-vscode-e2e/src/suite/breakpoints.vscode.test.ts @@ -34,8 +34,10 @@ async function breakpointAdd() { const breakpoints = vscode.debug.breakpoints; assert.deepStrictEqual(breakpoints.length, 1); - assert.ok(breakpoints[0] instanceof vscode.SourceBreakpoint); const breakpoint = breakpoints[0]; + if (!(breakpoint instanceof vscode.SourceBreakpoint)) { + assert.fail("Expected breakpoint to be a SourceBreakpoint"); + } assert.ok(breakpoint.location.range.isEqual(new vscode.Range(0, 0, 0, 0))); } @@ -47,8 +49,10 @@ async function breakpointTokenAdd() { const breakpoints = vscode.debug.breakpoints; assert.deepStrictEqual(breakpoints.length, 1); - assert.ok(breakpoints[0] instanceof vscode.SourceBreakpoint); const breakpoint = breakpoints[0]; + if (!(breakpoint instanceof vscode.SourceBreakpoint)) { + assert.fail("Expected breakpoint to be a SourceBreakpoint"); + } assert.ok(breakpoint.location.range.isEqual(new vscode.Range(0, 2, 0, 7))); } @@ -90,8 +94,10 @@ async function breakpointTokenRemove() { const breakpoints = vscode.debug.breakpoints; assert.deepStrictEqual(breakpoints.length, 1); - assert.ok(breakpoints[0] instanceof vscode.SourceBreakpoint); const breakpoint = breakpoints[0]; + if (!(breakpoint instanceof vscode.SourceBreakpoint)) { + assert.fail("Expected breakpoint to be a SourceBreakpoint"); + } assert.ok(breakpoint.location.range.isEqual(new vscode.Range(0, 0, 0, 0))); } diff --git a/packages/cursorless-vscode-e2e/src/suite/crossCellsSetSelection.vscode.test.ts b/packages/cursorless-vscode-e2e/src/suite/crossCellsSetSelection.vscode.test.ts index db3b8e4781..c19b900683 100644 --- a/packages/cursorless-vscode-e2e/src/suite/crossCellsSetSelection.vscode.test.ts +++ b/packages/cursorless-vscode-e2e/src/suite/crossCellsSetSelection.vscode.test.ts @@ -48,7 +48,7 @@ async function runTest() { const editor = window.activeTextEditor; if (editor == null) { - assert(false, "No editor was focused"); + assert.fail("No editor was focused"); } assert.deepStrictEqual(editor.document.getText(editor.selection), "world"); diff --git a/packages/cursorless-vscode-e2e/src/suite/intraCellSetSelection.vscode.test.ts b/packages/cursorless-vscode-e2e/src/suite/intraCellSetSelection.vscode.test.ts index ae98c1c1ee..1f0a976383 100644 --- a/packages/cursorless-vscode-e2e/src/suite/intraCellSetSelection.vscode.test.ts +++ b/packages/cursorless-vscode-e2e/src/suite/intraCellSetSelection.vscode.test.ts @@ -31,7 +31,9 @@ async function runTest() { ); }); - assert(targetHat != null, 'Expected a default hat for "world" in the cell'); + if (targetHat == null) { + assert.fail('Expected a default hat for "world" in the cell'); + } const { hatStyle, character } = splitKey(targetHat[0]); await runCursorlessCommand({ @@ -53,7 +55,7 @@ async function runTest() { const editor = window.activeTextEditor; if (editor == null) { - assert(false, "No editor was focused"); + assert.fail("No editor was focused"); } assert.deepStrictEqual(editor.document.getText(editor.selection), "world"); diff --git a/packages/node-common/src/FileSystemTutorialContentProvider.ts b/packages/node-common/src/FileSystemTutorialContentProvider.ts index d62eb39c77..c9d5325e88 100644 --- a/packages/node-common/src/FileSystemTutorialContentProvider.ts +++ b/packages/node-common/src/FileSystemTutorialContentProvider.ts @@ -3,6 +3,7 @@ import type { TutorialContentProvider, TutorialId, } from "@cursorless/common"; +import type { Dirent } from "node:fs"; import { readFile, readdir } from "node:fs/promises"; import path from "path"; import { loadFixture } from "./loadFixture"; @@ -21,8 +22,10 @@ export class FileSystemTutorialContentProvider implements TutorialContentProvide return await Promise.all( tutorialDirs - .filter((dirent) => dirent.isDirectory()) - .map((dirent) => this.loadTutorialScript(dirent.name as TutorialId)), + .filter((dirent: Dirent) => dirent.isDirectory()) + .map((dirent: Dirent) => + this.loadTutorialScript(dirent.name as TutorialId), + ), ); } diff --git a/packages/node-common/src/walkAsync.ts b/packages/node-common/src/walkAsync.ts index bd7abff7bf..422ec62ba7 100644 --- a/packages/node-common/src/walkAsync.ts +++ b/packages/node-common/src/walkAsync.ts @@ -1,3 +1,4 @@ +import type { Dirent } from "node:fs"; import * as path from "path"; import { readdir } from "fs/promises"; import { flatten } from "lodash-es"; @@ -17,7 +18,7 @@ export const walkFiles = async ( const files = flatten( await Promise.all( - dirEntries.map(async (dirent) => { + dirEntries.map(async (dirent: Dirent) => { const filePath = path.join(dir, dirent.name); return dirent.isDirectory() ? await walkFiles(filePath) : [filePath]; }), diff --git a/packages/node-common/src/walkSync.ts b/packages/node-common/src/walkSync.ts index c5058e8869..3439d8c01c 100644 --- a/packages/node-common/src/walkSync.ts +++ b/packages/node-common/src/walkSync.ts @@ -1,3 +1,4 @@ +import type { Dirent } from "node:fs"; import * as path from "path"; import { readdirSync } from "fs"; @@ -10,7 +11,7 @@ import { readdirSync } from "fs"; */ export const walkFilesSync = (dir: string): string[] => { let filelist: string[] = []; - readdirSync(dir, { withFileTypes: true }).forEach((dirent) => { + readdirSync(dir, { withFileTypes: true }).forEach((dirent: Dirent) => { const filePath = path.join(dir, dirent.name); if (dirent.isDirectory()) { filelist = filelist.concat(walkFilesSync(filePath)); @@ -31,7 +32,7 @@ export const walkDirsSync = (dir: string): string[] => { // Inner function returns absolute paths const walkDirsSyncInner = (dir: string): string[] => { let dirlist: string[] = []; - readdirSync(dir, { withFileTypes: true }).forEach((dirent) => { + readdirSync(dir, { withFileTypes: true }).forEach((dirent: Dirent) => { if (dirent.isDirectory()) { const dirPath = path.join(dir, dirent.name); dirlist.push(dirPath); diff --git a/packages/test-case-recorder/src/TestCase.ts b/packages/test-case-recorder/src/TestCase.ts index e88171e678..fecd8c8169 100644 --- a/packages/test-case-recorder/src/TestCase.ts +++ b/packages/test-case-recorder/src/TestCase.ts @@ -210,12 +210,12 @@ export class TestCase { const keys = this.targetKeys.concat(marksToCheck); this.initialState!.marks = pick( - this.initialState!.marks, + this.initialState!.marks!, keys, ) as SerializedMarks; this.finalState!.marks = pick( - this.finalState!.marks, + this.finalState!.marks!, keys, ) as SerializedMarks; diff --git a/packages/test-harness/src/launchNeovimAndRunTests.ts b/packages/test-harness/src/launchNeovimAndRunTests.ts index 90ac2fc75e..893be8bf3b 100644 --- a/packages/test-harness/src/launchNeovimAndRunTests.ts +++ b/packages/test-harness/src/launchNeovimAndRunTests.ts @@ -107,7 +107,7 @@ export async function launchNeovimAndRunTests() { // read log file live and print to console // https://stackoverflow.com/questions/26788504/using-node-js-to-read-a-live-file-line-by-line let done = false; - let tailTest; + let tailTest: Tail | undefined; try { tailTest = new Tail(logName, { fromBeginning: true, From 03e75bd592ed72c59ae9cf84d09453ed3f91eec2 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Mon, 16 Mar 2026 15:06:25 +0100 Subject: [PATCH 03/37] Rename --- packages/common/tsconfig.json | 3 +-- .../cursorless-everywhere-talon-core/src/polyfill.ts | 10 ++++++++++ .../src/types/{Global.d.ts => a.ts} | 7 +++++++ .../cursorless-everywhere-talon-core/tsconfig.json | 1 + packages/cursorless-everywhere-talon/tsconfig.json | 9 ++++++--- 5 files changed, 25 insertions(+), 5 deletions(-) rename packages/cursorless-everywhere-talon-core/src/types/{Global.d.ts => a.ts} (67%) diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json index 984fd3bbe5..d4fbbd0828 100644 --- a/packages/common/tsconfig.json +++ b/packages/common/tsconfig.json @@ -1,5 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"], - "references": [] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-everywhere-talon-core/src/polyfill.ts b/packages/cursorless-everywhere-talon-core/src/polyfill.ts index a87c308e48..5c2de28855 100644 --- a/packages/cursorless-everywhere-talon-core/src/polyfill.ts +++ b/packages/cursorless-everywhere-talon-core/src/polyfill.ts @@ -7,6 +7,12 @@ if (global.process == null) { }; } +if (global.performance == null) { + global.performance = { + now: () => Date.now(), + }; +} + // Allows us to use `console.*` with quickjs if (typeof print !== "undefined") { global.console = { @@ -23,3 +29,7 @@ if (typeof print !== "undefined") { global.setTimeout = (callback: () => void, _delay: number) => { callback(); }; + +global.clearTimeout = (_timeoutId: unknown) => { + // no-op +}; diff --git a/packages/cursorless-everywhere-talon-core/src/types/Global.d.ts b/packages/cursorless-everywhere-talon-core/src/types/a.ts similarity index 67% rename from packages/cursorless-everywhere-talon-core/src/types/Global.d.ts rename to packages/cursorless-everywhere-talon-core/src/types/a.ts index 9c682c6f7c..24f6189680 100644 --- a/packages/cursorless-everywhere-talon-core/src/types/Global.d.ts +++ b/packages/cursorless-everywhere-talon-core/src/types/a.ts @@ -10,3 +10,10 @@ declare namespace console { function warn(...objs: any): void; function error(...objs: any): void; } + +declare namespace performance { + function now(): number; +} + +declare function setTimeout(callback: () => void, ms: number): void; +declare function clearTimeout(timeoutId: unknown): void; diff --git a/packages/cursorless-everywhere-talon-core/tsconfig.json b/packages/cursorless-everywhere-talon-core/tsconfig.json index 4fa263afd0..58ce95ff23 100644 --- a/packages/cursorless-everywhere-talon-core/tsconfig.json +++ b/packages/cursorless-everywhere-talon-core/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { + "skipLibCheck": true, "typeRoots": ["src/types", "node_modules/@types"] }, "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] diff --git a/packages/cursorless-everywhere-talon/tsconfig.json b/packages/cursorless-everywhere-talon/tsconfig.json index 2e00312d72..897ed4f8be 100644 --- a/packages/cursorless-everywhere-talon/tsconfig.json +++ b/packages/cursorless-everywhere-talon/tsconfig.json @@ -1,8 +1,11 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "noEmit": true, - "typeRoots": ["src/types", "node_modules/@types"] + "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": [ + "src/**/*.ts", + "src/**/*.d.ts", + "../cursorless-everywhere-talon-core/src/types/**/*.d.ts" + ] } From 5ae20579c6d03fd392998889350d18dfdde3d3ba Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Mon, 16 Mar 2026 15:59:14 +0100 Subject: [PATCH 04/37] tsconfig --- packages/cheatsheet-local/tsconfig.json | 7 +------ packages/cheatsheet/tsconfig.json | 7 +------ packages/common/tsconfig.json | 2 +- packages/cursorless-cheatsheet/tsconfig.json | 2 +- packages/cursorless-engine/tsconfig.json | 2 +- .../src/extension.ts | 2 +- .../src/ide/TalonJsClipboard.ts | 2 +- .../src/ide/TalonJsIDE.ts | 2 +- .../src/ide/TalonJsMessages.ts | 2 +- .../src/ide/flashRanges.ts | 2 +- .../src/index.ts | 2 +- .../src/registerCommands.ts | 2 +- .../src/types/{a.ts => global.d.ts} | 2 -- .../src/types/quickjs.d.ts | 1 + .../src/types/talon.d.ts | 11 ++++++++++ .../src/types/{talon.types.ts => talon.ts} | 2 +- .../tsconfig.json | 2 +- .../src/quickjsTest.ts | 2 +- .../src/recorded.talonjs.test.ts | 2 +- .../src/talonMock.ts | 4 +--- .../tsconfig.json | 6 +++++- .../src/types/talon.d.ts | 19 ----------------- .../cursorless-everywhere-talon/tsconfig.json | 1 - packages/cursorless-neovim-e2e/tsconfig.json | 2 +- packages/cursorless-neovim/tsconfig.json | 2 +- packages/cursorless-org-docs/tsconfig.json | 7 +------ packages/cursorless-org/tsconfig.json | 7 +------ packages/cursorless-tutorial/tsconfig.json | 2 +- packages/cursorless-vscode-e2e/tsconfig.json | 2 +- .../tsconfig.json | 7 +------ packages/cursorless-vscode/tsconfig.json | 2 +- packages/meta-updater/tsconfig.json | 2 +- packages/neovim-common/tsconfig.json | 2 +- packages/neovim-registry/tsconfig.json | 2 +- packages/node-common/tsconfig.json | 2 +- packages/sentence-parser/tsconfig.json | 2 +- packages/test-case-recorder/tsconfig.json | 2 +- packages/test-harness/tsconfig.json | 2 +- packages/vscode-common/tsconfig.json | 2 +- typings/object.d.ts | 21 ------------------- 40 files changed, 50 insertions(+), 104 deletions(-) rename packages/cursorless-everywhere-talon-core/src/types/{a.ts => global.d.ts} (92%) create mode 100644 packages/cursorless-everywhere-talon-core/src/types/quickjs.d.ts create mode 100644 packages/cursorless-everywhere-talon-core/src/types/talon.d.ts rename packages/cursorless-everywhere-talon-core/src/types/{talon.types.ts => talon.ts} (98%) delete mode 100644 packages/cursorless-everywhere-talon/src/types/talon.d.ts delete mode 100644 typings/object.d.ts diff --git a/packages/cheatsheet-local/tsconfig.json b/packages/cheatsheet-local/tsconfig.json index 9c70cf58cb..53fe812fc7 100644 --- a/packages/cheatsheet-local/tsconfig.json +++ b/packages/cheatsheet-local/tsconfig.json @@ -13,10 +13,5 @@ "ts-node": { "esm": true }, - "include": [ - "src/**/*.ts", - "src/**/*.json", - "src/**/*.tsx", - "../../typings/**/*.d.ts" - ] + "include": ["src/**/*.ts", "src/**/*.tsx"] } diff --git a/packages/cheatsheet/tsconfig.json b/packages/cheatsheet/tsconfig.json index 8c2cb0d195..f3a4d35314 100644 --- a/packages/cheatsheet/tsconfig.json +++ b/packages/cheatsheet/tsconfig.json @@ -8,10 +8,5 @@ "esModuleInterop": true, "skipLibCheck": true }, - "include": [ - "src/**/*.ts", - "src/**/*.json", - "src/**/*.tsx", - "../../typings/**/*.d.ts" - ] + "include": ["src/**/*.ts", "src/**/*.tsx"] } diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json index d4fbbd0828..322f879a6a 100644 --- a/packages/common/tsconfig.json +++ b/packages/common/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-cheatsheet/tsconfig.json b/packages/cursorless-cheatsheet/tsconfig.json index d4fbbd0828..322f879a6a 100644 --- a/packages/cursorless-cheatsheet/tsconfig.json +++ b/packages/cursorless-cheatsheet/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-engine/tsconfig.json b/packages/cursorless-engine/tsconfig.json index d4fbbd0828..322f879a6a 100644 --- a/packages/cursorless-engine/tsconfig.json +++ b/packages/cursorless-engine/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-everywhere-talon-core/src/extension.ts b/packages/cursorless-everywhere-talon-core/src/extension.ts index cba24b63bf..6f25e17119 100644 --- a/packages/cursorless-everywhere-talon-core/src/extension.ts +++ b/packages/cursorless-everywhere-talon-core/src/extension.ts @@ -11,7 +11,7 @@ import { constructTestHelpers } from "./constructTestHelpers"; import { TalonJsIDE } from "./ide/TalonJsIDE"; import { TalonJsTestHats } from "./ide/TalonJsTestHats"; import { registerCommands } from "./registerCommands"; -import type { Talon } from "./types/talon.types"; +import type { Talon } from "./types/talon"; import type { ActivateReturnValue } from "./types/types"; export async function activate( diff --git a/packages/cursorless-everywhere-talon-core/src/ide/TalonJsClipboard.ts b/packages/cursorless-everywhere-talon-core/src/ide/TalonJsClipboard.ts index 2181328fab..35ad874172 100644 --- a/packages/cursorless-everywhere-talon-core/src/ide/TalonJsClipboard.ts +++ b/packages/cursorless-everywhere-talon-core/src/ide/TalonJsClipboard.ts @@ -1,5 +1,5 @@ import type { Clipboard } from "@cursorless/common"; -import type { Talon } from "../types/talon.types"; +import type { Talon } from "../types/talon"; export class TalonJsClipboard implements Clipboard { constructor(private talon: Talon) {} diff --git a/packages/cursorless-everywhere-talon-core/src/ide/TalonJsIDE.ts b/packages/cursorless-everywhere-talon-core/src/ide/TalonJsIDE.ts index 9fb4ba49f5..eac659d459 100644 --- a/packages/cursorless-everywhere-talon-core/src/ide/TalonJsIDE.ts +++ b/packages/cursorless-everywhere-talon-core/src/ide/TalonJsIDE.ts @@ -24,7 +24,7 @@ import type { } from "@cursorless/common"; import { InMemoryTextEditor, Notifier } from "@cursorless/common"; import { pull } from "lodash-es"; -import type { Talon } from "../types/talon.types"; +import type { Talon } from "../types/talon"; import type { EditorEdit, EditorState } from "../types/types"; import { flashRanges } from "./flashRanges"; import { TalonJsCapabilities } from "./TalonJsCapabilities"; diff --git a/packages/cursorless-everywhere-talon-core/src/ide/TalonJsMessages.ts b/packages/cursorless-everywhere-talon-core/src/ide/TalonJsMessages.ts index 0d1d7a2d66..5f555edd88 100644 --- a/packages/cursorless-everywhere-talon-core/src/ide/TalonJsMessages.ts +++ b/packages/cursorless-everywhere-talon-core/src/ide/TalonJsMessages.ts @@ -1,6 +1,6 @@ import type { Messages } from "@cursorless/common"; import { MessageType } from "@cursorless/common"; -import type { Talon } from "../types/talon.types"; +import type { Talon } from "../types/talon"; export class TalonJsMessages implements Messages { constructor(private talon: Talon) {} diff --git a/packages/cursorless-everywhere-talon-core/src/ide/flashRanges.ts b/packages/cursorless-everywhere-talon-core/src/ide/flashRanges.ts index d9d47c635f..81f10574d8 100644 --- a/packages/cursorless-everywhere-talon-core/src/ide/flashRanges.ts +++ b/packages/cursorless-everywhere-talon-core/src/ide/flashRanges.ts @@ -1,5 +1,5 @@ import type { FlashDescriptor, RangeOffsets } from "@cursorless/common"; -import type { Talon } from "../types/talon.types"; +import type { Talon } from "../types/talon"; import { toCharacterRangeOffsets } from "./toCharacterRangeOffsets"; export function flashRanges( diff --git a/packages/cursorless-everywhere-talon-core/src/index.ts b/packages/cursorless-everywhere-talon-core/src/index.ts index 8f8b2eab03..3843120999 100644 --- a/packages/cursorless-everywhere-talon-core/src/index.ts +++ b/packages/cursorless-everywhere-talon-core/src/index.ts @@ -1,4 +1,4 @@ export * from "./extension"; export * from "./ide/TalonJsIDE"; -export * from "./types/talon.types"; +export * from "./types/talon"; export * from "./types/types"; diff --git a/packages/cursorless-everywhere-talon-core/src/registerCommands.ts b/packages/cursorless-everywhere-talon-core/src/registerCommands.ts index 0f5e52055b..0824002e43 100644 --- a/packages/cursorless-everywhere-talon-core/src/registerCommands.ts +++ b/packages/cursorless-everywhere-talon-core/src/registerCommands.ts @@ -1,7 +1,7 @@ import { CURSORLESS_COMMAND_ID } from "@cursorless/common"; import type { CommandApi } from "@cursorless/cursorless-engine"; import type { TalonJsIDE } from "./ide/TalonJsIDE"; -import type { Talon } from "./types/talon.types"; +import type { Talon } from "./types/talon"; export function registerCommands( talon: Talon, diff --git a/packages/cursorless-everywhere-talon-core/src/types/a.ts b/packages/cursorless-everywhere-talon-core/src/types/global.d.ts similarity index 92% rename from packages/cursorless-everywhere-talon-core/src/types/a.ts rename to packages/cursorless-everywhere-talon-core/src/types/global.d.ts index 24f6189680..458a1b9269 100644 --- a/packages/cursorless-everywhere-talon-core/src/types/a.ts +++ b/packages/cursorless-everywhere-talon-core/src/types/global.d.ts @@ -2,8 +2,6 @@ // browser so by default console doesn't exist and print is something that // quickjs adds. -declare function print(...objs: any): void; - declare namespace console { function debug(...objs: any): void; function log(...objs: any): void; diff --git a/packages/cursorless-everywhere-talon-core/src/types/quickjs.d.ts b/packages/cursorless-everywhere-talon-core/src/types/quickjs.d.ts new file mode 100644 index 0000000000..3dbbe5b37f --- /dev/null +++ b/packages/cursorless-everywhere-talon-core/src/types/quickjs.d.ts @@ -0,0 +1 @@ +declare function print(...objs: any): void; diff --git a/packages/cursorless-everywhere-talon-core/src/types/talon.d.ts b/packages/cursorless-everywhere-talon-core/src/types/talon.d.ts new file mode 100644 index 0000000000..047812aafe --- /dev/null +++ b/packages/cursorless-everywhere-talon-core/src/types/talon.d.ts @@ -0,0 +1,11 @@ +declare module "talon" { + import type { + TalonActions, + TalonContextConstructor, + TalonSettings, + } from "./talon"; + + export const actions: TalonActions; + export const settings: TalonSettings; + export const Context: TalonContextConstructor; +} diff --git a/packages/cursorless-everywhere-talon-core/src/types/talon.types.ts b/packages/cursorless-everywhere-talon-core/src/types/talon.ts similarity index 98% rename from packages/cursorless-everywhere-talon-core/src/types/talon.types.ts rename to packages/cursorless-everywhere-talon-core/src/types/talon.ts index 65f2d11fd8..eceb2278f8 100644 --- a/packages/cursorless-everywhere-talon-core/src/types/talon.types.ts +++ b/packages/cursorless-everywhere-talon-core/src/types/talon.ts @@ -75,7 +75,7 @@ export interface TalonSettings { ): T | null; } -interface TalonContextConstructor { +export interface TalonContextConstructor { new (): TalonContext; } diff --git a/packages/cursorless-everywhere-talon-core/tsconfig.json b/packages/cursorless-everywhere-talon-core/tsconfig.json index 58ce95ff23..93f735d834 100644 --- a/packages/cursorless-everywhere-talon-core/tsconfig.json +++ b/packages/cursorless-everywhere-talon-core/tsconfig.json @@ -4,5 +4,5 @@ "skipLibCheck": true, "typeRoots": ["src/types", "node_modules/@types"] }, - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts"] } diff --git a/packages/cursorless-everywhere-talon-e2e/src/quickjsTest.ts b/packages/cursorless-everywhere-talon-e2e/src/quickjsTest.ts index 0112ecbf91..1efc34276c 100644 --- a/packages/cursorless-everywhere-talon-e2e/src/quickjsTest.ts +++ b/packages/cursorless-everywhere-talon-e2e/src/quickjsTest.ts @@ -5,7 +5,7 @@ import { } from "@cursorless/common"; import { activate } from "@cursorless/cursorless-everywhere-talon-core"; import * as std from "std"; -import talonMock from "./talonMock"; +import { talonMock } from "./talonMock"; let hasFailed = false; diff --git a/packages/cursorless-everywhere-talon-e2e/src/recorded.talonjs.test.ts b/packages/cursorless-everywhere-talon-e2e/src/recorded.talonjs.test.ts index f20f9a8211..e697bd97fb 100644 --- a/packages/cursorless-everywhere-talon-e2e/src/recorded.talonjs.test.ts +++ b/packages/cursorless-everywhere-talon-e2e/src/recorded.talonjs.test.ts @@ -15,7 +15,7 @@ import { } from "@cursorless/node-common"; import { constructTestHelpers } from "./constructTestHelpers"; import { endToEndTestSetup } from "./endToEndTestSetUp"; -import talonMock from "./talonMock"; +import { talonMock } from "./talonMock"; suite("TalonJS: Recorded test cases", async function () { const ide = await activate(talonMock, "test"); diff --git a/packages/cursorless-everywhere-talon-e2e/src/talonMock.ts b/packages/cursorless-everywhere-talon-e2e/src/talonMock.ts index 459c719381..5ac021dbef 100644 --- a/packages/cursorless-everywhere-talon-e2e/src/talonMock.ts +++ b/packages/cursorless-everywhere-talon-e2e/src/talonMock.ts @@ -99,11 +99,9 @@ interface TalonInTests extends Talon { getTestHelpers(): TalonTestHelpers; } -const talonMock: TalonInTests = { +export const talonMock: TalonInTests = { actions, settings, ["Context"]: Context, getTestHelpers, }; - -export default talonMock; diff --git a/packages/cursorless-everywhere-talon-e2e/tsconfig.json b/packages/cursorless-everywhere-talon-e2e/tsconfig.json index d4fbbd0828..f28376d75a 100644 --- a/packages/cursorless-everywhere-talon-e2e/tsconfig.json +++ b/packages/cursorless-everywhere-talon-e2e/tsconfig.json @@ -1,4 +1,8 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": [ + "src/**/*.ts", + "../../typings/**/*.d.ts", + "../cursorless-everywhere-talon-core/src/types/quickjs.d.ts" + ] } diff --git a/packages/cursorless-everywhere-talon/src/types/talon.d.ts b/packages/cursorless-everywhere-talon/src/types/talon.d.ts deleted file mode 100644 index 65d867db5e..0000000000 --- a/packages/cursorless-everywhere-talon/src/types/talon.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { - TalonActions, - TalonContext, - TalonContextActions, - TalonSettings, -} from "@cursorless/cursorless-everywhere-talon-core"; - -declare module "talon" { - const actions: TalonActions; - const settings: TalonSettings; - - class Context implements TalonContext { - matches: string; - tags: string[]; - settings: Record; - lists: Record | string[]>; - action_class(name: "user", actions: TalonContextActions): void; - } -} diff --git a/packages/cursorless-everywhere-talon/tsconfig.json b/packages/cursorless-everywhere-talon/tsconfig.json index 897ed4f8be..3c4c1fb0dd 100644 --- a/packages/cursorless-everywhere-talon/tsconfig.json +++ b/packages/cursorless-everywhere-talon/tsconfig.json @@ -5,7 +5,6 @@ }, "include": [ "src/**/*.ts", - "src/**/*.d.ts", "../cursorless-everywhere-talon-core/src/types/**/*.d.ts" ] } diff --git a/packages/cursorless-neovim-e2e/tsconfig.json b/packages/cursorless-neovim-e2e/tsconfig.json index d4fbbd0828..322f879a6a 100644 --- a/packages/cursorless-neovim-e2e/tsconfig.json +++ b/packages/cursorless-neovim-e2e/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-neovim/tsconfig.json b/packages/cursorless-neovim/tsconfig.json index d4fbbd0828..322f879a6a 100644 --- a/packages/cursorless-neovim/tsconfig.json +++ b/packages/cursorless-neovim/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-org-docs/tsconfig.json b/packages/cursorless-org-docs/tsconfig.json index a50ba36d44..32f87fe7c7 100644 --- a/packages/cursorless-org-docs/tsconfig.json +++ b/packages/cursorless-org-docs/tsconfig.json @@ -6,11 +6,6 @@ "jsx": "react", "esModuleInterop": true }, - "include": [ - "src/**/*.ts", - "src/**/*.json", - "src/**/*.tsx", - "../../typings/**/*.d.ts" - ], + "include": ["src/**/*.ts", "src/**/*.tsx"], "exclude": ["node_modules"] } diff --git a/packages/cursorless-org/tsconfig.json b/packages/cursorless-org/tsconfig.json index 4e327eddf3..cf8f5dd125 100644 --- a/packages/cursorless-org/tsconfig.json +++ b/packages/cursorless-org/tsconfig.json @@ -12,11 +12,6 @@ "isolatedModules": true, "incremental": true }, - "include": [ - "src/**/*.ts", - "src/**/*.json", - "src/**/*.tsx", - "../../typings/**/*.d.ts" - ], + "include": ["src/**/*.ts", "src/**/*.tsx"], "exclude": ["node_modules"] } diff --git a/packages/cursorless-tutorial/tsconfig.json b/packages/cursorless-tutorial/tsconfig.json index d4fbbd0828..0ce6c6e9fc 100644 --- a/packages/cursorless-tutorial/tsconfig.json +++ b/packages/cursorless-tutorial/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "src/**/*.tsx", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-vscode-e2e/tsconfig.json b/packages/cursorless-vscode-e2e/tsconfig.json index d4fbbd0828..322f879a6a 100644 --- a/packages/cursorless-vscode-e2e/tsconfig.json +++ b/packages/cursorless-vscode-e2e/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-vscode-tutorial-webview/tsconfig.json b/packages/cursorless-vscode-tutorial-webview/tsconfig.json index 947756b576..4dac8026fe 100644 --- a/packages/cursorless-vscode-tutorial-webview/tsconfig.json +++ b/packages/cursorless-vscode-tutorial-webview/tsconfig.json @@ -5,10 +5,5 @@ "jsx": "react-jsx", "jsxImportSource": "preact" }, - "include": [ - "src/**/*.ts", - "src/**/*.json", - "src/**/*.tsx", - "../../typings/**/*.d.ts" - ] + "include": ["src/**/*.ts", "src/**/*.tsx", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-vscode/tsconfig.json b/packages/cursorless-vscode/tsconfig.json index d4fbbd0828..322f879a6a 100644 --- a/packages/cursorless-vscode/tsconfig.json +++ b/packages/cursorless-vscode/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] } diff --git a/packages/meta-updater/tsconfig.json b/packages/meta-updater/tsconfig.json index 9f02581c94..449785ea1d 100644 --- a/packages/meta-updater/tsconfig.json +++ b/packages/meta-updater/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "esModuleInterop": true }, - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] } diff --git a/packages/neovim-common/tsconfig.json b/packages/neovim-common/tsconfig.json index d4fbbd0828..322f879a6a 100644 --- a/packages/neovim-common/tsconfig.json +++ b/packages/neovim-common/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] } diff --git a/packages/neovim-registry/tsconfig.json b/packages/neovim-registry/tsconfig.json index d4fbbd0828..9e25e6ece9 100644 --- a/packages/neovim-registry/tsconfig.json +++ b/packages/neovim-registry/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts"] } diff --git a/packages/node-common/tsconfig.json b/packages/node-common/tsconfig.json index d4fbbd0828..322f879a6a 100644 --- a/packages/node-common/tsconfig.json +++ b/packages/node-common/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] } diff --git a/packages/sentence-parser/tsconfig.json b/packages/sentence-parser/tsconfig.json index d4fbbd0828..9e25e6ece9 100644 --- a/packages/sentence-parser/tsconfig.json +++ b/packages/sentence-parser/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts"] } diff --git a/packages/test-case-recorder/tsconfig.json b/packages/test-case-recorder/tsconfig.json index d4fbbd0828..322f879a6a 100644 --- a/packages/test-case-recorder/tsconfig.json +++ b/packages/test-case-recorder/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] } diff --git a/packages/test-harness/tsconfig.json b/packages/test-harness/tsconfig.json index d4fbbd0828..322f879a6a 100644 --- a/packages/test-harness/tsconfig.json +++ b/packages/test-harness/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] } diff --git a/packages/vscode-common/tsconfig.json b/packages/vscode-common/tsconfig.json index d4fbbd0828..322f879a6a 100644 --- a/packages/vscode-common/tsconfig.json +++ b/packages/vscode-common/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] } diff --git a/typings/object.d.ts b/typings/object.d.ts deleted file mode 100644 index 3ca52f5b38..0000000000 --- a/typings/object.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -interface ObjectConstructor { - fromEntries< - V extends PropertyKey, - T extends [readonly [V, any]] | Array, - >( - entries: T, - ): Flatten>>; -} - -// From https://github.com/microsoft/TypeScript/issues/35745#issuecomment-566932289 -type UnionToIntersection = (T extends T ? (p: T) => void : never) extends ( - p: infer U, -) => void - ? U - : never; -type FromEntries = T extends T - ? Record - : never; -type Flatten = object & { - [P in keyof T]: T[P]; -}; From 5fce41c90bc657dae274602ba826721dcf3da67d Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Mon, 16 Mar 2026 16:13:12 +0100 Subject: [PATCH 05/37] tsconfig --- packages/cheatsheet-local/tsconfig.json | 7 ++- packages/cheatsheet/tsconfig.json | 7 ++- packages/common/tsconfig.json | 2 +- packages/cursorless-cheatsheet/tsconfig.json | 2 +- packages/cursorless-engine/tsconfig.json | 2 +- .../tsconfig.json | 2 +- .../tsconfig.json | 1 + .../cursorless-everywhere-talon/tsconfig.json | 2 + packages/cursorless-neovim-e2e/tsconfig.json | 2 +- packages/cursorless-neovim/tsconfig.json | 2 +- packages/cursorless-org-docs/tsconfig.json | 7 ++- packages/cursorless-org/tsconfig.json | 7 ++- packages/cursorless-tutorial/tsconfig.json | 2 +- packages/cursorless-vscode-e2e/tsconfig.json | 2 +- .../tsconfig.json | 7 ++- packages/cursorless-vscode/tsconfig.json | 2 +- packages/meta-updater/package.json | 1 - packages/meta-updater/src/updateTSConfig.ts | 55 +++---------------- packages/meta-updater/tsconfig.json | 2 +- packages/neovim-common/tsconfig.json | 2 +- packages/neovim-registry/tsconfig.json | 2 +- packages/node-common/tsconfig.json | 2 +- packages/sentence-parser/tsconfig.json | 2 +- packages/test-case-recorder/tsconfig.json | 2 +- packages/test-harness/tsconfig.json | 2 +- packages/vscode-common/tsconfig.json | 2 +- pnpm-lock.yaml | 3 - 27 files changed, 59 insertions(+), 72 deletions(-) diff --git a/packages/cheatsheet-local/tsconfig.json b/packages/cheatsheet-local/tsconfig.json index 53fe812fc7..99383de7d2 100644 --- a/packages/cheatsheet-local/tsconfig.json +++ b/packages/cheatsheet-local/tsconfig.json @@ -13,5 +13,10 @@ "ts-node": { "esm": true }, - "include": ["src/**/*.ts", "src/**/*.tsx"] + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.json", + "../../typings/**/*.d.ts" + ] } diff --git a/packages/cheatsheet/tsconfig.json b/packages/cheatsheet/tsconfig.json index f3a4d35314..6366ded442 100644 --- a/packages/cheatsheet/tsconfig.json +++ b/packages/cheatsheet/tsconfig.json @@ -8,5 +8,10 @@ "esModuleInterop": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.tsx"] + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.json", + "../../typings/**/*.d.ts" + ] } diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json index 322f879a6a..d4fbbd0828 100644 --- a/packages/common/tsconfig.json +++ b/packages/common/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-cheatsheet/tsconfig.json b/packages/cursorless-cheatsheet/tsconfig.json index 322f879a6a..d4fbbd0828 100644 --- a/packages/cursorless-cheatsheet/tsconfig.json +++ b/packages/cursorless-cheatsheet/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-engine/tsconfig.json b/packages/cursorless-engine/tsconfig.json index 322f879a6a..d4fbbd0828 100644 --- a/packages/cursorless-engine/tsconfig.json +++ b/packages/cursorless-engine/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-everywhere-talon-core/tsconfig.json b/packages/cursorless-everywhere-talon-core/tsconfig.json index 93f735d834..58ce95ff23 100644 --- a/packages/cursorless-everywhere-talon-core/tsconfig.json +++ b/packages/cursorless-everywhere-talon-core/tsconfig.json @@ -4,5 +4,5 @@ "skipLibCheck": true, "typeRoots": ["src/types", "node_modules/@types"] }, - "include": ["src/**/*.ts"] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-everywhere-talon-e2e/tsconfig.json b/packages/cursorless-everywhere-talon-e2e/tsconfig.json index f28376d75a..6a4f79a85a 100644 --- a/packages/cursorless-everywhere-talon-e2e/tsconfig.json +++ b/packages/cursorless-everywhere-talon-e2e/tsconfig.json @@ -2,6 +2,7 @@ "extends": "../../tsconfig.base.json", "include": [ "src/**/*.ts", + "src/**/*.json", "../../typings/**/*.d.ts", "../cursorless-everywhere-talon-core/src/types/quickjs.d.ts" ] diff --git a/packages/cursorless-everywhere-talon/tsconfig.json b/packages/cursorless-everywhere-talon/tsconfig.json index 3c4c1fb0dd..2220e96740 100644 --- a/packages/cursorless-everywhere-talon/tsconfig.json +++ b/packages/cursorless-everywhere-talon/tsconfig.json @@ -5,6 +5,8 @@ }, "include": [ "src/**/*.ts", + "src/**/*.json", + "../../typings/**/*.d.ts", "../cursorless-everywhere-talon-core/src/types/**/*.d.ts" ] } diff --git a/packages/cursorless-neovim-e2e/tsconfig.json b/packages/cursorless-neovim-e2e/tsconfig.json index 322f879a6a..d4fbbd0828 100644 --- a/packages/cursorless-neovim-e2e/tsconfig.json +++ b/packages/cursorless-neovim-e2e/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-neovim/tsconfig.json b/packages/cursorless-neovim/tsconfig.json index 322f879a6a..d4fbbd0828 100644 --- a/packages/cursorless-neovim/tsconfig.json +++ b/packages/cursorless-neovim/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-org-docs/tsconfig.json b/packages/cursorless-org-docs/tsconfig.json index 32f87fe7c7..408e5121a9 100644 --- a/packages/cursorless-org-docs/tsconfig.json +++ b/packages/cursorless-org-docs/tsconfig.json @@ -6,6 +6,11 @@ "jsx": "react", "esModuleInterop": true }, - "include": ["src/**/*.ts", "src/**/*.tsx"], + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.json", + "../../typings/**/*.d.ts" + ], "exclude": ["node_modules"] } diff --git a/packages/cursorless-org/tsconfig.json b/packages/cursorless-org/tsconfig.json index cf8f5dd125..321abc6bf0 100644 --- a/packages/cursorless-org/tsconfig.json +++ b/packages/cursorless-org/tsconfig.json @@ -12,6 +12,11 @@ "isolatedModules": true, "incremental": true }, - "include": ["src/**/*.ts", "src/**/*.tsx"], + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.json", + "../../typings/**/*.d.ts" + ], "exclude": ["node_modules"] } diff --git a/packages/cursorless-tutorial/tsconfig.json b/packages/cursorless-tutorial/tsconfig.json index 0ce6c6e9fc..d4fbbd0828 100644 --- a/packages/cursorless-tutorial/tsconfig.json +++ b/packages/cursorless-tutorial/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "src/**/*.tsx", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-vscode-e2e/tsconfig.json b/packages/cursorless-vscode-e2e/tsconfig.json index 322f879a6a..d4fbbd0828 100644 --- a/packages/cursorless-vscode-e2e/tsconfig.json +++ b/packages/cursorless-vscode-e2e/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-vscode-tutorial-webview/tsconfig.json b/packages/cursorless-vscode-tutorial-webview/tsconfig.json index 4dac8026fe..cb21d4300e 100644 --- a/packages/cursorless-vscode-tutorial-webview/tsconfig.json +++ b/packages/cursorless-vscode-tutorial-webview/tsconfig.json @@ -5,5 +5,10 @@ "jsx": "react-jsx", "jsxImportSource": "preact" }, - "include": ["src/**/*.ts", "src/**/*.tsx", "../../typings/**/*.d.ts"] + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.json", + "../../typings/**/*.d.ts" + ] } diff --git a/packages/cursorless-vscode/tsconfig.json b/packages/cursorless-vscode/tsconfig.json index 322f879a6a..d4fbbd0828 100644 --- a/packages/cursorless-vscode/tsconfig.json +++ b/packages/cursorless-vscode/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/meta-updater/package.json b/packages/meta-updater/package.json index 31ac017f5b..4b4006d9a5 100644 --- a/packages/meta-updater/package.json +++ b/packages/meta-updater/package.json @@ -20,7 +20,6 @@ "js-yaml": "^4.1.1", "lodash-es": "^4.17.23", "normalize-path": "^3.0.0", - "path-exists": "^5.0.0", "type-fest": "^5.4.4" } } diff --git a/packages/meta-updater/src/updateTSConfig.ts b/packages/meta-updater/src/updateTSConfig.ts index aa3f75d610..d84924f196 100644 --- a/packages/meta-updater/src/updateTSConfig.ts +++ b/packages/meta-updater/src/updateTSConfig.ts @@ -1,13 +1,11 @@ +import { getLockfileImporterId } from "@pnpm/lockfile-file"; import type { FormatPluginFnOptions } from "@pnpm/meta-updater"; +import { cloneDeep, isEqual, uniq } from "lodash-es"; import normalizePath from "normalize-path"; import * as path from "path"; -import { pathExists } from "path-exists"; -import type { PackageJson, TsConfigJson } from "type-fest"; -import { toPosixPath } from "./toPosixPath"; +import type { TsConfigJson } from "type-fest"; import type { Context } from "./Context"; -import { cloneDeep, isEqual, uniq } from "lodash-es"; -import { readFile } from "fs/promises"; -import { getLockfileImporterId } from "@pnpm/lockfile-file"; +import { toPosixPath } from "./toPosixPath"; /** * Given a tsconfig.json, update it to match our conventions. This function is @@ -56,62 +54,27 @@ export async function updateTSConfig( throw new Error(`No importer found for ${pathFromRootToPackage}`); } - const deps = { - ...lockFilePackageInfo.dependencies, - ...lockFilePackageInfo.devDependencies, - }; - - /** Computed tsconfig.json references based on dependencies. */ - const references = [] as Array<{ path: string }>; - for (const spec of Object.values(deps)) { - if (!spec.startsWith("link:") || spec.length === 5) { - // Only consider references to other packages in monorepo. - continue; - } - const relativePath = spec.slice(5); - if ( - !(await pathExists(path.join(packageDir, relativePath, "tsconfig.json"))) - ) { - throw new Error(`No tsconfig found for ${relativePath}`); - } - if ( - ( - JSON.parse( - await readFile(path.join(packageDir, relativePath, "package.json"), { - encoding: "utf-8", - }), - ) as PackageJson - ).private - ) { - throw new Error(`Dependency ${relativePath} is private`); - } - references.push({ path: relativePath }); - } - const compilerOptions = { ...(cloneDeep(input.compilerOptions) ?? {}), }; delete compilerOptions.outDir; delete compilerOptions.rootDir; + const packageIncludes = + input.include?.filter((i) => i.startsWith("../cursorless")) ?? []; + return { ...input, extends: getExtends(pathFromPackageToRoot, input.extends), ...(isEqual(compilerOptions, {}) ? {} : { compilerOptions }), - references: references.sort((r1, r2) => r1.path.localeCompare(r2.path)), include: [ "src/**/*.ts", - "src/**/*.json", - ...(input.compilerOptions?.jsx == null ? [] : ["src/**/*.tsx"]), - - ...((await pathExists(path.join(packageDir, "next.config.js"))) - ? ["next-env.d.ts"] - : []), - + "src/**/*.json", toPosixPath(path.join(pathFromPackageToRoot, "typings", "**/*.d.ts")), + ...packageIncludes, ], }; } diff --git a/packages/meta-updater/tsconfig.json b/packages/meta-updater/tsconfig.json index 449785ea1d..9f02581c94 100644 --- a/packages/meta-updater/tsconfig.json +++ b/packages/meta-updater/tsconfig.json @@ -3,5 +3,5 @@ "compilerOptions": { "esModuleInterop": true }, - "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/neovim-common/tsconfig.json b/packages/neovim-common/tsconfig.json index 322f879a6a..d4fbbd0828 100644 --- a/packages/neovim-common/tsconfig.json +++ b/packages/neovim-common/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/neovim-registry/tsconfig.json b/packages/neovim-registry/tsconfig.json index 9e25e6ece9..d4fbbd0828 100644 --- a/packages/neovim-registry/tsconfig.json +++ b/packages/neovim-registry/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts"] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/node-common/tsconfig.json b/packages/node-common/tsconfig.json index 322f879a6a..d4fbbd0828 100644 --- a/packages/node-common/tsconfig.json +++ b/packages/node-common/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/sentence-parser/tsconfig.json b/packages/sentence-parser/tsconfig.json index 9e25e6ece9..d4fbbd0828 100644 --- a/packages/sentence-parser/tsconfig.json +++ b/packages/sentence-parser/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts"] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/test-case-recorder/tsconfig.json b/packages/test-case-recorder/tsconfig.json index 322f879a6a..d4fbbd0828 100644 --- a/packages/test-case-recorder/tsconfig.json +++ b/packages/test-case-recorder/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/test-harness/tsconfig.json b/packages/test-harness/tsconfig.json index 322f879a6a..d4fbbd0828 100644 --- a/packages/test-harness/tsconfig.json +++ b/packages/test-harness/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/vscode-common/tsconfig.json b/packages/vscode-common/tsconfig.json index 322f879a6a..d4fbbd0828 100644 --- a/packages/vscode-common/tsconfig.json +++ b/packages/vscode-common/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["src/**/*.ts", "../../typings/**/*.d.ts"] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 502c7aad6b..f0956d73df 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -770,9 +770,6 @@ importers: normalize-path: specifier: ^3.0.0 version: 3.0.0 - path-exists: - specifier: ^5.0.0 - version: 5.0.0 type-fest: specifier: ^5.4.4 version: 5.4.4 From 9ea9b59f0b8b53bb3d2041b588198c2f062315a2 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Mon, 16 Mar 2026 16:28:57 +0100 Subject: [PATCH 06/37] vite --import=tsx --- package.json | 2 +- packages/cheatsheet-local/package.json | 9 ++++----- packages/cursorless-org/package.json | 5 ++--- packages/cursorless-vscode-tutorial-webview/package.json | 7 ++++--- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 4e1812352a..c0da687a89 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "lint:style": "stylelint '**/*.{css,scss}'", "lint": "pnpm run lint:meta && pnpm run lint:syncpack && pnpm run lint:ts && pnpm run lint:style", "init-vscode-sandbox": "pnpm -F @cursorless/cursorless-vscode init-launch-sandbox", - "meta-updater": "env NODE_OPTIONS='--import=tsx' meta-updater", + "meta-updater": "env NODE_OPTIONS=--import=tsx meta-updater", "preinstall": "npx only-allow pnpm", "test": "pnpm -r test", "test:subset": "pnpm -r test:subset", diff --git a/packages/cheatsheet-local/package.json b/packages/cheatsheet-local/package.json index 7fa8d06aa5..6f5cec5c2c 100644 --- a/packages/cheatsheet-local/package.json +++ b/packages/cheatsheet-local/package.json @@ -13,11 +13,10 @@ "scripts": { "test": "jest", "typecheck": "tsc", - "serve": "vite serve", - "preview": "vite preview", - "bundle": "vite build", - "bundle:dev": "vite build --mode development", - "bundle:watch": "vite build --mode development --watch", + "dev": "env NODE_OPTIONS=--import=tsx vite serve", + "bundle": "env NODE_OPTIONS=--import=tsx vite build", + "bundle:dev": "env NODE_OPTIONS=--import=tsx vite build --mode development", + "bundle:watch": "env NODE_OPTIONS=--import=tsx vite build --mode development --watch", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { diff --git a/packages/cursorless-org/package.json b/packages/cursorless-org/package.json index c325d37177..85fb2ed7ce 100644 --- a/packages/cursorless-org/package.json +++ b/packages/cursorless-org/package.json @@ -12,9 +12,8 @@ }, "scripts": { "typecheck": "tsc", - "dev": "vite serve", - "build": "vite build", - "preview": "vite preview", + "dev": "env NODE_OPTIONS=--import=tsx vite serve", + "build": "env NODE_OPTIONS=--import=tsx vite build", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { diff --git a/packages/cursorless-vscode-tutorial-webview/package.json b/packages/cursorless-vscode-tutorial-webview/package.json index 24d4055055..e4537cd30b 100644 --- a/packages/cursorless-vscode-tutorial-webview/package.json +++ b/packages/cursorless-vscode-tutorial-webview/package.json @@ -8,9 +8,10 @@ "main": "./out/index.js", "scripts": { "typecheck": "tsc", - "bundle": "vite build", - "bundle:dev": "vite build --mode development", - "bundle:watch": "vite build --mode development --watch", + "dev": "env NODE_OPTIONS=--import=tsx vite serve", + "bundle": "env NODE_OPTIONS=--import=tsx vite build", + "bundle:dev": "env NODE_OPTIONS=--import=tsx vite build --mode development", + "bundle:watch": "env NODE_OPTIONS=--import=tsx vite build --mode development --watch", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { From 7fd7f201297cfdfc52898b66e1af9ec25b487ed8 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Mon, 16 Mar 2026 16:58:37 +0100 Subject: [PATCH 07/37] Break circular dependencies --- packages/cheatsheet-local/vite.config.ts | 2 +- packages/cheatsheet/package.json | 3 ++- packages/cheatsheet/src/index.ts | 1 - packages/common/src/ide/fake/FakeIDE.ts | 9 +++------ .../test/InMemoryTextDocumentEdit.test.ts | 2 +- .../common/src/ide/types/Configuration.ts | 2 +- packages/common/src/ide/types/Events.ts | 3 ++- .../common/src/ide/types/FlashDescriptor.ts | 2 +- packages/common/src/ide/types/ide.types.ts | 11 ++++------- .../generateLineInfos.ts | 2 +- .../handleMultipleLines.test.ts | 2 +- .../handleMultipleLines.ts | 2 +- .../src/testUtil/extractTargetedMarks.ts | 2 +- .../common/src/testUtil/spyToPlainObject.ts | 3 ++- packages/common/src/testUtil/testConstants.ts | 2 +- packages/common/src/types/Edit.ts | 2 +- packages/common/src/types/Position.ts | 5 +++-- packages/common/src/types/Range.ts | 13 +------------ packages/common/src/types/ScopeProvider.ts | 14 ++++++-------- packages/common/src/types/Selection.ts | 19 ++++++++++++++++++- packages/common/src/types/TestCaseFixture.ts | 3 ++- packages/common/src/types/TextDocument.ts | 5 ++++- packages/common/src/types/TextEditor.ts | 16 +++++++--------- packages/common/src/types/TextEditorEdit.ts | 4 +++- packages/common/src/types/TextLine.ts | 2 +- .../types/generalizedRangeContains.test.ts | 3 ++- .../src/types/generalizedRangeTouches.test.ts | 5 +++-- packages/common/src/types/position.test.ts | 2 +- packages/common/src/types/range.test.ts | 8 +++++--- packages/common/src/types/selection.test.ts | 16 ++++++++++------ .../src/actions/BreakLine.ts | 4 ++-- .../src/actions/BringMoveSwap.ts | 9 ++++++--- .../src/actions/EditNew/EditNew.ts | 3 ++- .../EditNew/runInsertLineAfterTargets.ts | 3 ++- .../GenerateSnippet/GenerateSnippet.ts | 11 +++-------- .../src/actions/IndentLine.ts | 4 ++-- .../src/actions/JoinLines.ts | 4 ++-- .../src/actions/PasteFromClipboardDirectly.ts | 3 ++- .../cursorless-engine/src/actions/Replace.ts | 4 ++-- .../src/processTargets/targets/BaseTarget.ts | 5 ++--- .../processTargets/targets/DestinationImpl.ts | 6 +++--- packages/cursorless-org/src/Cheatsheet.tsx | 6 ++---- .../src/ide/vscode/VscodeInsertSnippets.ts | 5 ++++- .../src/ide/vscode/VscodeOpenLink.ts | 3 ++- 44 files changed, 125 insertions(+), 110 deletions(-) diff --git a/packages/cheatsheet-local/vite.config.ts b/packages/cheatsheet-local/vite.config.ts index f3fdfd3f23..e5394bfb8b 100644 --- a/packages/cheatsheet-local/vite.config.ts +++ b/packages/cheatsheet-local/vite.config.ts @@ -1,4 +1,4 @@ -import { defaultCheatsheetInfo } from "@cursorless/cheatsheet"; +import defaultCheatsheetInfo from "@cursorless/cheatsheet/defaultSpokenForms"; import { viteHtmlParams, vitePreactAlias } from "@cursorless/common"; import { defineConfig, type UserConfig } from "vite"; import purgeCss from "vite-plugin-purgecss"; diff --git a/packages/cheatsheet/package.json b/packages/cheatsheet/package.json index 0574c6be71..a23b72f50d 100644 --- a/packages/cheatsheet/package.json +++ b/packages/cheatsheet/package.json @@ -5,7 +5,8 @@ "license": "MIT", "type": "module", "exports": { - ".": "./src/index.ts" + ".": "./src/index.ts", + "./defaultSpokenForms": "./src/lib/sampleSpokenFormInfos/defaults.json" }, "sideEffects": [ "*.css" diff --git a/packages/cheatsheet/src/index.ts b/packages/cheatsheet/src/index.ts index c35e9fb1a5..3a37b41635 100644 --- a/packages/cheatsheet/src/index.ts +++ b/packages/cheatsheet/src/index.ts @@ -1,4 +1,3 @@ export * from "./lib/Cheatsheet"; export * from "./lib/cheatsheet.types"; export * from "./lib/utils/fakeCheatsheetInfo"; -export { default as defaultCheatsheetInfo } from "./lib/sampleSpokenFormInfos/defaults.json"; diff --git a/packages/common/src/ide/fake/FakeIDE.ts b/packages/common/src/ide/fake/FakeIDE.ts index 58e951cf2e..0fde1eed4b 100644 --- a/packages/common/src/ide/fake/FakeIDE.ts +++ b/packages/common/src/ide/fake/FakeIDE.ts @@ -1,14 +1,11 @@ import { pull } from "lodash-es"; -import type { - EditableTextEditor, - Messages, - NotebookEditor, - TextEditor, -} from "../.."; import type { GeneralizedRange } from "../../types/GeneralizedRange"; +import type { NotebookEditor } from "../../types/NotebookEditor"; import type { TextDocument } from "../../types/TextDocument"; +import type { EditableTextEditor, TextEditor } from "../../types/TextEditor"; import type { TextDocumentChangeEvent } from "../types/Events"; import type { FlashDescriptor } from "../types/FlashDescriptor"; +import type { Messages } from "../types/Messages"; import type { QuickPickOptions } from "../types/QuickPickOptions"; import type { Emit, diff --git a/packages/common/src/ide/inMemoryTextEditor/test/InMemoryTextDocumentEdit.test.ts b/packages/common/src/ide/inMemoryTextEditor/test/InMemoryTextDocumentEdit.test.ts index bead770d1b..b63e98c75d 100644 --- a/packages/common/src/ide/inMemoryTextEditor/test/InMemoryTextDocumentEdit.test.ts +++ b/packages/common/src/ide/inMemoryTextEditor/test/InMemoryTextDocumentEdit.test.ts @@ -1,5 +1,5 @@ import * as assert from "node:assert"; -import { Range } from "../../.."; +import { Range } from "../../../types/Range"; import { createTestDocument } from "./createTestDocument"; const text = "hello\nworld"; diff --git a/packages/common/src/ide/types/Configuration.ts b/packages/common/src/ide/types/Configuration.ts index dd9cf32d69..67c1ee6751 100644 --- a/packages/common/src/ide/types/Configuration.ts +++ b/packages/common/src/ide/types/Configuration.ts @@ -1,4 +1,4 @@ -import type { Listener } from "../.."; +import type { Listener } from "../../util/Notifier"; import { HatStability } from "./HatStability"; import type { Disposable } from "./ide.types"; import type { GetFieldType, Paths } from "./Paths"; diff --git a/packages/common/src/ide/types/Events.ts b/packages/common/src/ide/types/Events.ts index 09f39e9a59..f3dde1fd8f 100644 --- a/packages/common/src/ide/types/Events.ts +++ b/packages/common/src/ide/types/Events.ts @@ -1,4 +1,5 @@ -import type { TextDocument, Range } from "../.."; +import type { Range } from "../../types/Range"; +import type { TextDocument } from "../../types/TextDocument"; /** * An event describing a transactional {@link TextDocument document} change. diff --git a/packages/common/src/ide/types/FlashDescriptor.ts b/packages/common/src/ide/types/FlashDescriptor.ts index db9613b588..3e9e652fc2 100644 --- a/packages/common/src/ide/types/FlashDescriptor.ts +++ b/packages/common/src/ide/types/FlashDescriptor.ts @@ -1,5 +1,5 @@ -import type { TextEditor } from "../.."; import type { GeneralizedRange } from "../../types/GeneralizedRange"; +import type { TextEditor } from "../../types/TextEditor"; export enum FlashStyle { pendingDelete = "pendingDelete", diff --git a/packages/common/src/ide/types/ide.types.ts b/packages/common/src/ide/types/ide.types.ts index b61a10745e..ef0f47786d 100644 --- a/packages/common/src/ide/types/ide.types.ts +++ b/packages/common/src/ide/types/ide.types.ts @@ -1,12 +1,9 @@ import type { URI } from "vscode-uri"; -import type { - EditableTextEditor, - InputBoxOptions, - NotebookEditor, - TextDocument, - TextEditor, -} from "../.."; import type { GeneralizedRange } from "../../types/GeneralizedRange"; +import type { InputBoxOptions } from "../../types/InputBoxOptions"; +import type { NotebookEditor } from "../../types/NotebookEditor"; +import type { TextDocument } from "../../types/TextDocument"; +import type { EditableTextEditor, TextEditor } from "../../types/TextEditor"; import type { Capabilities } from "./Capabilities"; import type { Clipboard } from "./Clipboard"; import type { Configuration } from "./Configuration"; diff --git a/packages/common/src/scopeVisualizerUtil/generateDecorationsForCharacterRange/generateLineInfos.ts b/packages/common/src/scopeVisualizerUtil/generateDecorationsForCharacterRange/generateLineInfos.ts index 50452270a9..bf09bd60d6 100644 --- a/packages/common/src/scopeVisualizerUtil/generateDecorationsForCharacterRange/generateLineInfos.ts +++ b/packages/common/src/scopeVisualizerUtil/generateDecorationsForCharacterRange/generateLineInfos.ts @@ -1,4 +1,4 @@ -import type { Range } from "../.."; +import type { Range } from "../../types/Range"; /** * Generates a line info for each line in the given range, which includes diff --git a/packages/common/src/scopeVisualizerUtil/generateDecorationsForCharacterRange/handleMultipleLines.test.ts b/packages/common/src/scopeVisualizerUtil/generateDecorationsForCharacterRange/handleMultipleLines.test.ts index a4da8afef0..62e31a5ef9 100644 --- a/packages/common/src/scopeVisualizerUtil/generateDecorationsForCharacterRange/handleMultipleLines.test.ts +++ b/packages/common/src/scopeVisualizerUtil/generateDecorationsForCharacterRange/handleMultipleLines.test.ts @@ -1,6 +1,6 @@ import assert from "assert"; import { map } from "itertools"; -import { Range } from "../.."; +import { Range } from "../../types/Range"; import { BorderStyle } from "../decorationStyle.types"; import { handleMultipleLines } from "./handleMultipleLines"; diff --git a/packages/common/src/scopeVisualizerUtil/generateDecorationsForCharacterRange/handleMultipleLines.ts b/packages/common/src/scopeVisualizerUtil/generateDecorationsForCharacterRange/handleMultipleLines.ts index 7b668f824b..d6749c3f01 100644 --- a/packages/common/src/scopeVisualizerUtil/generateDecorationsForCharacterRange/handleMultipleLines.ts +++ b/packages/common/src/scopeVisualizerUtil/generateDecorationsForCharacterRange/handleMultipleLines.ts @@ -1,5 +1,5 @@ import { flatmap } from "itertools"; -import { Range } from "../.."; +import { Range } from "../../types/Range"; import type { DecorationStyle, StyledRange } from "../decorationStyle.types"; import { BorderStyle } from "../decorationStyle.types"; import type { LineInfo } from "./generateLineInfos"; diff --git a/packages/common/src/testUtil/extractTargetedMarks.ts b/packages/common/src/testUtil/extractTargetedMarks.ts index 40a1bc60ec..454dc43571 100644 --- a/packages/common/src/testUtil/extractTargetedMarks.ts +++ b/packages/common/src/testUtil/extractTargetedMarks.ts @@ -1,4 +1,4 @@ -import { splitKey } from ".."; +import { splitKey } from "../util/splitKey"; import type { ReadOnlyHatMap } from "../types/HatTokenMap"; import type { Token } from "../types/Token"; diff --git a/packages/common/src/testUtil/spyToPlainObject.ts b/packages/common/src/testUtil/spyToPlainObject.ts index 91ae297a4d..8c3ea4b6a5 100644 --- a/packages/common/src/testUtil/spyToPlainObject.ts +++ b/packages/common/src/testUtil/spyToPlainObject.ts @@ -1,4 +1,5 @@ -import type { Message, SpyIDERecordedValues } from ".."; +import type { SpyIDERecordedValues } from "../ide/spy/SpyIDE"; +import type { Message } from "../ide/spy/SpyMessages"; import type { PlainFlashDescriptor, PlainHighlight, diff --git a/packages/common/src/testUtil/testConstants.ts b/packages/common/src/testUtil/testConstants.ts index 1184a5f121..25c2f940ac 100644 --- a/packages/common/src/testUtil/testConstants.ts +++ b/packages/common/src/testUtil/testConstants.ts @@ -1,4 +1,4 @@ -import type { TextEditorOptions } from ".."; +import type { TextEditorOptions } from "../types/TextEditorOptions"; export const DEFAULT_TEXT_EDITOR_OPTIONS_FOR_TEST: TextEditorOptions = { tabSize: 4, diff --git a/packages/common/src/types/Edit.ts b/packages/common/src/types/Edit.ts index 30c63280f6..2a81262ca3 100644 --- a/packages/common/src/types/Edit.ts +++ b/packages/common/src/types/Edit.ts @@ -1,4 +1,4 @@ -import type { Range } from ".."; +import type { Range } from "./Range"; /** Represent a single edit/change in the document */ export interface Edit { diff --git a/packages/common/src/types/Position.ts b/packages/common/src/types/Position.ts index 5a17845a25..f78fb21214 100644 --- a/packages/common/src/types/Position.ts +++ b/packages/common/src/types/Position.ts @@ -1,5 +1,6 @@ -import type { TextDocument } from ".."; -import { Range, stringToInteger } from ".."; +import { stringToInteger } from "../util/stringUtils"; +import type { TextDocument } from "./TextDocument"; +import { Range } from "./Range"; export class Position { /** diff --git a/packages/common/src/types/Range.ts b/packages/common/src/types/Range.ts index 536fa82bb9..441c66f94f 100644 --- a/packages/common/src/types/Range.ts +++ b/packages/common/src/types/Range.ts @@ -1,4 +1,4 @@ -import { Position, Selection } from ".."; +import { Position } from "./Position"; export class Range { /** @@ -151,17 +151,6 @@ export class Range { return new Range(start ?? this.start, end ?? this.end); } - /** - * Construct a new selection from this range - * @param isReversed If true active is before anchor - * @returns A new selection - */ - public toSelection(isReversed: boolean): Selection { - return isReversed - ? new Selection(this.end, this.start) - : new Selection(this.start, this.end); - } - /** * Return a concise string representation of the range. 0-based. * @returns concise representation diff --git a/packages/common/src/types/ScopeProvider.ts b/packages/common/src/types/ScopeProvider.ts index 6d25b7613d..b3c5da5bba 100644 --- a/packages/common/src/types/ScopeProvider.ts +++ b/packages/common/src/types/ScopeProvider.ts @@ -1,11 +1,9 @@ -import type { - Disposable, - GeneralizedRange, - Range, - ScopeType, - SpokenForm, - TextEditor, -} from ".."; +import type { GeneralizedRange } from "./GeneralizedRange"; +import type { SpokenForm } from "./SpokenForm"; +import type { Range } from "./Range"; +import type { TextEditor } from "./TextEditor"; +import type { Disposable } from "../ide/types/ide.types"; +import type { ScopeType } from "./command/PartialTargetDescriptor.types"; export interface ScopeProvider { /** diff --git a/packages/common/src/types/Selection.ts b/packages/common/src/types/Selection.ts index 8415e9a624..5de52f161d 100644 --- a/packages/common/src/types/Selection.ts +++ b/packages/common/src/types/Selection.ts @@ -1,4 +1,5 @@ -import { Position, Range } from ".."; +import { Position } from "./Position"; +import { Range } from "./Range"; export class Selection extends Range { /** @@ -60,6 +61,22 @@ export class Selection extends Range { this.active = active; } + /** + * Create a selection from a range. By default, the selection will not be reversed, but you can set `isReversed` to `true` to create a reversed selection. + * + * @param range A range. + * @param isReversed Whether the selection should be reversed. Defaults to `false`. + * @returns A selection created from the given range. + */ + public static fromRange( + range: Range, + isReversed: boolean = false, + ): Selection { + return isReversed + ? new Selection(range.end, range.start) + : new Selection(range.start, range.end); + } + /** * Check if `other` equals this range. * diff --git a/packages/common/src/types/TestCaseFixture.ts b/packages/common/src/types/TestCaseFixture.ts index c3030e2b40..7d761dbb49 100644 --- a/packages/common/src/types/TestCaseFixture.ts +++ b/packages/common/src/types/TestCaseFixture.ts @@ -1,4 +1,5 @@ -import type { Command, CommandLatest, Fallback, FocusedElementType } from ".."; +import type { FocusedElementType } from "./CommandServerApi"; +import type { Command, CommandLatest, Fallback } from "./command/command.types"; import type { TestCaseSnapshot } from "../testUtil/TestCaseSnapshot"; import type { PlainSpyIDERecordedValues } from "../testUtil/spyToPlainObject"; diff --git a/packages/common/src/types/TextDocument.ts b/packages/common/src/types/TextDocument.ts index f5eb26d0d8..93c7f33c2b 100644 --- a/packages/common/src/types/TextDocument.ts +++ b/packages/common/src/types/TextDocument.ts @@ -1,5 +1,8 @@ import type { URI } from "vscode-uri"; -import type { EndOfLine, Position, Range, TextLine } from ".."; +import type { EndOfLine } from "../ide/types/ide.types"; +import type { Position } from "./Position"; +import type { Range } from "./Range"; +import type { TextLine } from "./TextLine"; export interface TextDocument { /** diff --git a/packages/common/src/types/TextEditor.ts b/packages/common/src/types/TextEditor.ts index 6670a63c1b..56b688cd08 100644 --- a/packages/common/src/types/TextEditor.ts +++ b/packages/common/src/types/TextEditor.ts @@ -1,12 +1,10 @@ -import type { - Edit, - GeneralizedRange, - Range, - RevealLineAt, - Selection, - TextDocument, - TextEditorOptions, -} from ".."; +import type { Edit } from "./Edit"; +import type { GeneralizedRange } from "./GeneralizedRange"; +import type { Range } from "./Range"; +import type { RevealLineAt } from "./RevealLineAt"; +import type { Selection } from "./Selection"; +import type { TextDocument } from "./TextDocument"; +import type { TextEditorOptions } from "./TextEditorOptions"; /** * Represents a read-only reference to a text editor. If you need to modify the diff --git a/packages/common/src/types/TextEditorEdit.ts b/packages/common/src/types/TextEditorEdit.ts index ed1f1f68cc..80fb9be54e 100644 --- a/packages/common/src/types/TextEditorEdit.ts +++ b/packages/common/src/types/TextEditorEdit.ts @@ -1,4 +1,6 @@ -import type { EndOfLine, Position, Range } from ".."; +import type { EndOfLine } from "../ide/types/ide.types"; +import type { Position } from "./Position"; +import type { Range } from "./Range"; /** * A complex edit that will be applied in one transaction on a TextEditor. diff --git a/packages/common/src/types/TextLine.ts b/packages/common/src/types/TextLine.ts index 949b871914..e03232bd43 100644 --- a/packages/common/src/types/TextLine.ts +++ b/packages/common/src/types/TextLine.ts @@ -1,4 +1,4 @@ -import type { Range } from ".."; +import type { Range } from "./Range"; /** * Represents a line of text, such as a line of source code. diff --git a/packages/common/src/types/generalizedRangeContains.test.ts b/packages/common/src/types/generalizedRangeContains.test.ts index d9727d890a..56475874b8 100644 --- a/packages/common/src/types/generalizedRangeContains.test.ts +++ b/packages/common/src/types/generalizedRangeContains.test.ts @@ -1,5 +1,6 @@ import assert from "assert"; -import { generalizedRangeContains, Position } from ".."; +import { generalizedRangeContains } from "./GeneralizedRange"; +import { Position } from "./Position"; suite("generalizedRangeContains", () => { test("character", () => { diff --git a/packages/common/src/types/generalizedRangeTouches.test.ts b/packages/common/src/types/generalizedRangeTouches.test.ts index 6eca341be2..a3622a5ed0 100644 --- a/packages/common/src/types/generalizedRangeTouches.test.ts +++ b/packages/common/src/types/generalizedRangeTouches.test.ts @@ -1,6 +1,7 @@ import assert from "assert"; -import type { GeneralizedRange } from ".."; -import { generalizedRangeTouches, Position } from ".."; +import type { GeneralizedRange } from "./GeneralizedRange"; +import { generalizedRangeTouches } from "./GeneralizedRange"; +import { Position } from "./Position"; suite("generalizedRangeTouches", () => { test("character", () => { diff --git a/packages/common/src/types/position.test.ts b/packages/common/src/types/position.test.ts index af095df91e..5757bf0af8 100644 --- a/packages/common/src/types/position.test.ts +++ b/packages/common/src/types/position.test.ts @@ -1,5 +1,5 @@ import * as assert from "assert"; -import { Position } from ".."; +import { Position } from "./Position"; suite("Position", () => { test("constructor", () => { diff --git a/packages/common/src/types/range.test.ts b/packages/common/src/types/range.test.ts index ade8585b07..c499a1c7c9 100644 --- a/packages/common/src/types/range.test.ts +++ b/packages/common/src/types/range.test.ts @@ -1,5 +1,7 @@ import * as assert from "assert"; -import { Position, Range } from ".."; +import { Position } from "./Position"; +import { Range } from "./Range"; +import { Selection } from "./Selection"; suite("Range", () => { test("constructor", () => { @@ -110,8 +112,8 @@ suite("Range", () => { }); test("toSelection", () => { - assert.ok(new Range(1, 2, 3, 4).toSelection(true).isReversed); - assert.ok(!new Range(1, 2, 3, 4).toSelection(false).isReversed); + assert.ok(Selection.fromRange(new Range(1, 2, 3, 4), true).isReversed); + assert.ok(!Selection.fromRange(new Range(1, 2, 3, 4), false).isReversed); }); test("concise", () => { diff --git a/packages/common/src/types/selection.test.ts b/packages/common/src/types/selection.test.ts index 4b967e1c82..963b3cea1b 100644 --- a/packages/common/src/types/selection.test.ts +++ b/packages/common/src/types/selection.test.ts @@ -1,5 +1,7 @@ import * as assert from "assert"; -import { Position, Selection } from ".."; +import { Position } from "./Position"; +import { Range } from "./Range"; +import { Selection } from "./Selection"; suite("Selection", () => { test("constructor", () => { @@ -18,6 +20,13 @@ suite("Selection", () => { ); }); + test("fromRange", () => { + assert.ok(Selection.fromRange(new Selection(1, 2, 3, 4), true).isReversed); + assert.ok( + !Selection.fromRange(new Selection(1, 2, 3, 4), false).isReversed, + ); + }); + test("isReversed", () => { assert.ok(!new Selection(0, 0, 0, 0).isReversed); assert.ok(new Selection(1, 0, 0, 0).isReversed); @@ -45,11 +54,6 @@ suite("Selection", () => { ); }); - test("toSelection", () => { - assert.ok(new Selection(1, 2, 3, 4).toSelection(true).isReversed); - assert.ok(!new Selection(1, 2, 3, 4).toSelection(false).isReversed); - }); - test("concise", () => { assert.equal(new Selection(1, 2, 3, 4).concise(), "1:2->3:4"); assert.equal(new Selection(1, 2, 3, 4).conciseOneBased(), "2:3->4:5"); diff --git a/packages/cursorless-engine/src/actions/BreakLine.ts b/packages/cursorless-engine/src/actions/BreakLine.ts index 4cd6611484..3284e4f78e 100644 --- a/packages/cursorless-engine/src/actions/BreakLine.ts +++ b/packages/cursorless-engine/src/actions/BreakLine.ts @@ -1,5 +1,5 @@ import type { Edit, IDE, TextEditor } from "@cursorless/common"; -import { FlashStyle, Position, Range } from "@cursorless/common"; +import { FlashStyle, Position, Range, Selection } from "@cursorless/common"; import { flatten, zip } from "lodash-es"; import type { RangeUpdater } from "../core/updateSelections/RangeUpdater"; import { performEditsAndUpdateSelections } from "../core/updateSelections/updateSelections"; @@ -36,7 +36,7 @@ export class BreakLine { return zip(targets, updatedRanges).map(([target, range]) => ({ editor: target!.editor, - selection: range!.toSelection(target!.isReversed), + selection: Selection.fromRange(range!, target!.isReversed), })); }), ); diff --git a/packages/cursorless-engine/src/actions/BringMoveSwap.ts b/packages/cursorless-engine/src/actions/BringMoveSwap.ts index 3e55800bc2..8a7cde55bf 100644 --- a/packages/cursorless-engine/src/actions/BringMoveSwap.ts +++ b/packages/cursorless-engine/src/actions/BringMoveSwap.ts @@ -2,10 +2,13 @@ import type { GeneralizedRange, IDE, Range, - Selection, TextEditor, } from "@cursorless/common"; -import { FlashStyle, RangeExpansionBehavior } from "@cursorless/common"; +import { + FlashStyle, + RangeExpansionBehavior, + Selection, +} from "@cursorless/common"; import { flatten } from "lodash-es"; import type { RangeUpdater } from "../core/updateSelections/RangeUpdater"; import { performEditsAndUpdateSelections } from "../core/updateSelections/updateSelections"; @@ -220,7 +223,7 @@ abstract class BringMoveSwap { const target = edit.originalTarget; return { editor: edit.editor, - selection: range.toSelection(target.isReversed), + selection: Selection.fromRange(range, target.isReversed), isSource: edit.isSource, target, }; diff --git a/packages/cursorless-engine/src/actions/EditNew/EditNew.ts b/packages/cursorless-engine/src/actions/EditNew/EditNew.ts index e9cef44d17..562ad03658 100644 --- a/packages/cursorless-engine/src/actions/EditNew/EditNew.ts +++ b/packages/cursorless-engine/src/actions/EditNew/EditNew.ts @@ -1,4 +1,5 @@ import type { IDE } from "@cursorless/common"; +import { Selection } from "@cursorless/common"; import type { RangeUpdater } from "../../core/updateSelections/RangeUpdater"; import type { Destination } from "../../typings/target.types"; import { createThatMark, ensureSingleEditor } from "../../util/targetUtils"; @@ -74,7 +75,7 @@ export class EditNew { if (cursorRange == null) { throw Error("Cursor range is undefined for destination"); } - return cursorRange.toSelection(destination.target.isReversed); + return Selection.fromRange(cursorRange, destination.target.isReversed); }); await editableEditor.setSelections(newSelections, { focusEditor: true }); diff --git a/packages/cursorless-engine/src/actions/EditNew/runInsertLineAfterTargets.ts b/packages/cursorless-engine/src/actions/EditNew/runInsertLineAfterTargets.ts index 63fac52b92..a121ae2531 100644 --- a/packages/cursorless-engine/src/actions/EditNew/runInsertLineAfterTargets.ts +++ b/packages/cursorless-engine/src/actions/EditNew/runInsertLineAfterTargets.ts @@ -2,6 +2,7 @@ import type { CommandCapabilities, EditableTextEditor, } from "@cursorless/common"; +import { Selection } from "@cursorless/common"; import type { RangeUpdater } from "../../core/updateSelections/RangeUpdater"; import { performEditsAndUpdateSelections } from "../../core/updateSelections/updateSelections"; import type { EditDestination, State } from "./EditNew.types"; @@ -51,7 +52,7 @@ export async function runInsertLineAfterTargets( await editor.insertLineAfter(contentRanges); } else { await editor.setSelections( - contentRanges.map((range) => range.toSelection(false)), + contentRanges.map((range) => Selection.fromRange(range)), ); await editor.focus(); await editor.insertLineAfter(); diff --git a/packages/cursorless-engine/src/actions/GenerateSnippet/GenerateSnippet.ts b/packages/cursorless-engine/src/actions/GenerateSnippet/GenerateSnippet.ts index 2ac317af32..648f83b527 100644 --- a/packages/cursorless-engine/src/actions/GenerateSnippet/GenerateSnippet.ts +++ b/packages/cursorless-engine/src/actions/GenerateSnippet/GenerateSnippet.ts @@ -1,10 +1,5 @@ -import type { - EditableTextEditor, - IDE, - Selection, - TextEditor, -} from "@cursorless/common"; -import { FlashStyle, Range, matchAll } from "@cursorless/common"; +import type { EditableTextEditor, IDE, TextEditor } from "@cursorless/common"; +import { FlashStyle, Range, matchAll, Selection } from "@cursorless/common"; import type { Snippet, SnippetFile, @@ -153,7 +148,7 @@ export default class GenerateSnippet { } await editableEditor.setSelections([ - editableEditor.document.range.toSelection(false), + Selection.fromRange(editableEditor.document.range), ]); /** The next placeholder index to use for the meta snippet */ diff --git a/packages/cursorless-engine/src/actions/IndentLine.ts b/packages/cursorless-engine/src/actions/IndentLine.ts index 8d0a7d146c..b590bf3a44 100644 --- a/packages/cursorless-engine/src/actions/IndentLine.ts +++ b/packages/cursorless-engine/src/actions/IndentLine.ts @@ -1,5 +1,5 @@ import type { IDE, TextEditor } from "@cursorless/common"; -import { FlashStyle, Range } from "@cursorless/common"; +import { FlashStyle, Range, Selection } from "@cursorless/common"; import { flatten, zip } from "lodash-es"; import { selectionToStoredTarget } from "../core/commandRunner/selectionToStoredTarget"; import type { RangeUpdater } from "../core/updateSelections/RangeUpdater"; @@ -71,7 +71,7 @@ abstract class IndentLineBase { return zip(targets, updatedTargetSelections).map(([target, range]) => selectionToStoredTarget({ editor, - selection: range!.toSelection(target!.isReversed), + selection: Selection.fromRange(range!, target!.isReversed), }), ); } diff --git a/packages/cursorless-engine/src/actions/JoinLines.ts b/packages/cursorless-engine/src/actions/JoinLines.ts index 90620104f6..c59e1c2e26 100644 --- a/packages/cursorless-engine/src/actions/JoinLines.ts +++ b/packages/cursorless-engine/src/actions/JoinLines.ts @@ -1,5 +1,5 @@ import type { Edit, IDE, TextEditor } from "@cursorless/common"; -import { FlashStyle, Range, zipStrict } from "@cursorless/common"; +import { FlashStyle, Range, Selection, zipStrict } from "@cursorless/common"; import { range as iterRange, map, pairwise } from "itertools"; import { flatten } from "lodash-es"; import type { RangeUpdater } from "../core/updateSelections/RangeUpdater"; @@ -47,7 +47,7 @@ export default class JoinLines { return zipStrict(targets, updatedThatRanges).map(([target, range]) => ({ editor, - selection: range.toSelection(target.isReversed), + selection: Selection.fromRange(range, target.isReversed), })); }), ); diff --git a/packages/cursorless-engine/src/actions/PasteFromClipboardDirectly.ts b/packages/cursorless-engine/src/actions/PasteFromClipboardDirectly.ts index e01e5ae23f..19947d4fe4 100644 --- a/packages/cursorless-engine/src/actions/PasteFromClipboardDirectly.ts +++ b/packages/cursorless-engine/src/actions/PasteFromClipboardDirectly.ts @@ -2,6 +2,7 @@ import type { IDE, TextEditor } from "@cursorless/common"; import { FlashStyle, RangeExpansionBehavior, + Selection, toCharacterRange, zipStrict, } from "@cursorless/common"; @@ -73,7 +74,7 @@ export class PasteFromClipboardDirectly { const thatTargetSelections = zipStrict(edits, updatedEditSelections).map( ([edit, selection]) => - edit.updateRange(selection).toSelection(selection.isReversed), + Selection.fromRange(edit.updateRange(selection), selection.isReversed), ); await this.ide.flashRanges( diff --git a/packages/cursorless-engine/src/actions/Replace.ts b/packages/cursorless-engine/src/actions/Replace.ts index 72e905a035..bcebe009e3 100644 --- a/packages/cursorless-engine/src/actions/Replace.ts +++ b/packages/cursorless-engine/src/actions/Replace.ts @@ -1,5 +1,5 @@ import type { IDE, ReplaceWith } from "@cursorless/common"; -import { FlashStyle, RangeExpansionBehavior } from "@cursorless/common"; +import { FlashStyle, RangeExpansionBehavior, Selection } from "@cursorless/common"; import { zip } from "lodash-es"; import type { RangeUpdater } from "../core/updateSelections/RangeUpdater"; import { performEditsAndUpdateSelections } from "../core/updateSelections/updateSelections"; @@ -93,7 +93,7 @@ export default class Replace { for (const [wrapper, range] of zip(editWrappers, updatedEditRanges)) { thatSelections.push({ editor, - selection: wrapper!.edit.updateRange(range!).toSelection(false), + selection: Selection.fromRange(wrapper!.edit.updateRange(range!)), }); } }, diff --git a/packages/cursorless-engine/src/processTargets/targets/BaseTarget.ts b/packages/cursorless-engine/src/processTargets/targets/BaseTarget.ts index 7f24efb096..8bd6b2e464 100644 --- a/packages/cursorless-engine/src/processTargets/targets/BaseTarget.ts +++ b/packages/cursorless-engine/src/processTargets/targets/BaseTarget.ts @@ -3,11 +3,10 @@ import type { GeneralizedRange, InsertionMode, Range, - Selection, TargetPlainObject, TextEditor, } from "@cursorless/common"; -import { rangeToPlainObject } from "@cursorless/common"; +import { rangeToPlainObject, Selection } from "@cursorless/common"; import { isEqual } from "lodash-es"; import type { EditWithRangeUpdater } from "../../typings/Types"; import type { @@ -81,7 +80,7 @@ export abstract class BaseTarget< } get contentSelection(): Selection { - return this.contentRange.toSelection(this.isReversed); + return Selection.fromRange(this.contentRange, this.isReversed); } get contentRange(): Range { diff --git a/packages/cursorless-engine/src/processTargets/targets/DestinationImpl.ts b/packages/cursorless-engine/src/processTargets/targets/DestinationImpl.ts index 2070544772..37d95de65b 100644 --- a/packages/cursorless-engine/src/processTargets/targets/DestinationImpl.ts +++ b/packages/cursorless-engine/src/processTargets/targets/DestinationImpl.ts @@ -1,5 +1,5 @@ -import type { InsertionMode, Selection, TextEditor } from "@cursorless/common"; -import { Range } from "@cursorless/common"; +import type { InsertionMode, TextEditor } from "@cursorless/common"; +import { Range, Selection } from "@cursorless/common"; import type { EditWithRangeUpdater } from "../../typings/Types"; import type { Destination, @@ -34,7 +34,7 @@ export class DestinationImpl implements Destination { } get contentSelection(): Selection { - return this.contentRange.toSelection(this.target.isReversed); + return Selection.fromRange(this.contentRange, this.target.isReversed); } get editor(): TextEditor { diff --git a/packages/cursorless-org/src/Cheatsheet.tsx b/packages/cursorless-org/src/Cheatsheet.tsx index 2f0828f63b..7d95fcec0c 100644 --- a/packages/cursorless-org/src/Cheatsheet.tsx +++ b/packages/cursorless-org/src/Cheatsheet.tsx @@ -1,7 +1,5 @@ -import { - Cheatsheet as OriginalCheatsheet, - defaultCheatsheetInfo, -} from "@cursorless/cheatsheet"; +import { Cheatsheet as OriginalCheatsheet } from "@cursorless/cheatsheet"; +import defaultCheatsheetInfo from "@cursorless/cheatsheet/defaultSpokenForms"; export function Cheatsheet() { return ( diff --git a/packages/cursorless-vscode/src/ide/vscode/VscodeInsertSnippets.ts b/packages/cursorless-vscode/src/ide/vscode/VscodeInsertSnippets.ts index f9ae223cb2..608de60299 100644 --- a/packages/cursorless-vscode/src/ide/vscode/VscodeInsertSnippets.ts +++ b/packages/cursorless-vscode/src/ide/vscode/VscodeInsertSnippets.ts @@ -1,5 +1,6 @@ import * as vscode from "vscode"; import type { Range } from "@cursorless/common"; +import { Selection } from "@cursorless/common"; import type { VscodeTextEditor } from "./VscodeTextEditor"; export async function vscodeInsertSnippet( @@ -8,7 +9,9 @@ export async function vscodeInsertSnippet( ranges: Range[] | undefined, ): Promise { if (ranges != null) { - await editor.setSelections(ranges.map((range) => range.toSelection(false))); + await editor.setSelections( + ranges.map((range) => Selection.fromRange(range)), + ); } await editor.focus(); diff --git a/packages/cursorless-vscode/src/ide/vscode/VscodeOpenLink.ts b/packages/cursorless-vscode/src/ide/vscode/VscodeOpenLink.ts index 0250358ee7..0c9dce8cd9 100644 --- a/packages/cursorless-vscode/src/ide/vscode/VscodeOpenLink.ts +++ b/packages/cursorless-vscode/src/ide/vscode/VscodeOpenLink.ts @@ -1,6 +1,7 @@ import * as vscode from "vscode"; import type { VscodeTextEditor } from "./VscodeTextEditor"; import type { OpenLinkOptions, Range } from "@cursorless/common"; +import { Selection } from "@cursorless/common"; import { toVscodePositionOrRange } from "@cursorless/vscode-common"; export default async function vscodeOpenLink( @@ -43,7 +44,7 @@ async function runCommandAtRange( command: string, range: Range, ) { - await editor.setSelections([range.toSelection(false)], { + await editor.setSelections([Selection.fromRange(range)], { focusEditor: true, }); await vscode.commands.executeCommand(command); From 5d051b375c31e9c2c63ab376dfae16e39182fee6 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Mon, 16 Mar 2026 17:03:17 +0100 Subject: [PATCH 08/37] Support custom exports from package json --- .../meta-updater/src/updatePackageJson.ts | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/packages/meta-updater/src/updatePackageJson.ts b/packages/meta-updater/src/updatePackageJson.ts index 461089da01..a0634f1261 100644 --- a/packages/meta-updater/src/updatePackageJson.ts +++ b/packages/meta-updater/src/updatePackageJson.ts @@ -41,13 +41,19 @@ export async function updatePackageJson( const isLib = !isRoot && !input.private; - const exportFields: Partial = !isLib - ? {} - : { - exports: { - ["."]: LIB_ENTRY_POINT, - }, - }; + const exportFields: Partial = (() => { + if (!isLib) { + return {}; + } + const exports = + input.exports != null && + typeof input.exports === "object" && + !Array.isArray(input.exports) + ? input.exports + : {}; + exports["."] = LIB_ENTRY_POINT; + return { exports }; + })(); const isCursorlessVscode = input.name === "@cursorless/cursorless-vscode"; From 466fc15d21be2af6de284217d6f8ea55bf08abcd Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Mon, 16 Mar 2026 17:04:52 +0100 Subject: [PATCH 09/37] remove unused import --- packages/common/src/types/selection.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/common/src/types/selection.test.ts b/packages/common/src/types/selection.test.ts index 963b3cea1b..592ee7475f 100644 --- a/packages/common/src/types/selection.test.ts +++ b/packages/common/src/types/selection.test.ts @@ -1,6 +1,5 @@ import * as assert from "assert"; import { Position } from "./Position"; -import { Range } from "./Range"; import { Selection } from "./Selection"; suite("Selection", () => { From 15a4fd5a25e753d06b4d1d221ccf0ef268572f27 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Mon, 16 Mar 2026 17:25:59 +0100 Subject: [PATCH 10/37] jest config --- packages/cheatsheet-local/jest.config.ts | 2 +- packages/cheatsheet-local/vite.config.ts | 2 +- packages/cheatsheet/jest.config.ts | 2 +- packages/common/package.json | 4 +++- packages/common/src/index.ts | 3 --- .../preactModuleNameMapper.ts => tooling/jest.ts} | 0 packages/common/src/tooling/vite.ts | 2 ++ .../src/{buildUtil => tooling}/viteHtmlParamsPlugin.ts | 0 .../common/src/{buildUtil => tooling}/vitePreactAlias.ts | 0 packages/cursorless-org/vite.config.ts | 7 ++----- packages/cursorless-vscode-tutorial-webview/vite.config.ts | 2 +- 11 files changed, 11 insertions(+), 13 deletions(-) rename packages/common/src/{testUtil/preactModuleNameMapper.ts => tooling/jest.ts} (100%) create mode 100644 packages/common/src/tooling/vite.ts rename packages/common/src/{buildUtil => tooling}/viteHtmlParamsPlugin.ts (100%) rename packages/common/src/{buildUtil => tooling}/vitePreactAlias.ts (100%) diff --git a/packages/cheatsheet-local/jest.config.ts b/packages/cheatsheet-local/jest.config.ts index 0997b3e91f..5b68f60897 100644 --- a/packages/cheatsheet-local/jest.config.ts +++ b/packages/cheatsheet-local/jest.config.ts @@ -1,5 +1,5 @@ import type { Config } from "jest"; -import { preactModuleNameMapper } from "@cursorless/common"; +import { preactModuleNameMapper } from "@cursorless/common/jest"; const config: Config = { preset: "ts-jest", diff --git a/packages/cheatsheet-local/vite.config.ts b/packages/cheatsheet-local/vite.config.ts index e5394bfb8b..37e703cc4f 100644 --- a/packages/cheatsheet-local/vite.config.ts +++ b/packages/cheatsheet-local/vite.config.ts @@ -1,5 +1,5 @@ import defaultCheatsheetInfo from "@cursorless/cheatsheet/defaultSpokenForms"; -import { viteHtmlParams, vitePreactAlias } from "@cursorless/common"; +import { viteHtmlParams, vitePreactAlias } from "@cursorless/common/vite"; import { defineConfig, type UserConfig } from "vite"; import purgeCss from "vite-plugin-purgecss"; import { viteSingleFile } from "vite-plugin-singlefile"; diff --git a/packages/cheatsheet/jest.config.ts b/packages/cheatsheet/jest.config.ts index 9bc59a449c..af74c7a652 100644 --- a/packages/cheatsheet/jest.config.ts +++ b/packages/cheatsheet/jest.config.ts @@ -1,5 +1,5 @@ import type { Config } from "jest"; -import { preactModuleNameMapper } from "@cursorless/common"; +import { preactModuleNameMapper } from "@cursorless/common/jest"; const config: Config = { preset: "ts-jest", diff --git a/packages/common/package.json b/packages/common/package.json index 871b552a71..24ac23f468 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -8,7 +8,9 @@ "my-ts-node": "./scripts/my-ts-node.js" }, "exports": { - ".": "./src/index.ts" + ".": "./src/index.ts", + "./jest": "./src/tooling/jest.ts", + "./vite": "./src/tooling/vite.ts" }, "scripts": { "typecheck": "tsc" diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index d675713b5c..69b194422d 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -1,5 +1,3 @@ -export * from "./buildUtil/viteHtmlParamsPlugin"; -export * from "./buildUtil/vitePreactAlias"; export * from "./constants"; export * from "./cursorlessCommandIds"; export * from "./cursorlessSideBarIds"; @@ -47,7 +45,6 @@ export * from "./testUtil/asyncSafety"; export * from "./testUtil/extractTargetedMarks"; export * from "./testUtil/fromPlainObject"; export * from "./testUtil/getSnapshotForComparison"; -export * from "./testUtil/preactModuleNameMapper"; export * from "./testUtil/serialize"; export * from "./testUtil/serializeTestFixture"; export * from "./testUtil/shouldUpdateFixtures"; diff --git a/packages/common/src/testUtil/preactModuleNameMapper.ts b/packages/common/src/tooling/jest.ts similarity index 100% rename from packages/common/src/testUtil/preactModuleNameMapper.ts rename to packages/common/src/tooling/jest.ts diff --git a/packages/common/src/tooling/vite.ts b/packages/common/src/tooling/vite.ts new file mode 100644 index 0000000000..b801b03561 --- /dev/null +++ b/packages/common/src/tooling/vite.ts @@ -0,0 +1,2 @@ +export * from "./viteHtmlParamsPlugin"; +export * from "./vitePreactAlias"; diff --git a/packages/common/src/buildUtil/viteHtmlParamsPlugin.ts b/packages/common/src/tooling/viteHtmlParamsPlugin.ts similarity index 100% rename from packages/common/src/buildUtil/viteHtmlParamsPlugin.ts rename to packages/common/src/tooling/viteHtmlParamsPlugin.ts diff --git a/packages/common/src/buildUtil/vitePreactAlias.ts b/packages/common/src/tooling/vitePreactAlias.ts similarity index 100% rename from packages/common/src/buildUtil/vitePreactAlias.ts rename to packages/common/src/tooling/vitePreactAlias.ts diff --git a/packages/cursorless-org/vite.config.ts b/packages/cursorless-org/vite.config.ts index 7bdfc18731..364d3dc9d6 100644 --- a/packages/cursorless-org/vite.config.ts +++ b/packages/cursorless-org/vite.config.ts @@ -1,8 +1,5 @@ -import { - CURSORLESS_ORG_URL, - viteHtmlParams, - vitePreactAlias, -} from "@cursorless/common"; +import { CURSORLESS_ORG_URL } from "@cursorless/common"; +import { viteHtmlParams, vitePreactAlias } from "@cursorless/common/vite"; import type { UserConfig } from "vite"; import { defineConfig } from "vite"; import purgeCss from "vite-plugin-purgecss"; diff --git a/packages/cursorless-vscode-tutorial-webview/vite.config.ts b/packages/cursorless-vscode-tutorial-webview/vite.config.ts index 19325e5c65..c5714580e0 100644 --- a/packages/cursorless-vscode-tutorial-webview/vite.config.ts +++ b/packages/cursorless-vscode-tutorial-webview/vite.config.ts @@ -1,4 +1,4 @@ -import { vitePreactAlias } from "@cursorless/common"; +import { vitePreactAlias } from "@cursorless/common/vite"; import { defineConfig, type UserConfig } from "vite"; import purgeCss from "vite-plugin-purgecss"; From 7edc25f8c7611dd32de9991a1255a1196005a54a Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Mon, 16 Mar 2026 17:31:42 +0100 Subject: [PATCH 11/37] prettier --- packages/cursorless-engine/src/actions/Replace.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/cursorless-engine/src/actions/Replace.ts b/packages/cursorless-engine/src/actions/Replace.ts index bcebe009e3..a0bb7fef50 100644 --- a/packages/cursorless-engine/src/actions/Replace.ts +++ b/packages/cursorless-engine/src/actions/Replace.ts @@ -1,5 +1,9 @@ import type { IDE, ReplaceWith } from "@cursorless/common"; -import { FlashStyle, RangeExpansionBehavior, Selection } from "@cursorless/common"; +import { + FlashStyle, + RangeExpansionBehavior, + Selection, +} from "@cursorless/common"; import { zip } from "lodash-es"; import type { RangeUpdater } from "../core/updateSelections/RangeUpdater"; import { performEditsAndUpdateSelections } from "../core/updateSelections/updateSelections"; From e9dbeddd14e8519e24874d1de1c0d70920d0ca17 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Mon, 16 Mar 2026 17:34:33 +0100 Subject: [PATCH 12/37] Create out for railroad --- packages/cursorless-engine/package.json | 2 +- packages/cursorless-vscode/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cursorless-engine/package.json b/packages/cursorless-engine/package.json index 14a8f794a3..a9e19e7a1e 100644 --- a/packages/cursorless-engine/package.json +++ b/packages/cursorless-engine/package.json @@ -13,7 +13,7 @@ "generate-grammar:base": "nearleyc src/customCommandGrammar/grammar.ne", "ensure-grammar-up-to-date": "pnpm -s generate-grammar:base | diff -u src/customCommandGrammar/generated/grammar.ts -", "generate-grammar": "pnpm generate-grammar:base -o src/customCommandGrammar/generated/grammar.ts", - "generate-railroad": "nearley-railroad src/customCommandGrammar/grammar.ne -o out/railroad.html" + "generate-railroad": "mkdir -p out && nearley-railroad src/customCommandGrammar/grammar.ne -o out/railroad.html" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/cursorless-vscode/package.json b/packages/cursorless-vscode/package.json index 3a904ef1dd..dc2da97f16 100644 --- a/packages/cursorless-vscode/package.json +++ b/packages/cursorless-vscode/package.json @@ -1299,7 +1299,7 @@ "generate-grammar:base": "nearleyc src/keyboard/grammar/grammar.ne", "ensure-grammar-up-to-date": "pnpm -s generate-grammar:base | diff -u src/keyboard/grammar/generated/grammar.ts -", "generate-grammar": "pnpm generate-grammar:base -o src/keyboard/grammar/generated/grammar.ts", - "generate-railroad": "nearley-railroad src/keyboard/grammar/grammar.ne -o out/railroad.html", + "generate-railroad": "mkdir -p out && nearley-railroad src/keyboard/grammar/grammar.ne -o out/railroad.html", "test": "pnpm ensure-grammar-up-to-date", "typecheck": "tsc", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" From b9383f37f8c3d21377116e39a24e3fd8b12070a8 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 07:47:19 +0100 Subject: [PATCH 13/37] Clean up tsconfig --- packages/cheatsheet-local/tsconfig.json | 8 +------- packages/cheatsheet/tsconfig.json | 1 - .../src/types/global.d.ts | 17 ----------------- .../src/types/talon.d.ts | 2 +- .../tsconfig.json | 4 ---- .../cursorless-everywhere-talon/tsconfig.json | 6 ++---- packages/cursorless-org/tsconfig.json | 6 +----- 7 files changed, 5 insertions(+), 39 deletions(-) delete mode 100644 packages/cursorless-everywhere-talon-core/src/types/global.d.ts diff --git a/packages/cheatsheet-local/tsconfig.json b/packages/cheatsheet-local/tsconfig.json index 99383de7d2..585ad521cf 100644 --- a/packages/cheatsheet-local/tsconfig.json +++ b/packages/cheatsheet-local/tsconfig.json @@ -5,13 +5,7 @@ "lib": ["dom", "es2022"], "jsx": "react-jsx", "jsxImportSource": "preact", - "allowSyntheticDefaultImports": true, - "skipLibCheck": true, - "esModuleInterop": true, - "allowJs": true - }, - "ts-node": { - "esm": true + "skipLibCheck": true }, "include": [ "src/**/*.ts", diff --git a/packages/cheatsheet/tsconfig.json b/packages/cheatsheet/tsconfig.json index 6366ded442..585ad521cf 100644 --- a/packages/cheatsheet/tsconfig.json +++ b/packages/cheatsheet/tsconfig.json @@ -5,7 +5,6 @@ "lib": ["dom", "es2022"], "jsx": "react-jsx", "jsxImportSource": "preact", - "esModuleInterop": true, "skipLibCheck": true }, "include": [ diff --git a/packages/cursorless-everywhere-talon-core/src/types/global.d.ts b/packages/cursorless-everywhere-talon-core/src/types/global.d.ts deleted file mode 100644 index 458a1b9269..0000000000 --- a/packages/cursorless-everywhere-talon-core/src/types/global.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -// This file contains global type definitions. We are not compiling as node or -// browser so by default console doesn't exist and print is something that -// quickjs adds. - -declare namespace console { - function debug(...objs: any): void; - function log(...objs: any): void; - function warn(...objs: any): void; - function error(...objs: any): void; -} - -declare namespace performance { - function now(): number; -} - -declare function setTimeout(callback: () => void, ms: number): void; -declare function clearTimeout(timeoutId: unknown): void; diff --git a/packages/cursorless-everywhere-talon-core/src/types/talon.d.ts b/packages/cursorless-everywhere-talon-core/src/types/talon.d.ts index 047812aafe..adfbfd34ad 100644 --- a/packages/cursorless-everywhere-talon-core/src/types/talon.d.ts +++ b/packages/cursorless-everywhere-talon-core/src/types/talon.d.ts @@ -3,7 +3,7 @@ declare module "talon" { TalonActions, TalonContextConstructor, TalonSettings, - } from "./talon"; + } from "@cursorless/cursorless-everywhere-talon-core"; export const actions: TalonActions; export const settings: TalonSettings; diff --git a/packages/cursorless-everywhere-talon-core/tsconfig.json b/packages/cursorless-everywhere-talon-core/tsconfig.json index 58ce95ff23..d4fbbd0828 100644 --- a/packages/cursorless-everywhere-talon-core/tsconfig.json +++ b/packages/cursorless-everywhere-talon-core/tsconfig.json @@ -1,8 +1,4 @@ { "extends": "../../tsconfig.base.json", - "compilerOptions": { - "skipLibCheck": true, - "typeRoots": ["src/types", "node_modules/@types"] - }, "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-everywhere-talon/tsconfig.json b/packages/cursorless-everywhere-talon/tsconfig.json index 2220e96740..1198b856bd 100644 --- a/packages/cursorless-everywhere-talon/tsconfig.json +++ b/packages/cursorless-everywhere-talon/tsconfig.json @@ -1,12 +1,10 @@ { "extends": "../../tsconfig.base.json", - "compilerOptions": { - "skipLibCheck": true - }, "include": [ "src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts", - "../cursorless-everywhere-talon-core/src/types/**/*.d.ts" + "../cursorless-everywhere-talon-core/src/types/talon.d.ts", + "../cursorless-everywhere-talon-core/src/types/quickjs.d.ts" ] } diff --git a/packages/cursorless-org/tsconfig.json b/packages/cursorless-org/tsconfig.json index 321abc6bf0..db26b60037 100644 --- a/packages/cursorless-org/tsconfig.json +++ b/packages/cursorless-org/tsconfig.json @@ -6,11 +6,7 @@ "jsx": "react-jsx", "jsxImportSource": "preact", "skipLibCheck": true, - "noEmit": true, - "esModuleInterop": true, - "resolveJsonModule": true, - "isolatedModules": true, - "incremental": true + "isolatedModules": true }, "include": [ "src/**/*.ts", From 396dcfa10cbbd9b6f275a655bf5eab6b0a8868b3 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 07:49:29 +0100 Subject: [PATCH 14/37] Clean up tsconfig files --- packages/cursorless-everywhere-talon-e2e/tsconfig.json | 2 +- packages/cursorless-everywhere-talon/tsconfig.json | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/cursorless-everywhere-talon-e2e/tsconfig.json b/packages/cursorless-everywhere-talon-e2e/tsconfig.json index 6a4f79a85a..00a2affff5 100644 --- a/packages/cursorless-everywhere-talon-e2e/tsconfig.json +++ b/packages/cursorless-everywhere-talon-e2e/tsconfig.json @@ -4,6 +4,6 @@ "src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts", - "../cursorless-everywhere-talon-core/src/types/quickjs.d.ts" + "../cursorless-everywhere-talon-core/src/types/**/*.d.ts" ] } diff --git a/packages/cursorless-everywhere-talon/tsconfig.json b/packages/cursorless-everywhere-talon/tsconfig.json index 1198b856bd..00a2affff5 100644 --- a/packages/cursorless-everywhere-talon/tsconfig.json +++ b/packages/cursorless-everywhere-talon/tsconfig.json @@ -4,7 +4,6 @@ "src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts", - "../cursorless-everywhere-talon-core/src/types/talon.d.ts", - "../cursorless-everywhere-talon-core/src/types/quickjs.d.ts" + "../cursorless-everywhere-talon-core/src/types/**/*.d.ts" ] } From df51ca26f95ebd3c150406e247ed368aa7613a47 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 07:59:37 +0100 Subject: [PATCH 15/37] Revert in correct type changes --- packages/common/src/util/uniqWithHash.ts | 2 +- .../generateSpokenForm/generateSpokenForm.test.ts | 8 ++------ .../src/test/spokenForms.talon.test.ts | 4 +--- .../CursorlessCommandComponentParser.ts | 3 +-- .../src/suite/breakpoints.vscode.test.ts | 12 +++--------- .../src/suite/crossCellsSetSelection.vscode.test.ts | 5 +---- .../src/suite/intraCellSetSelection.vscode.test.ts | 8 ++------ .../src/FileSystemTutorialContentProvider.ts | 7 ++----- packages/node-common/src/walkAsync.ts | 3 +-- packages/node-common/src/walkSync.ts | 5 ++--- packages/test-case-recorder/src/TestCase.ts | 4 ++-- packages/test-harness/src/launchNeovimAndRunTests.ts | 2 +- 12 files changed, 19 insertions(+), 44 deletions(-) diff --git a/packages/common/src/util/uniqWithHash.ts b/packages/common/src/util/uniqWithHash.ts index 5233f041cc..5e01782395 100644 --- a/packages/common/src/util/uniqWithHash.ts +++ b/packages/common/src/util/uniqWithHash.ts @@ -51,7 +51,7 @@ export function uniqWithHash( // For hash collisions, uniq the items, // letting uniqWith provide correct semantics. needsUniq.forEach((key) => { - hashToItems.set(key, uniqWith(hashToItems.get(key) ?? [], isEqual)); + hashToItems.set(key, uniqWith(hashToItems.get(key), isEqual)); }); // To preserve order, step through the original items diff --git a/packages/cursorless-engine/src/generateSpokenForm/generateSpokenForm.test.ts b/packages/cursorless-engine/src/generateSpokenForm/generateSpokenForm.test.ts index 06871ee4f1..ee702a71cb 100644 --- a/packages/cursorless-engine/src/generateSpokenForm/generateSpokenForm.test.ts +++ b/packages/cursorless-engine/src/generateSpokenForm/generateSpokenForm.test.ts @@ -50,9 +50,7 @@ suite("Generate spoken forms", () => { regex: "foo", }); - if (spokenForm.type !== "success") { - assert.fail("Expected spoken form generation to succeed"); - } + assert(spokenForm.type === "success"); assert.equal(spokenForm.spokenForms, "bar"); }); }); @@ -77,9 +75,7 @@ async function runTest(file: string) { const hatMapSpokenForm = generator.processCommand( getHatMapCommand(fixture.marksToCheck), ); - if (hatMapSpokenForm.type !== "success") { - assert.fail("Expected hat map spoken form generation to succeed"); - } + assert(hatMapSpokenForm.type === "success"); assert(hatMapSpokenForm.spokenForms.length === 1); generatedSpokenForm.spokenForms[0] += " " + hatMapSpokenForm.spokenForms[0]; } diff --git a/packages/cursorless-engine/src/test/spokenForms.talon.test.ts b/packages/cursorless-engine/src/test/spokenForms.talon.test.ts index 8abcff1884..23b2829832 100644 --- a/packages/cursorless-engine/src/test/spokenForms.talon.test.ts +++ b/packages/cursorless-engine/src/test/spokenForms.talon.test.ts @@ -63,9 +63,7 @@ async function runRecordedFixture(repl: TalonRepl, file: string) { commands.push(getHatMapCommand(fixture.marksToCheck)); } - if (fixture.command.spokenForm == null) { - assert.fail("Expected spoken form to be defined"); - } + assert(fixture.command.spokenForm != null); await runTest(repl, fixture.command.spokenForm, commands); } diff --git a/packages/cursorless-tutorial/src/stepComponentParsers/CursorlessCommandComponentParser.ts b/packages/cursorless-tutorial/src/stepComponentParsers/CursorlessCommandComponentParser.ts index 0a5b28859f..d4fc10599a 100644 --- a/packages/cursorless-tutorial/src/stepComponentParsers/CursorlessCommandComponentParser.ts +++ b/packages/cursorless-tutorial/src/stepComponentParsers/CursorlessCommandComponentParser.ts @@ -115,9 +115,8 @@ function substituteMissingHats( // Update the hats in the initial state snapshot if (initialState.marks != null) { - const { marks } = initialState; initialState = produce(initialState, (draft) => { - draft.marks = mapKeys(marks, (_value, key) => { + draft.marks = mapKeys(draft.marks, (_value, key) => { const { hatStyle, character } = splitKey(key); if (enabledHatStyles[hatStyle] === undefined) { return getKey(Object.keys(enabledHatStyles)[0], character); diff --git a/packages/cursorless-vscode-e2e/src/suite/breakpoints.vscode.test.ts b/packages/cursorless-vscode-e2e/src/suite/breakpoints.vscode.test.ts index c8db5f815d..dc2b319d74 100644 --- a/packages/cursorless-vscode-e2e/src/suite/breakpoints.vscode.test.ts +++ b/packages/cursorless-vscode-e2e/src/suite/breakpoints.vscode.test.ts @@ -34,10 +34,8 @@ async function breakpointAdd() { const breakpoints = vscode.debug.breakpoints; assert.deepStrictEqual(breakpoints.length, 1); + assert.ok(breakpoints[0] instanceof vscode.SourceBreakpoint); const breakpoint = breakpoints[0]; - if (!(breakpoint instanceof vscode.SourceBreakpoint)) { - assert.fail("Expected breakpoint to be a SourceBreakpoint"); - } assert.ok(breakpoint.location.range.isEqual(new vscode.Range(0, 0, 0, 0))); } @@ -49,10 +47,8 @@ async function breakpointTokenAdd() { const breakpoints = vscode.debug.breakpoints; assert.deepStrictEqual(breakpoints.length, 1); + assert.ok(breakpoints[0] instanceof vscode.SourceBreakpoint); const breakpoint = breakpoints[0]; - if (!(breakpoint instanceof vscode.SourceBreakpoint)) { - assert.fail("Expected breakpoint to be a SourceBreakpoint"); - } assert.ok(breakpoint.location.range.isEqual(new vscode.Range(0, 2, 0, 7))); } @@ -94,10 +90,8 @@ async function breakpointTokenRemove() { const breakpoints = vscode.debug.breakpoints; assert.deepStrictEqual(breakpoints.length, 1); + assert.ok(breakpoints[0] instanceof vscode.SourceBreakpoint); const breakpoint = breakpoints[0]; - if (!(breakpoint instanceof vscode.SourceBreakpoint)) { - assert.fail("Expected breakpoint to be a SourceBreakpoint"); - } assert.ok(breakpoint.location.range.isEqual(new vscode.Range(0, 0, 0, 0))); } diff --git a/packages/cursorless-vscode-e2e/src/suite/crossCellsSetSelection.vscode.test.ts b/packages/cursorless-vscode-e2e/src/suite/crossCellsSetSelection.vscode.test.ts index c19b900683..9cd9b43aab 100644 --- a/packages/cursorless-vscode-e2e/src/suite/crossCellsSetSelection.vscode.test.ts +++ b/packages/cursorless-vscode-e2e/src/suite/crossCellsSetSelection.vscode.test.ts @@ -47,9 +47,6 @@ async function runTest() { const editor = window.activeTextEditor; - if (editor == null) { - assert.fail("No editor was focused"); - } - + assert.ok(editor != null, "No editor was focused"); assert.deepStrictEqual(editor.document.getText(editor.selection), "world"); } diff --git a/packages/cursorless-vscode-e2e/src/suite/intraCellSetSelection.vscode.test.ts b/packages/cursorless-vscode-e2e/src/suite/intraCellSetSelection.vscode.test.ts index 1f0a976383..09454b47bf 100644 --- a/packages/cursorless-vscode-e2e/src/suite/intraCellSetSelection.vscode.test.ts +++ b/packages/cursorless-vscode-e2e/src/suite/intraCellSetSelection.vscode.test.ts @@ -31,9 +31,7 @@ async function runTest() { ); }); - if (targetHat == null) { - assert.fail('Expected a default hat for "world" in the cell'); - } + assert(targetHat != null, 'Expected a default hat for "world" in the cell'); const { hatStyle, character } = splitKey(targetHat[0]); await runCursorlessCommand({ @@ -54,9 +52,7 @@ async function runTest() { const editor = window.activeTextEditor; - if (editor == null) { - assert.fail("No editor was focused"); - } + assert.ok(editor != null, "No editor was focused"); assert.deepStrictEqual(editor.document.getText(editor.selection), "world"); } diff --git a/packages/node-common/src/FileSystemTutorialContentProvider.ts b/packages/node-common/src/FileSystemTutorialContentProvider.ts index c9d5325e88..d62eb39c77 100644 --- a/packages/node-common/src/FileSystemTutorialContentProvider.ts +++ b/packages/node-common/src/FileSystemTutorialContentProvider.ts @@ -3,7 +3,6 @@ import type { TutorialContentProvider, TutorialId, } from "@cursorless/common"; -import type { Dirent } from "node:fs"; import { readFile, readdir } from "node:fs/promises"; import path from "path"; import { loadFixture } from "./loadFixture"; @@ -22,10 +21,8 @@ export class FileSystemTutorialContentProvider implements TutorialContentProvide return await Promise.all( tutorialDirs - .filter((dirent: Dirent) => dirent.isDirectory()) - .map((dirent: Dirent) => - this.loadTutorialScript(dirent.name as TutorialId), - ), + .filter((dirent) => dirent.isDirectory()) + .map((dirent) => this.loadTutorialScript(dirent.name as TutorialId)), ); } diff --git a/packages/node-common/src/walkAsync.ts b/packages/node-common/src/walkAsync.ts index 422ec62ba7..bd7abff7bf 100644 --- a/packages/node-common/src/walkAsync.ts +++ b/packages/node-common/src/walkAsync.ts @@ -1,4 +1,3 @@ -import type { Dirent } from "node:fs"; import * as path from "path"; import { readdir } from "fs/promises"; import { flatten } from "lodash-es"; @@ -18,7 +17,7 @@ export const walkFiles = async ( const files = flatten( await Promise.all( - dirEntries.map(async (dirent: Dirent) => { + dirEntries.map(async (dirent) => { const filePath = path.join(dir, dirent.name); return dirent.isDirectory() ? await walkFiles(filePath) : [filePath]; }), diff --git a/packages/node-common/src/walkSync.ts b/packages/node-common/src/walkSync.ts index 3439d8c01c..c5058e8869 100644 --- a/packages/node-common/src/walkSync.ts +++ b/packages/node-common/src/walkSync.ts @@ -1,4 +1,3 @@ -import type { Dirent } from "node:fs"; import * as path from "path"; import { readdirSync } from "fs"; @@ -11,7 +10,7 @@ import { readdirSync } from "fs"; */ export const walkFilesSync = (dir: string): string[] => { let filelist: string[] = []; - readdirSync(dir, { withFileTypes: true }).forEach((dirent: Dirent) => { + readdirSync(dir, { withFileTypes: true }).forEach((dirent) => { const filePath = path.join(dir, dirent.name); if (dirent.isDirectory()) { filelist = filelist.concat(walkFilesSync(filePath)); @@ -32,7 +31,7 @@ export const walkDirsSync = (dir: string): string[] => { // Inner function returns absolute paths const walkDirsSyncInner = (dir: string): string[] => { let dirlist: string[] = []; - readdirSync(dir, { withFileTypes: true }).forEach((dirent: Dirent) => { + readdirSync(dir, { withFileTypes: true }).forEach((dirent) => { if (dirent.isDirectory()) { const dirPath = path.join(dir, dirent.name); dirlist.push(dirPath); diff --git a/packages/test-case-recorder/src/TestCase.ts b/packages/test-case-recorder/src/TestCase.ts index fecd8c8169..e88171e678 100644 --- a/packages/test-case-recorder/src/TestCase.ts +++ b/packages/test-case-recorder/src/TestCase.ts @@ -210,12 +210,12 @@ export class TestCase { const keys = this.targetKeys.concat(marksToCheck); this.initialState!.marks = pick( - this.initialState!.marks!, + this.initialState!.marks, keys, ) as SerializedMarks; this.finalState!.marks = pick( - this.finalState!.marks!, + this.finalState!.marks, keys, ) as SerializedMarks; diff --git a/packages/test-harness/src/launchNeovimAndRunTests.ts b/packages/test-harness/src/launchNeovimAndRunTests.ts index 893be8bf3b..90ac2fc75e 100644 --- a/packages/test-harness/src/launchNeovimAndRunTests.ts +++ b/packages/test-harness/src/launchNeovimAndRunTests.ts @@ -107,7 +107,7 @@ export async function launchNeovimAndRunTests() { // read log file live and print to console // https://stackoverflow.com/questions/26788504/using-node-js-to-read-a-live-file-line-by-line let done = false; - let tailTest: Tail | undefined; + let tailTest; try { tailTest = new Tail(logName, { fromBeginning: true, From bf9dfdeede02d6f9b202609a5362df0e8942fdce Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 08:30:49 +0100 Subject: [PATCH 16/37] Replace my-ts-node --- package.json | 2 +- packages/cheatsheet-local/jest.config.ts | 1 - packages/common/package.json | 2 +- packages/common/scripts/c-tsx.js | 33 ++++++ packages/common/scripts/my-ts-node.js | 108 ------------------ .../neovim-test-infrastructure.md | 4 +- packages/cursorless-vscode/package.json | 21 ++-- packages/test-harness/package.json | 19 +-- pnpm-lock.yaml | 6 + 9 files changed, 64 insertions(+), 132 deletions(-) create mode 100644 packages/common/scripts/c-tsx.js delete mode 100755 packages/common/scripts/my-ts-node.js diff --git a/package.json b/package.json index c0da687a89..9aea352ff1 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "test:update": "pnpm -r test:update", "test:update:subset": "pnpm -r test:update:subset", "generate-grammar": "pnpm -r generate-grammar", - "transform-recorded-tests": "pnpm exec ./packages/common/scripts/my-ts-node.js ./packages/cursorless-engine/src/scripts/transformRecordedTests/index.ts" + "transform-recorded-tests": "c-tsx ./packages/cursorless-engine/src/scripts/transformRecordedTests/index.ts" }, "devDependencies": { "@eslint/config-helpers": "^0.5.3", diff --git a/packages/cheatsheet-local/jest.config.ts b/packages/cheatsheet-local/jest.config.ts index 5b68f60897..af74c7a652 100644 --- a/packages/cheatsheet-local/jest.config.ts +++ b/packages/cheatsheet-local/jest.config.ts @@ -6,7 +6,6 @@ const config: Config = { testEnvironment: "jsdom", moduleNameMapper: { ...preactModuleNameMapper, - "^@cursorless/cheatsheet$": "/../cheatsheet/src/index.ts", "\\.(css|scss)$": "/src/test/styleMock.ts", }, }; diff --git a/packages/common/package.json b/packages/common/package.json index 24ac23f468..0af5e399d8 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -5,7 +5,7 @@ "license": "MIT", "type": "module", "bin": { - "my-ts-node": "./scripts/my-ts-node.js" + "c-tsx": "./scripts/c-tsx.js" }, "exports": { ".": "./src/index.ts", diff --git a/packages/common/scripts/c-tsx.js b/packages/common/scripts/c-tsx.js new file mode 100644 index 0000000000..62325ae53b --- /dev/null +++ b/packages/common/scripts/c-tsx.js @@ -0,0 +1,33 @@ +#!/usr/bin/env node +/* global process, console */ + +import { spawn } from "node:child_process"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + +const [fileToRun, ...childArgs] = process.argv.slice(2); + +if (fileToRun == null) { + console.error("Error: No input file specified."); + console.error("Usage: c-tsx [script args...]"); + process.exit(1); +} + +const scriptDirectory = dirname(fileURLToPath(import.meta.url)); +const repoRoot = join(scriptDirectory, "../../.."); + +const child = spawn( + process.platform === "win32" ? "tsx.cmd" : "tsx", + [fileToRun, ...childArgs], + { + stdio: "inherit", + env: { + ...process.env, + CURSORLESS_REPO_ROOT: repoRoot, + }, + }, +); + +child.on("close", (code) => { + process.exit(code ?? undefined); +}); diff --git a/packages/common/scripts/my-ts-node.js b/packages/common/scripts/my-ts-node.js deleted file mode 100755 index 33cc3e1056..0000000000 --- a/packages/common/scripts/my-ts-node.js +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env node -// @ts-check -/* global process, console */ - -// This script runs a TypeScript file using Node.js by first bundling it with -// esbuild. - -import { spawn } from "cross-spawn"; -import { build } from "esbuild"; -import { existsSync, mkdirSync, rmSync } from "node:fs"; -import { fileURLToPath } from "node:url"; -import { dirname, join } from "node:path"; -import { randomBytes } from "node:crypto"; - -/** - * Run a command with arguments and return a child process - * @param {string} command - * @param {string[]} args - * @param {Partial?} extraEnv - */ -function runCommand(command, args, extraEnv = {}) { - return spawn(command, args, { - stdio: "inherit", - env: { - ...process.env, - ...extraEnv, - }, - }); -} - -/** - * Create a temporary directory and return its path - * @param {string} baseDir - */ -function createTempDirectory(baseDir) { - const tempDir = join( - baseDir, - "out", - "my-ts-node-tmp", - randomBytes(16).toString("hex"), - ); - - mkdirSync(tempDir, { recursive: true }); - - return tempDir; -} - -/** - * Clean up the temporary directory - * @param {import("fs").PathLike} tempDir - */ -function cleanupTempDirectory(tempDir) { - if (existsSync(tempDir)) { - rmSync(tempDir, { recursive: true }); - } -} - -// Main function to execute the script -async function main() { - const args = process.argv.slice(2); - - // Check if the input file is specified - if (args.length === 0) { - console.error("Error: No input file specified."); - console.error("Usage: my-ts-node [script args...]"); - process.exit(1); - } - - const [fileToRun, ...childArgs] = args; - - // Note that the temporary directory must be in the workspace root, otherwise - // VSCode will ignore the source maps, and breakpoints will not work. - const tempDir = createTempDirectory(process.cwd()); - const outFile = join(tempDir, "out.cjs"); - - // Set up cleanup for when the script exits - process.on("exit", () => cleanupTempDirectory(tempDir)); - process.on("SIGINT", () => cleanupTempDirectory(tempDir)); - process.on("SIGTERM", () => cleanupTempDirectory(tempDir)); - - // Run esbuild to bundle the TypeScript file - await build({ - entryPoints: [fileToRun], - sourcemap: true, - logLevel: "warning", - platform: "node", - bundle: true, - format: "cjs", - outfile: outFile, - external: ["./reporters/parallel-buffered", "./worker.js"], - }); - - const nodeProcess = runCommand( - process.execPath, - ["--enable-source-maps", outFile, ...childArgs], - { - ["CURSORLESS_REPO_ROOT"]: join( - dirname(fileURLToPath(import.meta.url)), - "..", - "..", - "..", - ), - }, - ); - nodeProcess.on("close", (code) => process.exit(code ?? undefined)); -} - -main(); diff --git a/packages/cursorless-org-docs/src/docs/contributing/architecture/neovim-test-infrastructure.md b/packages/cursorless-org-docs/src/docs/contributing/architecture/neovim-test-infrastructure.md index c528ae2a9f..f60b9b2958 100644 --- a/packages/cursorless-org-docs/src/docs/contributing/architecture/neovim-test-infrastructure.md +++ b/packages/cursorless-org-docs/src/docs/contributing/architecture/neovim-test-infrastructure.md @@ -17,7 +17,7 @@ init.lua And here is the call path when running Neovim tests on CI: ``` -.github/workflows/test.yml -> packages/test-harness/package.json -> my-ts-node src/scripts/runNeovimTestsCI.ts -> packages/test-harness/src/launchNeovimAndRunTests.ts +.github/workflows/test.yml -> packages/test-harness/package.json -> c-tsx src/scripts/runNeovimTestsCI.ts -> packages/test-harness/src/launchNeovimAndRunTests.ts launchNeovimAndRunTests.ts -> copies packages/test-harness/src/config/init.lua to default nvim config folder @@ -215,7 +215,7 @@ if: runner.os == 'Linux' && matrix.app_version == 'stable' This triggers the script in `packages/test-harness/package.json`: ```json -"test:neovim": "env CURSORLESS_MODE=test my-ts-node src/scripts/runNeovimTestsCI.ts", +"test:neovim": "c-tsx src/scripts/runNeovimTestsCI.ts", ``` This ends up calling the default function from `package/test-harness/src/scripts/runNeovimTestsCI.ts` which calls `launchNeovimAndRunTests()` from `packages/test-harness/src/launchNeovimAndRunTests.ts`: diff --git a/packages/cursorless-vscode/package.json b/packages/cursorless-vscode/package.json index dc2da97f16..e70bd3a01f 100644 --- a/packages/cursorless-vscode/package.json +++ b/packages/cursorless-vscode/package.json @@ -1291,15 +1291,15 @@ "bundle:watch": "pnpm run bundle:base --sourcemap --watch", "bundle": "pnpm run bundle:base --minify", "bundle:meta": "pnpm run bundle:base --metafile=meta.json", - "populate-dist": "my-ts-node ./src/scripts/populateDist/index.ts", - "init-launch-sandbox": "my-ts-node src/scripts/initLaunchSandbox.ts", - "preprocess-svg-hats": "my-ts-node src/scripts/preprocessSvgHats.ts", - "hat-adjustment-add": "my-ts-node src/scripts/hatAdjustments/add.ts", - "hat-adjustment-average": "my-ts-node src/scripts/hatAdjustments/average.ts", - "generate-grammar:base": "nearleyc src/keyboard/grammar/grammar.ne", - "ensure-grammar-up-to-date": "pnpm -s generate-grammar:base | diff -u src/keyboard/grammar/generated/grammar.ts -", - "generate-grammar": "pnpm generate-grammar:base -o src/keyboard/grammar/generated/grammar.ts", - "generate-railroad": "mkdir -p out && nearley-railroad src/keyboard/grammar/grammar.ne -o out/railroad.html", + "populate-dist": "c-tsx ./src/scripts/populateDist/index.ts", + "init-launch-sandbox": "c-tsx ./src/scripts/initLaunchSandbox.ts", + "preprocess-svg-hats": "c-tsx ./src/scripts/preprocessSvgHats.ts", + "hat-adjustment-add": "c-tsx ./src/scripts/hatAdjustments/add.ts", + "hat-adjustment-average": "c-tsx ./src/scripts/hatAdjustments/average.ts", + "generate-grammar:base": "nearleyc ./src/keyboard/grammar/grammar.ne", + "ensure-grammar-up-to-date": "pnpm -s generate-grammar:base | diff -u ./src/keyboard/grammar/generated/grammar.ts -", + "generate-grammar": "pnpm generate-grammar:base -o ./src/keyboard/grammar/generated/grammar.ts", + "generate-railroad": "mkdir -p out && nearley-railroad ./src/keyboard/grammar/grammar.ne -o out/railroad.html", "test": "pnpm ensure-grammar-up-to-date", "typecheck": "tsc", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" @@ -1336,6 +1336,7 @@ "esbuild": "^0.27.4", "fast-xml-parser": "^5.5.5", "fs-extra": "^11.3.4", - "sinon": "^21.0.2" + "sinon": "^21.0.2", + "tsx": "^4.21.0" } } diff --git a/packages/test-harness/package.json b/packages/test-harness/package.json index 646ba4210f..125f257f9c 100644 --- a/packages/test-harness/package.json +++ b/packages/test-harness/package.json @@ -13,16 +13,16 @@ } }, "scripts": { - "test": "my-ts-node src/scripts/runUnitTestsOnly.ts", - "test:subset": "my-ts-node src/scripts/runUnitTestsOnly.ts --subset", - "test:update": "my-ts-node src/scripts/runUnitTestsOnly.ts --update", - "test:update:subset": "my-ts-node src/scripts/runUnitTestsOnly.ts --update --subset", + "test": "c-tsx ./src/scripts/runUnitTestsOnly.ts", + "test:subset": "c-tsx ./src/scripts/runUnitTestsOnly.ts --subset", + "test:update": "c-tsx ./src/scripts/runUnitTestsOnly.ts --update", + "test:update:subset": "c-tsx ./src/scripts/runUnitTestsOnly.ts --update --subset", "pretest:vscode": "pnpm run bundle:runner:vscode && pnpm run bundle:tests", - "test:vscode": "my-ts-node src/scripts/runVscodeTestsCI.ts", + "test:vscode": "c-tsx ./src/scripts/runVscodeTestsCI.ts", "pretest:neovim": "pnpm run bundle:runner:neovim && pnpm run bundle:tests", - "test:neovim": "my-ts-node src/scripts/runNeovimTestsCI.ts", + "test:neovim": "c-tsx ./src/scripts/runNeovimTestsCI.ts", "pretest:talonJs": "pnpm run bundle:tests", - "test:talonJs": "my-ts-node src/scripts/runTalonJsTests.ts", + "test:talonJs": "c-tsx ./src/scripts/runTalonJsTests.ts", "bundle:base": "bash ./scripts/compile-esbuild.sh", "bundle": "pnpm run bundle:runner:vscode && pnpm run bundle:runner:neovim && pnpm run bundle:tests", "bundle:runner:vscode": "pnpm run bundle:base ./src/runners/extensionTestsVscode.ts --outfile=dist/extensionTestsVscode.cjs", @@ -30,8 +30,8 @@ "bundle:tests": "bash ./scripts/build-tests.sh", "typecheck": "tsc", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", - "generate-test-subset-file": "my-ts-node ./src/scripts/generateTestSubsetFile.ts --always-open", - "generate-test-subset-file-strict": "my-ts-node ./src/scripts/generateTestSubsetFile.ts --fail-if-not-exists" + "generate-test-subset-file": "c-tsx ./src/scripts/generateTestSubsetFile.ts --always-open", + "generate-test-subset-file-strict": "c-tsx ./src/scripts/generateTestSubsetFile.ts --fail-if-not-exists" }, "dependencies": { "@cursorless/common": "workspace:*", @@ -50,6 +50,7 @@ "@vscode/test-electron": "^2.5.2", "cross-spawn": "^7.0.6", "mocha": "^11.7.5", + "tsx": "^4.21.0", "web-tree-sitter": "^0.26.7" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f0956d73df..4552feba9d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -660,6 +660,9 @@ importers: sinon: specifier: ^21.0.2 version: 21.0.2 + tsx: + specifier: ^4.21.0 + version: 4.21.0 packages/cursorless-vscode-e2e: dependencies: @@ -918,6 +921,9 @@ importers: mocha: specifier: ^11.7.5 version: 11.7.5 + tsx: + specifier: ^4.21.0 + version: 4.21.0 web-tree-sitter: specifier: ^0.26.7 version: 0.26.7 From 6978e6dc5710cdd801d560f763ca48a4c3c69967 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 10:11:42 +0100 Subject: [PATCH 17/37] +x --- packages/common/scripts/c-tsx.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 packages/common/scripts/c-tsx.js diff --git a/packages/common/scripts/c-tsx.js b/packages/common/scripts/c-tsx.js old mode 100644 new mode 100755 From 419c971c8c35daca00c0e0cde6c8452d095b8f03 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 10:32:06 +0100 Subject: [PATCH 18/37] c-tsx --- package.json | 2 +- packages/common/scripts/c-tsx.js | 122 +++++++++++++++++++++++++------ 2 files changed, 102 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 9aea352ff1..59ca031d76 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "test:update": "pnpm -r test:update", "test:update:subset": "pnpm -r test:update:subset", "generate-grammar": "pnpm -r generate-grammar", - "transform-recorded-tests": "c-tsx ./packages/cursorless-engine/src/scripts/transformRecordedTests/index.ts" + "transform-recorded-tests": "pnpm exec ./packages/common/scripts/c-tsx.js ./packages/cursorless-engine/src/scripts/transformRecordedTests/index.ts" }, "devDependencies": { "@eslint/config-helpers": "^0.5.3", diff --git a/packages/common/scripts/c-tsx.js b/packages/common/scripts/c-tsx.js index 62325ae53b..93783e56b1 100755 --- a/packages/common/scripts/c-tsx.js +++ b/packages/common/scripts/c-tsx.js @@ -1,33 +1,113 @@ #!/usr/bin/env node /* global process, console */ -import { spawn } from "node:child_process"; -import { dirname, join } from "node:path"; +// This script runs a TypeScript file using Node.js by first bundling it with +// esbuild. + +import { spawn } from "cross-spawn"; +import { build } from "esbuild"; +import { existsSync, mkdirSync, rmSync } from "node:fs"; import { fileURLToPath } from "node:url"; +import { dirname, join } from "node:path"; +import { randomBytes } from "node:crypto"; + +/** + * Run a command with arguments and return a child process + * @param {string} command + * @param {string[]} args + * @param {Partial?} extraEnv + */ +function runCommand(command, args, extraEnv = {}) { + return spawn(command, args, { + stdio: "inherit", + env: { + ...process.env, + ...extraEnv, + }, + }); +} -const [fileToRun, ...childArgs] = process.argv.slice(2); +/** + * Create a temporary directory and return its path + * @param {string} baseDir + */ +function createTempDirectory(baseDir) { + const tempDir = join( + baseDir, + "out", + "c-tsx-tmp", + randomBytes(16).toString("hex"), + ); -if (fileToRun == null) { - console.error("Error: No input file specified."); - console.error("Usage: c-tsx [script args...]"); - process.exit(1); + mkdirSync(tempDir, { recursive: true }); + + return tempDir; +} + +/** + * Clean up the temporary directory + * @param {import("fs").PathLike} tempDir + */ +function cleanupTempDirectory(tempDir) { + if (existsSync(tempDir)) { + rmSync(tempDir, { recursive: true }); + } } -const scriptDirectory = dirname(fileURLToPath(import.meta.url)); -const repoRoot = join(scriptDirectory, "../../.."); +// Main function to execute the script +async function main() { + const args = process.argv.slice(2); -const child = spawn( - process.platform === "win32" ? "tsx.cmd" : "tsx", - [fileToRun, ...childArgs], - { - stdio: "inherit", - env: { - ...process.env, - CURSORLESS_REPO_ROOT: repoRoot, + // Check if the input file is specified + if (args.length === 0) { + console.error("Error: No input file specified."); + console.error("Usage: c-tsx [script args...]"); + process.exit(1); + } + + const [fileToRun, ...childArgs] = args; + + // Note that the temporary directory must be in the workspace root, otherwise + // VSCode will ignore the source maps, and breakpoints will not work. + const tempDir = createTempDirectory(process.cwd()); + const outFile = join(tempDir, "out.cjs"); + + // Set up cleanup for when the script exits + process.on("exit", () => cleanupTempDirectory(tempDir)); + process.on("SIGINT", () => cleanupTempDirectory(tempDir)); + process.on("SIGTERM", () => cleanupTempDirectory(tempDir)); + + // Run esbuild to bundle the TypeScript file + await build({ + entryPoints: [fileToRun], + sourcemap: true, + conditions: ["cursorless:bundler"], + logLevel: "warning", + platform: "node", + bundle: true, + format: "cjs", + outfile: outFile, + external: ["./reporters/parallel-buffered", "./worker.js"], + }); + + const scriptDirectory = dirname(fileURLToPath(import.meta.url)); + const repoRoot = join(scriptDirectory, "..", "..", ".."); + + const nodeProcess = runCommand( + process.execPath, + ["--enable-source-maps", outFile, ...childArgs], + { + ["CURSORLESS_REPO_ROOT"]: repoRoot, }, - }, -); + ); + nodeProcess.on("error", (error) => { + console.error(error); + process.exit(1); + }); + nodeProcess.on("close", (code) => process.exit(code ?? undefined)); +} -child.on("close", (code) => { - process.exit(code ?? undefined); +main().catch((error) => { + console.error(error); + process.exit(1); }); From e6d95c5149fc0b9048636d0f9976b51e0a69fcf0 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 10:39:36 +0100 Subject: [PATCH 19/37] Run type check as part of lint script --- .github/workflows/test.yml | 3 --- package.json | 2 +- .../src/polyfill.ts | 17 +++++++++-------- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 71f2f838c8..e6f7b05dd2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -27,9 +27,6 @@ jobs: - name: Set up Node.js uses: ./.github/actions/setup-node - - name: Typecheck - run: pnpm --color typecheck - - name: Lint run: pnpm --color lint diff --git a/package.json b/package.json index 59ca031d76..fbaa4159b7 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "lint:ts": "eslint packages", "lint:prettier": "prettier --check .", "lint:style": "stylelint '**/*.{css,scss}'", - "lint": "pnpm run lint:meta && pnpm run lint:syncpack && pnpm run lint:ts && pnpm run lint:style", + "lint": "pnpm run typecheck && pnpm run lint:meta && pnpm run lint:syncpack && pnpm run lint:ts && pnpm run lint:style", "init-vscode-sandbox": "pnpm -F @cursorless/cursorless-vscode init-launch-sandbox", "meta-updater": "env NODE_OPTIONS=--import=tsx meta-updater", "preinstall": "npx only-allow pnpm", diff --git a/packages/cursorless-everywhere-talon-core/src/polyfill.ts b/packages/cursorless-everywhere-talon-core/src/polyfill.ts index 5c2de28855..002f71d75f 100644 --- a/packages/cursorless-everywhere-talon-core/src/polyfill.ts +++ b/packages/cursorless-everywhere-talon-core/src/polyfill.ts @@ -14,7 +14,7 @@ if (global.performance == null) { } // Allows us to use `console.*` with quickjs -if (typeof print !== "undefined") { +if (global.console == null && typeof print === "function") { global.console = { log: print, error: print, @@ -26,10 +26,11 @@ if (typeof print !== "undefined") { // In quickjs `setTimeout` is not available. // FIXME: Remove dependency on `setTimeout` in the future. // https://github.com/cursorless-dev/cursorless/issues/2596 -global.setTimeout = (callback: () => void, _delay: number) => { - callback(); -}; - -global.clearTimeout = (_timeoutId: unknown) => { - // no-op -}; +if (global.setTimeout == null) { + global.setTimeout = (callback: () => void, _delay: number) => { + callback(); + }; + global.clearTimeout = (_timeoutId: unknown) => { + // no-op + }; +} From 997c6f55a51ad1b71f8e0e04680710d8595bbbe1 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 10:41:04 +0100 Subject: [PATCH 20/37] Remove root compile-esbuild.sh script since it's no longer used. --- scripts/compile-esbuild.sh | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100755 scripts/compile-esbuild.sh diff --git a/scripts/compile-esbuild.sh b/scripts/compile-esbuild.sh deleted file mode 100755 index eb4f989f4d..0000000000 --- a/scripts/compile-esbuild.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -esbuild \ - ./src/index.ts \ - --outfile=./out/index.js \ - --format=esm \ - --bundle \ - --packages=external \ - --sourcemap \ - "$@" From a636995e202267b1f38d8587cbda42eada4f7d24 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 11:12:48 +0100 Subject: [PATCH 21/37] Sort scripts --- packages/cheatsheet-local/package.json | 6 +-- packages/cheatsheet/package.json | 5 ++- packages/common/package.json | 3 +- packages/cursorless-cheatsheet/package.json | 3 +- packages/cursorless-engine/package.json | 3 +- .../package.json | 3 +- .../package.json | 4 +- .../cursorless-everywhere-talon/package.json | 12 +++--- packages/cursorless-neovim/package.json | 13 +++--- packages/cursorless-org-docs/package.json | 14 ++----- packages/cursorless-org/package.json | 4 +- packages/cursorless-tutorial/package.json | 3 +- .../package.json | 4 +- packages/cursorless-vscode/package.json | 18 ++++---- .../meta-updater/src/updatePackageJson.ts | 42 ++++++++++++------- packages/neovim-common/package.json | 3 +- packages/neovim-registry/package.json | 3 +- packages/node-common/package.json | 3 +- packages/sentence-parser/package.json | 3 +- packages/test-case-recorder/package.json | 3 +- packages/test-harness/package.json | 10 ++--- packages/vscode-common/package.json | 3 +- 22 files changed, 91 insertions(+), 74 deletions(-) diff --git a/packages/cheatsheet-local/package.json b/packages/cheatsheet-local/package.json index 6f5cec5c2c..f022f754e0 100644 --- a/packages/cheatsheet-local/package.json +++ b/packages/cheatsheet-local/package.json @@ -11,13 +11,13 @@ ".": "./out/index.js" }, "scripts": { - "test": "jest", "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", + "test": "jest", "dev": "env NODE_OPTIONS=--import=tsx vite serve", "bundle": "env NODE_OPTIONS=--import=tsx vite build", "bundle:dev": "env NODE_OPTIONS=--import=tsx vite build --mode development", - "bundle:watch": "env NODE_OPTIONS=--import=tsx vite build --mode development --watch", - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" + "bundle:watch": "env NODE_OPTIONS=--import=tsx vite build --mode development --watch" }, "dependencies": { "@cursorless/cheatsheet": "workspace:*", diff --git a/packages/cheatsheet/package.json b/packages/cheatsheet/package.json index a23b72f50d..3611f73e41 100644 --- a/packages/cheatsheet/package.json +++ b/packages/cheatsheet/package.json @@ -12,8 +12,9 @@ "*.css" ], "scripts": { - "test": "jest", - "typecheck": "tsc" + "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", + "test": "jest" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/common/package.json b/packages/common/package.json index 0af5e399d8..e04c16b265 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -13,7 +13,8 @@ "./vite": "./src/tooling/vite.ts" }, "scripts": { - "typecheck": "tsc" + "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { "itertools": "^2.6.0", diff --git a/packages/cursorless-cheatsheet/package.json b/packages/cursorless-cheatsheet/package.json index 704b664b74..26f3f0810b 100644 --- a/packages/cursorless-cheatsheet/package.json +++ b/packages/cursorless-cheatsheet/package.json @@ -8,7 +8,8 @@ ".": "./src/index.ts" }, "scripts": { - "typecheck": "tsc" + "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/cursorless-engine/package.json b/packages/cursorless-engine/package.json index a9e19e7a1e..949b970a36 100644 --- a/packages/cursorless-engine/package.json +++ b/packages/cursorless-engine/package.json @@ -9,11 +9,12 @@ }, "scripts": { "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", "test": "pnpm ensure-grammar-up-to-date", "generate-grammar:base": "nearleyc src/customCommandGrammar/grammar.ne", "ensure-grammar-up-to-date": "pnpm -s generate-grammar:base | diff -u src/customCommandGrammar/generated/grammar.ts -", "generate-grammar": "pnpm generate-grammar:base -o src/customCommandGrammar/generated/grammar.ts", - "generate-railroad": "mkdir -p out && nearley-railroad src/customCommandGrammar/grammar.ne -o out/railroad.html" + "generate-railroad": "mkdir out && nearley-railroad src/customCommandGrammar/grammar.ne -o out/railroad.html" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/cursorless-everywhere-talon-core/package.json b/packages/cursorless-everywhere-talon-core/package.json index d82ec6ec55..dae5e8701a 100644 --- a/packages/cursorless-everywhere-talon-core/package.json +++ b/packages/cursorless-everywhere-talon-core/package.json @@ -8,7 +8,8 @@ ".": "./src/index.ts" }, "scripts": { - "typecheck": "tsc" + "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/cursorless-everywhere-talon-e2e/package.json b/packages/cursorless-everywhere-talon-e2e/package.json index 3a0ecab721..ae766bc8a2 100644 --- a/packages/cursorless-everywhere-talon-e2e/package.json +++ b/packages/cursorless-everywhere-talon-e2e/package.json @@ -8,8 +8,8 @@ "main": "./out/index.js", "scripts": { "typecheck": "tsc", - "test:quickjs": "bash scripts/test-quickjs.sh", - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", + "test:quickjs": "bash scripts/test-quickjs.sh" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/cursorless-everywhere-talon/package.json b/packages/cursorless-everywhere-talon/package.json index 951b8b69ac..b3177d185d 100644 --- a/packages/cursorless-everywhere-talon/package.json +++ b/packages/cursorless-everywhere-talon/package.json @@ -7,15 +7,15 @@ "type": "module", "main": "./out/index.js", "scripts": { - "bundle:dev": "pnpm run bundle:base src/mainDevelopment.ts", + "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", + "dev": "pnpm run bundle:watch", + "build": "pnpm run bundle", "bundle": "pnpm run bundle:base --minify src/mainProduction.ts", + "bundle:dev": "pnpm run bundle:base src/mainDevelopment.ts", "bundle:watch": "pnpm run bundle:base --watch src/mainDevelopment.ts", "bundle:profile": "pnpm run bundle:base --metafile=meta.json src/mainDevelopment.ts", - "bundle:base": "bash scripts/esbuild.sh", - "dev": "pnpm run bundle:watch", - "build": "pnpm run bundle", - "typecheck": "tsc", - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" + "bundle:base": "bash scripts/esbuild.sh" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/cursorless-neovim/package.json b/packages/cursorless-neovim/package.json index 820c0d5a2f..32cd9010f6 100644 --- a/packages/cursorless-neovim/package.json +++ b/packages/cursorless-neovim/package.json @@ -10,16 +10,15 @@ ".": "./out/index.cjs" }, "scripts": { - "build": "pnpm -F @cursorless/test-harness bundle:runner:neovim && pnpm run bundle && pnpm run populate-dist", - "dev": "pnpm run bundle:dev && pnpm run populate-dist", "typecheck": "tsc", - "bundle:base": "bash ./scripts/compile-esbuild.sh", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", + "dev": "pnpm run bundle:dev && pnpm run populate-dist", + "build": "pnpm -F @cursorless/test-harness bundle:runner:neovim && pnpm run bundle && pnpm run populate-dist", + "bundle": "pnpm run bundle:base --minify", "bundle:dev": "pnpm run bundle:base --sourcemap", "bundle:watch": "pnpm run bundle:base --sourcemap --watch", - "bundle": "pnpm run bundle:base --minify", - "populate-dist": "bash ./scripts/populate-dist.sh", - "populate-dist:prod": "bash ./scripts/populate-dist.sh", - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" + "bundle:base": "bash ./scripts/compile-esbuild.sh", + "populate-dist": "bash ./scripts/populate-dist.sh" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/cursorless-org-docs/package.json b/packages/cursorless-org-docs/package.json index f22e8e3b4d..9e48dc413c 100644 --- a/packages/cursorless-org-docs/package.json +++ b/packages/cursorless-org-docs/package.json @@ -22,18 +22,10 @@ ] }, "scripts": { - "docusaurus": "docusaurus", - "dev": "docusaurus start", - "start": "docusaurus start", - "build": "docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids", "typecheck": "tsc", - "clean": "pnpm clear && rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" + "clean": "docusaurus clear && rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", + "dev": "docusaurus start", + "build": "docusaurus build" }, "dependencies": { "@algolia/client-search": "^5.49.2", diff --git a/packages/cursorless-org/package.json b/packages/cursorless-org/package.json index 85fb2ed7ce..2341333905 100644 --- a/packages/cursorless-org/package.json +++ b/packages/cursorless-org/package.json @@ -12,9 +12,9 @@ }, "scripts": { "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", "dev": "env NODE_OPTIONS=--import=tsx vite serve", - "build": "env NODE_OPTIONS=--import=tsx vite build", - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" + "build": "env NODE_OPTIONS=--import=tsx vite build" }, "dependencies": { "@cursorless/cheatsheet": "workspace:*", diff --git a/packages/cursorless-tutorial/package.json b/packages/cursorless-tutorial/package.json index fdaa78b638..946fc11b27 100644 --- a/packages/cursorless-tutorial/package.json +++ b/packages/cursorless-tutorial/package.json @@ -8,7 +8,8 @@ ".": "./src/index.ts" }, "scripts": { - "typecheck": "tsc" + "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/cursorless-vscode-tutorial-webview/package.json b/packages/cursorless-vscode-tutorial-webview/package.json index e4537cd30b..a95f69eb10 100644 --- a/packages/cursorless-vscode-tutorial-webview/package.json +++ b/packages/cursorless-vscode-tutorial-webview/package.json @@ -8,11 +8,11 @@ "main": "./out/index.js", "scripts": { "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", "dev": "env NODE_OPTIONS=--import=tsx vite serve", "bundle": "env NODE_OPTIONS=--import=tsx vite build", "bundle:dev": "env NODE_OPTIONS=--import=tsx vite build --mode development", - "bundle:watch": "env NODE_OPTIONS=--import=tsx vite build --mode development --watch", - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" + "bundle:watch": "env NODE_OPTIONS=--import=tsx vite build --mode development --watch" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/cursorless-vscode/package.json b/packages/cursorless-vscode/package.json index e70bd3a01f..a6d3748d00 100644 --- a/packages/cursorless-vscode/package.json +++ b/packages/cursorless-vscode/package.json @@ -1281,16 +1281,19 @@ ] }, "scripts": { - "build": "pnpm generate-grammar && pnpm -F @cursorless/cheatsheet-local bundle && pnpm -F @cursorless/cursorless-vscode-tutorial-webview bundle && pnpm run bundle && pnpm run populate-dist", + "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", + "test": "pnpm ensure-grammar-up-to-date", "dev": "pnpm generate-grammar && pnpm -F @cursorless/cursorless-vscode-tutorial-webview bundle:dev && pnpm run bundle:dev && pnpm run populate-dist", + "build": "pnpm generate-grammar && pnpm -F @cursorless/cheatsheet-local bundle && pnpm -F @cursorless/cursorless-vscode-tutorial-webview bundle && pnpm run bundle && pnpm run populate-dist", + "bundle": "pnpm run bundle:base --minify", + "bundle:dev": "pnpm run bundle:base --sourcemap", + "bundle:watch": "pnpm run bundle:base --sourcemap --watch", + "bundle:meta": "pnpm run bundle:base --metafile=meta.json", "bundle:base": "bash ./scripts/compile-esbuild.sh", "install-local": "bash ./scripts/install-local.sh", "install-from-pr": "bash ./scripts/install-from-pr.sh", "uninstall-local": "bash ./scripts/uninstall-local.sh", - "bundle:dev": "pnpm run bundle:base --sourcemap", - "bundle:watch": "pnpm run bundle:base --sourcemap --watch", - "bundle": "pnpm run bundle:base --minify", - "bundle:meta": "pnpm run bundle:base --metafile=meta.json", "populate-dist": "c-tsx ./src/scripts/populateDist/index.ts", "init-launch-sandbox": "c-tsx ./src/scripts/initLaunchSandbox.ts", "preprocess-svg-hats": "c-tsx ./src/scripts/preprocessSvgHats.ts", @@ -1299,10 +1302,7 @@ "generate-grammar:base": "nearleyc ./src/keyboard/grammar/grammar.ne", "ensure-grammar-up-to-date": "pnpm -s generate-grammar:base | diff -u ./src/keyboard/grammar/generated/grammar.ts -", "generate-grammar": "pnpm generate-grammar:base -o ./src/keyboard/grammar/generated/grammar.ts", - "generate-railroad": "mkdir -p out && nearley-railroad ./src/keyboard/grammar/grammar.ne -o out/railroad.html", - "test": "pnpm ensure-grammar-up-to-date", - "typecheck": "tsc", - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" + "generate-railroad": "mkdir out && nearley-railroad ./src/keyboard/grammar/grammar.ne -o out/railroad.html" }, "extensionDependencies": [ "pokey.parse-tree" diff --git a/packages/meta-updater/src/updatePackageJson.ts b/packages/meta-updater/src/updatePackageJson.ts index a0634f1261..bab0dd56ac 100644 --- a/packages/meta-updater/src/updatePackageJson.ts +++ b/packages/meta-updater/src/updatePackageJson.ts @@ -85,7 +85,7 @@ async function getScripts( name: string | undefined, packageDir: string, isRoot: boolean, - isLib: boolean, + _isLib: boolean, ) { const scripts: PackageJson.Scripts = { ...(inputScripts ?? {}), @@ -97,20 +97,34 @@ async function getScripts( scripts.typecheck = "tsc"; - if (!isLib) { - const cleanDirs = ["./out", "tsconfig.tsbuildinfo", "./dist", "./build"]; - const clean = `rm -rf ${cleanDirs.join(" ")}`; - const cleanScripts = - name === "@cursorless/cursorless-org-docs" - ? ["pnpm clear", clean] - : [clean]; - - scripts.clean = cleanScripts.join(" && "); - } else { - delete scripts.clean; - } + const cleanDirs = ["./out", "tsconfig.tsbuildinfo", "./dist", "./build"]; + const clean = `rm -rf ${cleanDirs.join(" ")}`; + const cleanScripts = + name === "@cursorless/cursorless-org-docs" + ? ["docusaurus clear", clean] + : [clean]; + + scripts.clean = cleanScripts.join(" && "); + + const orderedKeys = [ + "typecheck", + "clean", + "test", + "pretest", + "dev", + "build", + "bundle", + ]; + const getOrder = (key: string) => { + const index = orderedKeys.findIndex((k) => key.startsWith(k)); + return index === -1 ? Number.POSITIVE_INFINITY : index; + }; - return scripts; + return Object.fromEntries( + Object.entries(scripts).sort( + ([keyA], [keyB]) => getOrder(keyA) - getOrder(keyB), + ), + ); } function removeEmptyFields(obj: Record) { diff --git a/packages/neovim-common/package.json b/packages/neovim-common/package.json index 772d7d498d..bf041e35ae 100644 --- a/packages/neovim-common/package.json +++ b/packages/neovim-common/package.json @@ -8,7 +8,8 @@ ".": "./src/index.ts" }, "scripts": { - "typecheck": "tsc" + "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/neovim-registry/package.json b/packages/neovim-registry/package.json index 4f33079b8f..2f23211194 100644 --- a/packages/neovim-registry/package.json +++ b/packages/neovim-registry/package.json @@ -8,7 +8,8 @@ ".": "./src/index.ts" }, "scripts": { - "typecheck": "tsc" + "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "devDependencies": { "neovim": "^5.4.0" diff --git a/packages/node-common/package.json b/packages/node-common/package.json index 0762a83c85..4c6e7d7ac8 100644 --- a/packages/node-common/package.json +++ b/packages/node-common/package.json @@ -8,7 +8,8 @@ ".": "./src/index.ts" }, "scripts": { - "typecheck": "tsc" + "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/sentence-parser/package.json b/packages/sentence-parser/package.json index bf7a7f59a4..5641631e5f 100644 --- a/packages/sentence-parser/package.json +++ b/packages/sentence-parser/package.json @@ -8,7 +8,8 @@ ".": "./src/index.ts" }, "scripts": { - "typecheck": "tsc" + "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "devDependencies": { "@types/mocha": "^10.0.10", diff --git a/packages/test-case-recorder/package.json b/packages/test-case-recorder/package.json index 8186f4ca49..ce8264a7e5 100644 --- a/packages/test-case-recorder/package.json +++ b/packages/test-case-recorder/package.json @@ -8,7 +8,8 @@ ".": "./src/index.ts" }, "scripts": { - "typecheck": "tsc" + "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/test-harness/package.json b/packages/test-harness/package.json index 125f257f9c..83b7fa2be1 100644 --- a/packages/test-harness/package.json +++ b/packages/test-harness/package.json @@ -13,23 +13,23 @@ } }, "scripts": { + "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", "test": "c-tsx ./src/scripts/runUnitTestsOnly.ts", "test:subset": "c-tsx ./src/scripts/runUnitTestsOnly.ts --subset", "test:update": "c-tsx ./src/scripts/runUnitTestsOnly.ts --update", "test:update:subset": "c-tsx ./src/scripts/runUnitTestsOnly.ts --update --subset", - "pretest:vscode": "pnpm run bundle:runner:vscode && pnpm run bundle:tests", "test:vscode": "c-tsx ./src/scripts/runVscodeTestsCI.ts", - "pretest:neovim": "pnpm run bundle:runner:neovim && pnpm run bundle:tests", "test:neovim": "c-tsx ./src/scripts/runNeovimTestsCI.ts", - "pretest:talonJs": "pnpm run bundle:tests", "test:talonJs": "c-tsx ./src/scripts/runTalonJsTests.ts", + "pretest:vscode": "pnpm run bundle:runner:vscode && pnpm run bundle:tests", + "pretest:neovim": "pnpm run bundle:runner:neovim && pnpm run bundle:tests", + "pretest:talonJs": "pnpm run bundle:tests", "bundle:base": "bash ./scripts/compile-esbuild.sh", "bundle": "pnpm run bundle:runner:vscode && pnpm run bundle:runner:neovim && pnpm run bundle:tests", "bundle:runner:vscode": "pnpm run bundle:base ./src/runners/extensionTestsVscode.ts --outfile=dist/extensionTestsVscode.cjs", "bundle:runner:neovim": "pnpm run bundle:base ./src/runners/extensionTestsNeovim.ts --outfile=out/runners/extensionTestsNeovim.cjs", "bundle:tests": "bash ./scripts/build-tests.sh", - "typecheck": "tsc", - "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", "generate-test-subset-file": "c-tsx ./src/scripts/generateTestSubsetFile.ts --always-open", "generate-test-subset-file-strict": "c-tsx ./src/scripts/generateTestSubsetFile.ts --fail-if-not-exists" }, diff --git a/packages/vscode-common/package.json b/packages/vscode-common/package.json index cf3aa3ed5b..09b733c9f2 100644 --- a/packages/vscode-common/package.json +++ b/packages/vscode-common/package.json @@ -8,7 +8,8 @@ ".": "./src/index.ts" }, "scripts": { - "typecheck": "tsc" + "typecheck": "tsc", + "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build" }, "dependencies": { "@cursorless/common": "workspace:*" From a41b3af0fc732e6d5840be9b5f80ba859e952961 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 11:15:21 +0100 Subject: [PATCH 22/37] Update polyfill --- packages/cursorless-everywhere-talon-core/src/polyfill.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cursorless-everywhere-talon-core/src/polyfill.ts b/packages/cursorless-everywhere-talon-core/src/polyfill.ts index 002f71d75f..cc81601dee 100644 --- a/packages/cursorless-everywhere-talon-core/src/polyfill.ts +++ b/packages/cursorless-everywhere-talon-core/src/polyfill.ts @@ -14,7 +14,7 @@ if (global.performance == null) { } // Allows us to use `console.*` with quickjs -if (global.console == null && typeof print === "function") { +if (typeof print === "function") { global.console = { log: print, error: print, From fc0a2333d98dc842db28251b46ba14d3d18e9e88 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 11:47:31 +0100 Subject: [PATCH 23/37] Clean up scripts --- packages/cursorless-vscode/package.json | 2 +- tsconfig.base.json | 28 ++++++++++++++----------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/packages/cursorless-vscode/package.json b/packages/cursorless-vscode/package.json index a6d3748d00..1e79b58803 100644 --- a/packages/cursorless-vscode/package.json +++ b/packages/cursorless-vscode/package.json @@ -1299,8 +1299,8 @@ "preprocess-svg-hats": "c-tsx ./src/scripts/preprocessSvgHats.ts", "hat-adjustment-add": "c-tsx ./src/scripts/hatAdjustments/add.ts", "hat-adjustment-average": "c-tsx ./src/scripts/hatAdjustments/average.ts", - "generate-grammar:base": "nearleyc ./src/keyboard/grammar/grammar.ne", "ensure-grammar-up-to-date": "pnpm -s generate-grammar:base | diff -u ./src/keyboard/grammar/generated/grammar.ts -", + "generate-grammar:base": "nearleyc ./src/keyboard/grammar/grammar.ne", "generate-grammar": "pnpm generate-grammar:base -o ./src/keyboard/grammar/generated/grammar.ts", "generate-railroad": "mkdir out && nearley-railroad ./src/keyboard/grammar/grammar.ne -o out/railroad.html" }, diff --git a/tsconfig.base.json b/tsconfig.base.json index d951ce6c35..1b3ce1c661 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -12,28 +12,32 @@ "isolatedModules": true, "strict": true, "paths": { - "@cursorless/cheatsheet": ["packages/cheatsheet/src/index.ts"], - "@cursorless/common": ["packages/common/src/index.ts"], + "@cursorless/cheatsheet": ["./packages/cheatsheet/src/index.ts"], + "@cursorless/common": ["./packages/common/src/index.ts"], "@cursorless/cursorless-cheatsheet": [ - "packages/cursorless-cheatsheet/src/index.ts" + "./packages/cursorless-cheatsheet/src/index.ts" ], "@cursorless/cursorless-engine": [ - "packages/cursorless-engine/src/index.ts" + "./packages/cursorless-engine/src/index.ts" ], "@cursorless/cursorless-everywhere-talon-core": [ - "packages/cursorless-everywhere-talon-core/src/index.ts" + "./packages/cursorless-everywhere-talon-core/src/index.ts" ], "@cursorless/cursorless-tutorial": [ - "packages/cursorless-tutorial/src/index.ts" + "./packages/cursorless-tutorial/src/index.ts" + ], + "@cursorless/neovim-common": ["./packages/neovim-common/src/index.ts"], + "@cursorless/neovim-registry": [ + "./packages/neovim-registry/src/index.ts" + ], + "@cursorless/node-common": ["./packages/node-common/src/index.ts"], + "@cursorless/sentence-parser": [ + "./packages/sentence-parser/src/index.ts" ], - "@cursorless/neovim-common": ["packages/neovim-common/src/index.ts"], - "@cursorless/neovim-registry": ["packages/neovim-registry/src/index.ts"], - "@cursorless/node-common": ["packages/node-common/src/index.ts"], - "@cursorless/sentence-parser": ["packages/sentence-parser/src/index.ts"], "@cursorless/test-case-recorder": [ - "packages/test-case-recorder/src/index.ts" + "./packages/test-case-recorder/src/index.ts" ], - "@cursorless/vscode-common": ["packages/vscode-common/src/index.ts"] + "@cursorless/vscode-common": ["./packages/vscode-common/src/index.ts"] } } } From cb307e1e04306dc57683a5bc6c053aab7d9e474f Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 13:44:33 +0100 Subject: [PATCH 24/37] Update tasks and launch configs --- .vscode/launch.json | 8 +- .vscode/tasks.json | 126 +++++------------- packages/cheatsheet-local/package.json | 2 +- .../cursorless-everywhere-talon/package.json | 14 +- packages/cursorless-neovim/package.json | 12 +- .../scripts/populate-dist.sh | 3 +- .../package.json | 2 +- packages/cursorless-vscode/package.json | 14 +- packages/test-harness/package.json | 18 +-- packages/test-harness/scripts/build-tests.sh | 4 - .../test-harness/scripts/compile-esbuild.sh | 24 ++-- packages/test-harness/scripts/run-esbuild.sh | 13 ++ .../src/scripts/runVscodeTestsCI.ts | 2 +- 13 files changed, 91 insertions(+), 151 deletions(-) delete mode 100755 packages/test-harness/scripts/build-tests.sh create mode 100755 packages/test-harness/scripts/run-esbuild.sh diff --git a/.vscode/launch.json b/.vscode/launch.json index 5c80886a82..1847162809 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -37,7 +37,7 @@ "args": [ "--profile=cursorlessDevelopment", "--extensionDevelopmentPath=${workspaceFolder}/packages/cursorless-vscode/dist", - "--extensionTestsPath=${workspaceFolder}/packages/test-harness/dist/extensionTestsVscode.cjs" + "--extensionTestsPath=${workspaceFolder}/packages/test-harness/out/extensionTestsVscode.cjs" ], "outFiles": ["${workspaceFolder}/**/out/**/*.js"], "preLaunchTask": "VSCode: Build extension and tests", @@ -59,7 +59,7 @@ "args": [ "--profile=cursorlessDevelopment", "--extensionDevelopmentPath=${workspaceFolder}/packages/cursorless-vscode/dist", - "--extensionTestsPath=${workspaceFolder}/packages/test-harness/dist/extensionTestsVscode.cjs" + "--extensionTestsPath=${workspaceFolder}/packages/test-harness/out/extensionTestsVscode.cjs" ], "outFiles": ["${workspaceFolder}/**/out/**/*.js"], "preLaunchTask": "VSCode: Prepare test subset", @@ -80,7 +80,7 @@ "args": [ "--profile=cursorlessDevelopment", "--extensionDevelopmentPath=${workspaceFolder}/packages/cursorless-vscode/dist", - "--extensionTestsPath=${workspaceFolder}/packages/test-harness/dist/extensionTestsVscode.cjs" + "--extensionTestsPath=${workspaceFolder}/packages/test-harness/out/extensionTestsVscode.cjs" ], "outFiles": ["${workspaceFolder}/**/out/**/*.js"], "preLaunchTask": "VSCode: Build extension and tests", @@ -102,7 +102,7 @@ "args": [ "--profile=cursorlessDevelopment", "--extensionDevelopmentPath=${workspaceFolder}/packages/cursorless-vscode/dist", - "--extensionTestsPath=${workspaceFolder}/packages/test-harness/dist/extensionTestsVscode.cjs" + "--extensionTestsPath=${workspaceFolder}/packages/test-harness/out/extensionTestsVscode.cjs" ], "outFiles": ["${workspaceFolder}/**/out/**/*.js"], "preLaunchTask": "VSCode: Build extension and tests", diff --git a/.vscode/tasks.json b/.vscode/tasks.json index da5931afdc..05daf41e59 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -18,10 +18,10 @@ "label": "Generate grammar", "type": "npm", "script": "generate-grammar", + "group": "build", "presentation": { "reveal": "silent" - }, - "group": "build" + } }, // Generic test tasks @@ -30,136 +30,76 @@ "type": "npm", "script": "generate-test-subset-file-strict", "path": "packages/test-harness", + "group": "test", "presentation": { "reveal": "silent" - }, - "group": "test" + } }, { "label": "Generate test subset file", "type": "npm", "script": "generate-test-subset-file", "path": "packages/test-harness", + "group": "none", "presentation": { "reveal": "silent" - }, - "group": "none", - "problemMatcher": [] + } }, // VSCode tasks { "label": "VSCode: Build extension", - "dependsOn": ["VSCode: Populate dist", "VSCode: ESBuild"], - "group": "build" + "type": "npm", + "script": "dev", + "path": "packages/cursorless-vscode", + "group": "build", + "presentation": { + "reveal": "silent" + } }, { "label": "VSCode: Build extension and tests", - "dependsOn": ["VSCode: Build extension", "TSBuild", "Build test harness"], + "dependsOn": ["VSCode: Build extension", "Build test harness"], "group": { "kind": "build", "isDefault": true } }, - { - "label": "VSCode: ESBuild", - "type": "npm", - "script": "bundle:dev", - "path": "packages/cursorless-vscode", - "dependsOn": ["Generate grammar"], - "presentation": { - "reveal": "silent" - }, - "group": "build" - }, - { - "label": "VSCode: Populate dist", - "type": "npm", - "script": "populate-dist", - "path": "packages/cursorless-vscode", - "dependsOn": ["VSCode: Build tutorial webview"], - "presentation": { - "reveal": "silent" - }, - "group": "build" - }, - { - "label": "VSCode: Build tutorial webview", - "type": "npm", - "script": "bundle:dev", - "path": "packages/cursorless-vscode-tutorial-webview", - "presentation": { - "reveal": "silent" - }, - "group": "build" - }, - { - "label": "VSCode: Watch tutorial", - "type": "npm", - "script": "bundle:watch", - "isBackground": true, - "presentation": { - "reveal": "never" - }, - "path": "packages/cursorless-vscode-tutorial-webview", - "group": "build" - }, { "label": "VSCode: Prepare test subset", + "group": "test", + "dependsOrder": "sequence", "dependsOn": [ "Ensure test subset file exists", "VSCode: Build extension and tests" - ], - "dependsOrder": "sequence", - "group": "test" + ] }, // Neovim tasks { "label": "Neovim: Build extension", - "dependsOn": [ - "Neovim: Launch neovim", - "Neovim: ESBuild", - "Neovim: Populate dist" - ], - "group": "build" + "group": "build", + "dependsOn": ["Neovim: Launch neovim", "Neovim: ESBuild"] }, { "label": "Neovim: Build extension and tests", + "group": "build", "dependsOn": [ "Neovim: Launch neovim (test)", "Neovim: ESBuild", - "Neovim: Populate dist", - "TSBuild", "Build test harness" - ], - "group": "build" + ] }, { "label": "Neovim: ESBuild", "type": "npm", - "script": "bundle:dev", + "script": "dev", "path": "packages/cursorless-neovim", "dependsOn": ["Generate grammar"], + "group": "build", "presentation": { "reveal": "silent" - }, - "group": "build" - }, - { - "label": "Neovim: Populate dist", - "type": "npm", - "script": "populate-dist", - "path": "packages/cursorless-neovim", - "presentation": { - "reveal": "silent" - }, - "options": { - "env": { - "CURSORLESS_REPO_ROOT": "${workspaceFolder}" - } - }, - "group": "build" + } }, { "label": "Neovim: Launch neovim", @@ -263,32 +203,26 @@ // cursorless.org { "label": "Serve cursorless.org", - "type": "shell", - "command": "nx serve cursorless-org", - "options": { - "cwd": "cursorless-nx" - }, - "problemMatcher": [] + "type": "npm", + "script": "dev", + "path": "packages/cursorless-org" }, { "label": "Install local", "type": "npm", - "path": "packages/cursorless-vscode", "script": "install-local", - "problemMatcher": [] + "path": "packages/cursorless-vscode" }, { "label": "Uninstall local", "type": "npm", - "path": "packages/cursorless-vscode", "script": "uninstall-local", - "problemMatcher": [] + "path": "packages/cursorless-vscode" }, { "label": "Run pre commit", "type": "shell", - "command": "pre-commit run", - "presentation": {} + "command": "pre-commit run" } ] } diff --git a/packages/cheatsheet-local/package.json b/packages/cheatsheet-local/package.json index f022f754e0..efb43d28c7 100644 --- a/packages/cheatsheet-local/package.json +++ b/packages/cheatsheet-local/package.json @@ -15,7 +15,7 @@ "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", "test": "jest", "dev": "env NODE_OPTIONS=--import=tsx vite serve", - "bundle": "env NODE_OPTIONS=--import=tsx vite build", + "bundle:prod": "env NODE_OPTIONS=--import=tsx vite build", "bundle:dev": "env NODE_OPTIONS=--import=tsx vite build --mode development", "bundle:watch": "env NODE_OPTIONS=--import=tsx vite build --mode development --watch" }, diff --git a/packages/cursorless-everywhere-talon/package.json b/packages/cursorless-everywhere-talon/package.json index b3177d185d..22174951f7 100644 --- a/packages/cursorless-everywhere-talon/package.json +++ b/packages/cursorless-everywhere-talon/package.json @@ -9,13 +9,13 @@ "scripts": { "typecheck": "tsc", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", - "dev": "pnpm run bundle:watch", - "build": "pnpm run bundle", - "bundle": "pnpm run bundle:base --minify src/mainProduction.ts", - "bundle:dev": "pnpm run bundle:base src/mainDevelopment.ts", - "bundle:watch": "pnpm run bundle:base --watch src/mainDevelopment.ts", - "bundle:profile": "pnpm run bundle:base --metafile=meta.json src/mainDevelopment.ts", - "bundle:base": "bash scripts/esbuild.sh" + "dev": "pnpm run compile:watch", + "build": "pnpm run compile:prod", + "compile:prod": "pnpm run compile:base --minify src/mainProduction.ts", + "compile:dev": "pnpm run compile:base src/mainDevelopment.ts", + "compile:watch": "pnpm run compile:base --watch src/mainDevelopment.ts", + "compile:profile": "pnpm run compile:base --metafile=meta.json src/mainDevelopment.ts", + "compile:base": "bash scripts/esbuild.sh" }, "dependencies": { "@cursorless/common": "workspace:*", diff --git a/packages/cursorless-neovim/package.json b/packages/cursorless-neovim/package.json index 32cd9010f6..d0a949bd79 100644 --- a/packages/cursorless-neovim/package.json +++ b/packages/cursorless-neovim/package.json @@ -12,12 +12,12 @@ "scripts": { "typecheck": "tsc", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", - "dev": "pnpm run bundle:dev && pnpm run populate-dist", - "build": "pnpm -F @cursorless/test-harness bundle:runner:neovim && pnpm run bundle && pnpm run populate-dist", - "bundle": "pnpm run bundle:base --minify", - "bundle:dev": "pnpm run bundle:base --sourcemap", - "bundle:watch": "pnpm run bundle:base --sourcemap --watch", - "bundle:base": "bash ./scripts/compile-esbuild.sh", + "dev": "pnpm run compile:dev && pnpm run populate-dist", + "build": "pnpm run compile:prod && pnpm run populate-dist", + "compile:prod": "pnpm run compile:base --minify", + "compile:dev": "pnpm run compile:base --sourcemap", + "compile:watch": "pnpm run compile:base --sourcemap --watch", + "compile:base": "bash ./scripts/compile-esbuild.sh", "populate-dist": "bash ./scripts/populate-dist.sh" }, "dependencies": { diff --git a/packages/cursorless-neovim/scripts/populate-dist.sh b/packages/cursorless-neovim/scripts/populate-dist.sh index 83de5f1f0d..971877f540 100755 --- a/packages/cursorless-neovim/scripts/populate-dist.sh +++ b/packages/cursorless-neovim/scripts/populate-dist.sh @@ -28,8 +28,7 @@ if [[ "${CI:-x}" == "true" ]]; then test_harness_node_out_dir="$cursorless_nvim_dist_dir/node/test-harness" mkdir -p "$test_harness_node_out_dir/out" cp "$test_harness_node_in_dir/package.json" "$test_harness_node_out_dir" - mkdir -p "$test_harness_node_out_dir/out/runners" - cp "$test_harness_node_in_dir/out/runners/extensionTestsNeovim.cjs" "$test_harness_node_out_dir/out/runners" + cp "$test_harness_node_in_dir/out/extensionTestsNeovim.cjs" "$test_harness_node_out_dir/out" else # Symlink so we inherit the .map files as well, but only if uname doesn't # start with "MINGW" (Windows Git Bash) diff --git a/packages/cursorless-vscode-tutorial-webview/package.json b/packages/cursorless-vscode-tutorial-webview/package.json index a95f69eb10..26ec95ad8c 100644 --- a/packages/cursorless-vscode-tutorial-webview/package.json +++ b/packages/cursorless-vscode-tutorial-webview/package.json @@ -10,7 +10,7 @@ "typecheck": "tsc", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", "dev": "env NODE_OPTIONS=--import=tsx vite serve", - "bundle": "env NODE_OPTIONS=--import=tsx vite build", + "bundle:prod": "env NODE_OPTIONS=--import=tsx vite build", "bundle:dev": "env NODE_OPTIONS=--import=tsx vite build --mode development", "bundle:watch": "env NODE_OPTIONS=--import=tsx vite build --mode development --watch" }, diff --git a/packages/cursorless-vscode/package.json b/packages/cursorless-vscode/package.json index 1e79b58803..bb1abe177a 100644 --- a/packages/cursorless-vscode/package.json +++ b/packages/cursorless-vscode/package.json @@ -1284,13 +1284,13 @@ "typecheck": "tsc", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", "test": "pnpm ensure-grammar-up-to-date", - "dev": "pnpm generate-grammar && pnpm -F @cursorless/cursorless-vscode-tutorial-webview bundle:dev && pnpm run bundle:dev && pnpm run populate-dist", - "build": "pnpm generate-grammar && pnpm -F @cursorless/cheatsheet-local bundle && pnpm -F @cursorless/cursorless-vscode-tutorial-webview bundle && pnpm run bundle && pnpm run populate-dist", - "bundle": "pnpm run bundle:base --minify", - "bundle:dev": "pnpm run bundle:base --sourcemap", - "bundle:watch": "pnpm run bundle:base --sourcemap --watch", - "bundle:meta": "pnpm run bundle:base --metafile=meta.json", - "bundle:base": "bash ./scripts/compile-esbuild.sh", + "dev": "pnpm generate-grammar && pnpm run compile:dev && pnpm -F @cursorless/cursorless-vscode-tutorial-webview bundle:dev && pnpm run populate-dist", + "build": "pnpm generate-grammar && pnpm run compile:prod && pnpm -F @cursorless/cursorless-vscode-tutorial-webview bundle:prod && pnpm -F @cursorless/cheatsheet-local bundle:prod && pnpm run populate-dist", + "compile:prod": "pnpm run compile:base --minify", + "compile:dev": "pnpm run compile:base --sourcemap", + "compile:watch": "pnpm run compile:base --sourcemap --watch", + "compile:meta": "pnpm run compile:base --metafile=meta.json", + "compile:base": "bash ./scripts/compile-esbuild.sh", "install-local": "bash ./scripts/install-local.sh", "install-from-pr": "bash ./scripts/install-from-pr.sh", "uninstall-local": "bash ./scripts/uninstall-local.sh", diff --git a/packages/test-harness/package.json b/packages/test-harness/package.json index 83b7fa2be1..0b28ba5e3d 100644 --- a/packages/test-harness/package.json +++ b/packages/test-harness/package.json @@ -5,11 +5,11 @@ "license": "MIT", "private": true, "type": "module", - "main": "./out/runners/extensionTestsNeovim.cjs", - "types": "./out/runners/extensionTestsNeovim.d.ts", + "main": "./out/extensionTestsNeovim.cjs", + "types": "./out/extensionTestsNeovim.d.ts", "exports": { ".": { - "default": "./out/runners/extensionTestsNeovim.cjs" + "default": "./out/extensionTestsNeovim.cjs" } }, "scripts": { @@ -22,14 +22,10 @@ "test:vscode": "c-tsx ./src/scripts/runVscodeTestsCI.ts", "test:neovim": "c-tsx ./src/scripts/runNeovimTestsCI.ts", "test:talonJs": "c-tsx ./src/scripts/runTalonJsTests.ts", - "pretest:vscode": "pnpm run bundle:runner:vscode && pnpm run bundle:tests", - "pretest:neovim": "pnpm run bundle:runner:neovim && pnpm run bundle:tests", - "pretest:talonJs": "pnpm run bundle:tests", - "bundle:base": "bash ./scripts/compile-esbuild.sh", - "bundle": "pnpm run bundle:runner:vscode && pnpm run bundle:runner:neovim && pnpm run bundle:tests", - "bundle:runner:vscode": "pnpm run bundle:base ./src/runners/extensionTestsVscode.ts --outfile=dist/extensionTestsVscode.cjs", - "bundle:runner:neovim": "pnpm run bundle:base ./src/runners/extensionTestsNeovim.ts --outfile=out/runners/extensionTestsNeovim.cjs", - "bundle:tests": "bash ./scripts/build-tests.sh", + "pretest:vscode": "pnpm run bundle", + "pretest:neovim": "pnpm run bundle", + "pretest:talonJs": "pnpm run bundle", + "bundle": "bash ./scripts/compile-esbuild.sh", "generate-test-subset-file": "c-tsx ./src/scripts/generateTestSubsetFile.ts --always-open", "generate-test-subset-file-strict": "c-tsx ./src/scripts/generateTestSubsetFile.ts --fail-if-not-exists" }, diff --git a/packages/test-harness/scripts/build-tests.sh b/packages/test-harness/scripts/build-tests.sh deleted file mode 100755 index 38cd432cc3..0000000000 --- a/packages/test-harness/scripts/build-tests.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -find .. -name '*.test.ts' -print0 | xargs -0 -n 50 pnpm run bundle:base --outdir=dist --out-extension:.js=.cjs diff --git a/packages/test-harness/scripts/compile-esbuild.sh b/packages/test-harness/scripts/compile-esbuild.sh index d81dcbbf20..4f667a4053 100755 --- a/packages/test-harness/scripts/compile-esbuild.sh +++ b/packages/test-harness/scripts/compile-esbuild.sh @@ -1,14 +1,16 @@ #!/usr/bin/env bash - set -euo pipefail -esbuild \ - --format=cjs \ - --bundle \ - --external:vscode \ - --external:./reporters/parallel-buffered \ - --external:./worker.js \ - --external:talon \ - --platform=node \ - --sourcemap \ - "$@" +# Compile vscode test runner +./scripts/run-esbuild.sh \ + ./src/runners/extensionTestsVscode.ts \ + --outfile=out/extensionTestsVscode.cjs + +# Compile neovim test runner +./scripts/run-esbuild.sh \ + ./src/runners/extensionTestsNeovim.ts \ + --outfile=out/extensionTestsNeovim.cjs + +# Compiled test cases +find .. -name '*.test.ts' -print0 | + xargs -0 -n 50 ./scripts/run-esbuild.sh --outdir=out --out-extension:.js=.cjs diff --git a/packages/test-harness/scripts/run-esbuild.sh b/packages/test-harness/scripts/run-esbuild.sh new file mode 100755 index 0000000000..791bd6e0ae --- /dev/null +++ b/packages/test-harness/scripts/run-esbuild.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -euo pipefail + +esbuild \ + --format=cjs \ + --bundle \ + --external:vscode \ + --external:./reporters/parallel-buffered \ + --external:./worker.js \ + --external:talon \ + --platform=node \ + --sourcemap \ + "$@" diff --git a/packages/test-harness/src/scripts/runVscodeTestsCI.ts b/packages/test-harness/src/scripts/runVscodeTestsCI.ts index 9439cd6b51..b23ac57055 100644 --- a/packages/test-harness/src/scripts/runVscodeTestsCI.ts +++ b/packages/test-harness/src/scripts/runVscodeTestsCI.ts @@ -11,7 +11,7 @@ process.env.CURSORLESS_MODE = "test"; void (async () => { const extensionTestsPath = path.resolve( getCursorlessRepoRoot(), - "packages/test-harness/dist/extensionTestsVscode.cjs", + "packages/test-harness/out/extensionTestsVscode.cjs", ); await launchVscodeAndRunTests(extensionTestsPath); From e29cde9cfb7d541a76634e75ef39189bdcb3eb9a Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 14:45:31 +0100 Subject: [PATCH 25/37] Up day tests --- .github/workflows/test.yml | 4 +- .vscode/launch.json | 156 ++------------------- .vscode/tasks.json | 212 ++++------------------------- packages/test-harness/package.json | 6 + 4 files changed, 41 insertions(+), 337 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e6f7b05dd2..95c1abfe50 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -178,7 +178,7 @@ jobs: NEOVIM_PATH: ${{ steps.vim.outputs.executable }} - name: Run neovim lua tests - uses: ./.github/actions/test-neovim-lua/ + uses: ./.github/actions/test-neovim-lua - name: Run neovim lua lint - uses: ./.github/actions/lint-lua-ls/ + uses: ./.github/actions/lint-lua-ls diff --git a/.vscode/launch.json b/.vscode/launch.json index 1847162809..038b22e9cc 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,13 +1,8 @@ -// A launch configuration that compiles the extension and then opens it inside a new window -// Use IntelliSense to learn about possible attributes. -// Hover to view descriptions of existing attributes. -// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 { "version": "0.2.0", "configurations": [ - // VSCode launch configs { - "name": "VSCode: Run", + "name": "Run", "type": "extensionHost", "request": "launch", "env": { @@ -19,14 +14,14 @@ "--profile=cursorlessDevelopment" ], "outFiles": ["${workspaceFolder}/**/out/**/*.js"], - "preLaunchTask": "VSCode: Build extension", + "preLaunchTask": "Build extension", "resolveSourceMapLocations": [ "${workspaceFolder}/**", "!**/node_modules/**" ] }, { - "name": "VSCode: Test", + "name": "Test", "type": "extensionHost", "request": "launch", "env": { @@ -40,14 +35,14 @@ "--extensionTestsPath=${workspaceFolder}/packages/test-harness/out/extensionTestsVscode.cjs" ], "outFiles": ["${workspaceFolder}/**/out/**/*.js"], - "preLaunchTask": "VSCode: Build extension and tests", + "preLaunchTask": "Build extension and tests", "resolveSourceMapLocations": [ "${workspaceFolder}/**", "!**/node_modules/**" ] }, { - "name": "VSCode: Test (subset)", + "name": "Test (subset)", "type": "extensionHost", "request": "launch", "env": { @@ -62,14 +57,14 @@ "--extensionTestsPath=${workspaceFolder}/packages/test-harness/out/extensionTestsVscode.cjs" ], "outFiles": ["${workspaceFolder}/**/out/**/*.js"], - "preLaunchTask": "VSCode: Prepare test subset", + "preLaunchTask": "Build extension and tests (subset)", "resolveSourceMapLocations": [ "${workspaceFolder}/**", "!**/node_modules/**" ] }, { - "name": "VSCode: Update test fixtures", + "name": "Update test fixtures", "type": "extensionHost", "request": "launch", "env": { @@ -83,14 +78,14 @@ "--extensionTestsPath=${workspaceFolder}/packages/test-harness/out/extensionTestsVscode.cjs" ], "outFiles": ["${workspaceFolder}/**/out/**/*.js"], - "preLaunchTask": "VSCode: Build extension and tests", + "preLaunchTask": "Build extension and tests", "resolveSourceMapLocations": [ "${workspaceFolder}/**", "!**/node_modules/**" ] }, { - "name": "VSCode: Update test fixtures (subset)", + "name": "Update test fixtures (subset)", "type": "extensionHost", "request": "launch", "env": { @@ -105,142 +100,11 @@ "--extensionTestsPath=${workspaceFolder}/packages/test-harness/out/extensionTestsVscode.cjs" ], "outFiles": ["${workspaceFolder}/**/out/**/*.js"], - "preLaunchTask": "VSCode: Build extension and tests", + "preLaunchTask": "Build extension and tests (subset)", "resolveSourceMapLocations": [ "${workspaceFolder}/**", "!**/node_modules/**" ] - }, - - // Neovim launch configs - { - "name": "Neovim: Run", - "request": "attach", - "continueOnAttach": true, - "skipFiles": ["/**"], - "preLaunchTask": "Neovim: Build extension", - "type": "node" - }, - { - "name": "Neovim: Test", - "request": "attach", - "continueOnAttach": true, - "skipFiles": ["/**"], - "preLaunchTask": "Neovim: Build extension and tests", - "type": "node" - }, - - // Talon launch configs - { - "name": "Talon: Test grammar", - "type": "node", - "request": "launch", - "program": "${workspaceFolder}/packages/test-harness/dist/runTalonTests.cjs", - "env": { - "CURSORLESS_MODE": "test", - "CURSORLESS_LOG_FAILED": "true", - "CURSORLESS_REPO_ROOT": "${workspaceFolder}" - }, - "outFiles": ["${workspaceFolder}/**/out/**/*.js"], - "preLaunchTask": "VSCode: Build extension and tests", - "resolveSourceMapLocations": [ - "${workspaceFolder}/**", - "!**/node_modules/**" - ] - }, - { - "name": "Talon: Test grammar (subset)", - "type": "node", - "request": "launch", - "program": "${workspaceFolder}/packages/test-harness/dist/runTalonTests.cjs", - "env": { - "CURSORLESS_MODE": "test", - "CURSORLESS_RUN_TEST_SUBSET": "true", - "CURSORLESS_REPO_ROOT": "${workspaceFolder}" - }, - "outFiles": ["${workspaceFolder}/**/out/**/*.js"], - "preLaunchTask": "VSCode: Build extension and tests", - "resolveSourceMapLocations": [ - "${workspaceFolder}/**", - "!**/node_modules/**" - ] - }, - - // Talon everywhere/JS launch configs - { - "name": "TalonJS: Test", - "type": "node", - "request": "launch", - "program": "${workspaceFolder}/packages/test-harness/dist/runTalonJsTests.cjs", - "env": { - "CURSORLESS_MODE": "test", - "CURSORLESS_LOG_FAILED": "true", - "CURSORLESS_REPO_ROOT": "${workspaceFolder}" - }, - "outFiles": ["${workspaceFolder}/**/out/**/*.js"], - "preLaunchTask": "VSCode: Build extension and tests", - "resolveSourceMapLocations": [ - "${workspaceFolder}/**", - "!**/node_modules/**" - ] - }, - { - "name": "TalonJS: Test (subset)", - "type": "node", - "request": "launch", - "program": "${workspaceFolder}/packages/test-harness/dist/runTalonJsTests.cjs", - "env": { - "CURSORLESS_MODE": "test", - "CURSORLESS_RUN_TEST_SUBSET": "true", - "CURSORLESS_REPO_ROOT": "${workspaceFolder}" - }, - "outFiles": ["${workspaceFolder}/**/out/**/*.js"], - "preLaunchTask": "VSCode: Build extension and tests", - "resolveSourceMapLocations": [ - "${workspaceFolder}/**", - "!**/node_modules/**" - ] - }, - - // Docusaurus launch configs - { - "name": "Docusaurus: Run", - "type": "node", - "request": "launch", - "env": { - "CURSORLESS_REPO_ROOT": "${workspaceFolder}" - }, - "cwd": "${workspaceFolder}/packages/cursorless-org-docs", - "runtimeExecutable": "pnpm", - "runtimeArgs": ["start"], - "resolveSourceMapLocations": [ - "${workspaceFolder}/**", - "!**/node_modules/**" - ] - }, - { - "name": "Docusaurus: Build", - "type": "node", - "request": "launch", - "env": { - "CURSORLESS_REPO_ROOT": "${workspaceFolder}" - }, - "cwd": "${workspaceFolder}/packages/cursorless-org-docs", - "runtimeExecutable": "pnpm", - "runtimeArgs": ["build"], - "resolveSourceMapLocations": [ - "${workspaceFolder}/**", - "!**/node_modules/**" - ] - }, - - // cursorless.org launch configs - { - "name": "cursorless.org: Run client-side", - "type": "chrome", - "request": "launch", - "url": "http://localhost:3000", - "webRoot": "${workspaceFolder}/packages/cursorless-org" } ] } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 05daf41e59..b10937c470 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,54 +1,9 @@ -// See https://go.microsoft.com/fwlink/?LinkId=733558 -// for the documentation about the tasks.json format { "version": "2.0.0", "tasks": [ - // Generic build tasks + // Launch tasks { - "label": "Build test harness", - "type": "npm", - "script": "bundle", - "path": "packages/test-harness", - "presentation": { - "reveal": "silent" - }, - "group": "build" - }, - { - "label": "Generate grammar", - "type": "npm", - "script": "generate-grammar", - "group": "build", - "presentation": { - "reveal": "silent" - } - }, - - // Generic test tasks - { - "label": "Ensure test subset file exists", - "type": "npm", - "script": "generate-test-subset-file-strict", - "path": "packages/test-harness", - "group": "test", - "presentation": { - "reveal": "silent" - } - }, - { - "label": "Generate test subset file", - "type": "npm", - "script": "generate-test-subset-file", - "path": "packages/test-harness", - "group": "none", - "presentation": { - "reveal": "silent" - } - }, - - // VSCode tasks - { - "label": "VSCode: Build extension", + "label": "Build extension", "type": "npm", "script": "dev", "path": "packages/cursorless-vscode", @@ -58,171 +13,50 @@ } }, { - "label": "VSCode: Build extension and tests", - "dependsOn": ["VSCode: Build extension", "Build test harness"], - "group": { - "kind": "build", - "isDefault": true - } + "label": "Build extension and tests", + "dependsOn": ["Build extension", "Build test harness"], + "group": "build" }, { - "label": "VSCode: Prepare test subset", + "label": "Build extension and tests (subset)", "group": "test", "dependsOrder": "sequence", "dependsOn": [ "Ensure test subset file exists", - "VSCode: Build extension and tests" + "Build extension and tests" ] }, - // Neovim tasks - { - "label": "Neovim: Build extension", - "group": "build", - "dependsOn": ["Neovim: Launch neovim", "Neovim: ESBuild"] - }, - { - "label": "Neovim: Build extension and tests", - "group": "build", - "dependsOn": [ - "Neovim: Launch neovim (test)", - "Neovim: ESBuild", - "Build test harness" - ] - }, + // Helper tasks { - "label": "Neovim: ESBuild", + "label": "Build test harness", "type": "npm", - "script": "dev", - "path": "packages/cursorless-neovim", - "dependsOn": ["Generate grammar"], - "group": "build", - "presentation": { - "reveal": "silent" - } - }, - { - "label": "Neovim: Launch neovim", - "type": "process", - "command": "packages/cursorless-neovim/scripts/linux-terminal.sh", - "args": [ - "${workspaceFolder}/packages/cursorless-neovim/scripts/debug-neovim.sh ${workspaceFolder} development" - ], - "osx": { - "command": "osascript", - "args": [ - "-e", - "tell app \"Terminal\" to do script \"${workspaceFolder}/packages/cursorless-neovim/scripts/debug-neovim.sh ${workspaceFolder} development\" activate" - ] - }, - "windows": { - "command": "powershell", - "args": [ - "(New-Object -ComObject WScript.Shell).Run(\"\"\"${workspaceFolder}/packages/cursorless-neovim/scripts/debug-neovim.bat\"\"\", 1, $false)" - ] - }, - "group": "build", + "script": "bundle", + "path": "packages/test-harness", "presentation": { "reveal": "silent" }, - "options": { - "env": { - "CURSORLESS_REPO_ROOT": "${workspaceFolder}", - "NVIM_NODE_HOST_DEBUG": "1", - "NVIM_NODE_LOG_FILE": "${workspaceFolder}/packages/cursorless-neovim/out/nvim_node.log", - "NVIM_NODE_LOG_LEVEL": "info", - "CURSORLESS_MODE": "development" - } - } + "group": "build" }, { - "label": "Neovim: Launch neovim (test)", - "type": "process", - "command": "packages/cursorless-neovim/scripts/linux-terminal.sh", - "args": [ - "${workspaceFolder}/packages/cursorless-neovim/scripts/debug-neovim.sh ${workspaceFolder} test" - ], - "osx": { - "command": "osascript", - "args": [ - "-e", - "tell app \"Terminal\" to do script \"${workspaceFolder}/packages/cursorless-neovim/scripts/debug-neovim.sh ${workspaceFolder} test\" activate" - ] - }, - "windows": { - "command": "powershell", - "args": [ - "(New-Object -ComObject WScript.Shell).Run(\"\"\"${workspaceFolder}/packages/cursorless-neovim/scripts/debug-neovim.bat\"\"\", 1, $false)" - ] - }, - "group": "build", + "label": "Ensure test subset file exists", + "type": "npm", + "script": "generate-test-subset-file-strict", + "path": "packages/test-harness", + "group": "test", "presentation": { "reveal": "silent" - }, - "options": { - "env": { - "CURSORLESS_REPO_ROOT": "${workspaceFolder}", - "NVIM_NODE_HOST_DEBUG": "1", - "NVIM_NODE_LOG_FILE": "${workspaceFolder}/packages/cursorless-neovim/out/nvim_node.log", - "NVIM_NODE_LOG_LEVEL": "info", - "CURSORLESS_MODE": "test" - } } }, { - "label": "Neovim: Show logs", - "type": "shell", - "command": "packages/cursorless-neovim/scripts/show-logs.sh", - "problemMatcher": [], - "isBackground": true, + "label": "Generate test subset file", + "type": "npm", + "script": "generate-test-subset-file", + "path": "packages/test-harness", + "group": "none", "presentation": { - "echo": false, - "reveal": "always", - "focus": false, - "panel": "dedicated", - "showReuseMessage": false, - "clear": true - }, - "options": { - "env": { - "CURSORLESS_REPO_ROOT": "${workspaceFolder}" - } - } - // NOTE: We don't have a way on Windows atm due to command with argument inside Run() not working - // so we need to show logs outside of vscode (see #2454) - }, - { - "label": "Neovim: Launch neovim (lua test)", - "type": "shell", - "command": "busted --run unit", - "options": { - "cwd": "cursorless.nvim" + "reveal": "silent" } - }, - - // cursorless.org - { - "label": "Serve cursorless.org", - "type": "npm", - "script": "dev", - "path": "packages/cursorless-org" - }, - { - "label": "Install local", - "type": "npm", - "script": "install-local", - "path": "packages/cursorless-vscode" - }, - { - "label": "Uninstall local", - "type": "npm", - "script": "uninstall-local", - "path": "packages/cursorless-vscode" - }, - { - "label": "Run pre commit", - "type": "shell", - "command": "pre-commit run" } ] } diff --git a/packages/test-harness/package.json b/packages/test-harness/package.json index 0b28ba5e3d..0c74c9c169 100644 --- a/packages/test-harness/package.json +++ b/packages/test-harness/package.json @@ -21,9 +21,15 @@ "test:update:subset": "c-tsx ./src/scripts/runUnitTestsOnly.ts --update --subset", "test:vscode": "c-tsx ./src/scripts/runVscodeTestsCI.ts", "test:neovim": "c-tsx ./src/scripts/runNeovimTestsCI.ts", + "test:talon": "c-tsx ./src/scripts/runTalonTests.ts", "test:talonJs": "c-tsx ./src/scripts/runTalonJsTests.ts", + "pretest": "pnpm run bundle", + "pretest:subset": "pnpm run bundle", + "pretest:update": "pnpm run bundle", + "pretest:update:subset": "pnpm run bundle", "pretest:vscode": "pnpm run bundle", "pretest:neovim": "pnpm run bundle", + "pretest:talon": "pnpm run bundle", "pretest:talonJs": "pnpm run bundle", "bundle": "bash ./scripts/compile-esbuild.sh", "generate-test-subset-file": "c-tsx ./src/scripts/generateTestSubsetFile.ts --always-open", From 404753807143147897215af0b9e428bba4a2960d Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 15:16:17 +0100 Subject: [PATCH 26/37] more build updates --- .vscode/tasks.json | 2 +- packages/test-harness/package.json | 18 ++++-------- .../src/launchVscodeAndRunTests.ts | 3 ++ packages/test-harness/src/runAllTests.ts | 22 +++++++++++++++ .../src/scripts/runNeovimTestsCI.ts | 2 -- .../src/scripts/runTalonJsTests.ts | 8 +----- .../test-harness/src/scripts/runTalonTests.ts | 7 +++-- .../test-harness/src/scripts/runUnitTests.ts | 9 ++++++ .../src/scripts/runUnitTestsOnly.ts | 28 ------------------- .../src/scripts/runVscodeTestsCI.ts | 2 -- 10 files changed, 46 insertions(+), 55 deletions(-) create mode 100644 packages/test-harness/src/scripts/runUnitTests.ts delete mode 100644 packages/test-harness/src/scripts/runUnitTestsOnly.ts diff --git a/.vscode/tasks.json b/.vscode/tasks.json index b10937c470..a05ce5abf7 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -31,7 +31,7 @@ { "label": "Build test harness", "type": "npm", - "script": "bundle", + "script": "build", "path": "packages/test-harness", "presentation": { "reveal": "silent" diff --git a/packages/test-harness/package.json b/packages/test-harness/package.json index 0c74c9c169..85688908a6 100644 --- a/packages/test-harness/package.json +++ b/packages/test-harness/package.json @@ -15,23 +15,15 @@ "scripts": { "typecheck": "tsc", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", - "test": "c-tsx ./src/scripts/runUnitTestsOnly.ts", - "test:subset": "c-tsx ./src/scripts/runUnitTestsOnly.ts --subset", - "test:update": "c-tsx ./src/scripts/runUnitTestsOnly.ts --update", - "test:update:subset": "c-tsx ./src/scripts/runUnitTestsOnly.ts --update --subset", + "test": "c-tsx ./src/scripts/runUnitTests.ts", + "test:subset": "c-tsx ./src/scripts/runUnitTests.ts --subset", + "test:update": "c-tsx ./src/scripts/runUnitTests.ts --update", + "test:update:subset": "c-tsx ./src/scripts/runUnitTests.ts --update --subset", "test:vscode": "c-tsx ./src/scripts/runVscodeTestsCI.ts", "test:neovim": "c-tsx ./src/scripts/runNeovimTestsCI.ts", "test:talon": "c-tsx ./src/scripts/runTalonTests.ts", "test:talonJs": "c-tsx ./src/scripts/runTalonJsTests.ts", - "pretest": "pnpm run bundle", - "pretest:subset": "pnpm run bundle", - "pretest:update": "pnpm run bundle", - "pretest:update:subset": "pnpm run bundle", - "pretest:vscode": "pnpm run bundle", - "pretest:neovim": "pnpm run bundle", - "pretest:talon": "pnpm run bundle", - "pretest:talonJs": "pnpm run bundle", - "bundle": "bash ./scripts/compile-esbuild.sh", + "build": "bash ./scripts/compile-esbuild.sh", "generate-test-subset-file": "c-tsx ./src/scripts/generateTestSubsetFile.ts --always-open", "generate-test-subset-file-strict": "c-tsx ./src/scripts/generateTestSubsetFile.ts --fail-if-not-exists" }, diff --git a/packages/test-harness/src/launchVscodeAndRunTests.ts b/packages/test-harness/src/launchVscodeAndRunTests.ts index 0f88add038..f9ae463856 100644 --- a/packages/test-harness/src/launchVscodeAndRunTests.ts +++ b/packages/test-harness/src/launchVscodeAndRunTests.ts @@ -69,6 +69,9 @@ export async function launchVscodeAndRunTests(extensionTestsPath: string) { vscodeExecutablePath, extensionDevelopmentPath, extensionTestsPath, + extensionTestsEnv: { + ["CURSORLESS_MODE"]: "test", + }, // Note: Crash dump causes legacy VSCode and Windows to hang, so we just // don't bother. Can be re-enabled if we ever need it; on windows it only // hangs some of the time, so might be enough to get a crash dump when you diff --git a/packages/test-harness/src/runAllTests.ts b/packages/test-harness/src/runAllTests.ts index dba53163a6..867fe2b4c8 100644 --- a/packages/test-harness/src/runAllTests.ts +++ b/packages/test-harness/src/runAllTests.ts @@ -30,6 +30,8 @@ export enum TestType { } export function runAllTests(type: TestType): Promise { + parseArgumentsAndUpdateEnv(); + return runTestsInDir( path.join(getCursorlessRepoRoot(), "packages"), (files) => @@ -68,6 +70,12 @@ async function runTestsInDir( const files = filterFiles(await glob("**/**.test.cjs", { cwd: testRoot })); + if (files.length === 0) { + throw new Error( + `No test files found. Do you need to run "pnpm run build" first?`, + ); + } + // Add files to the test suite files.forEach((f) => mocha.addFile(path.resolve(testRoot, f))); @@ -97,3 +105,17 @@ async function runTestsInDir( throw err; } } + +function parseArgumentsAndUpdateEnv() { + const args = new Set(process.argv.slice(2)); + + process.env.CURSORLESS_MODE = "test"; + + if (args.has("--subset")) { + process.env.CURSORLESS_RUN_TEST_SUBSET = "true"; + } + + if (args.has("--update")) { + process.env.CURSORLESS_TEST_UPDATE_FIXTURES = "true"; + } +} diff --git a/packages/test-harness/src/scripts/runNeovimTestsCI.ts b/packages/test-harness/src/scripts/runNeovimTestsCI.ts index 331d3f16c0..51f859f8c1 100644 --- a/packages/test-harness/src/scripts/runNeovimTestsCI.ts +++ b/packages/test-harness/src/scripts/runNeovimTestsCI.ts @@ -4,8 +4,6 @@ import { launchNeovimAndRunTests } from "../launchNeovimAndRunTests"; -process.env.CURSORLESS_MODE = "test"; - void (async () => { await launchNeovimAndRunTests(); })(); diff --git a/packages/test-harness/src/scripts/runTalonJsTests.ts b/packages/test-harness/src/scripts/runTalonJsTests.ts index 2fd1f4f2c8..5b6567fff0 100644 --- a/packages/test-harness/src/scripts/runTalonJsTests.ts +++ b/packages/test-harness/src/scripts/runTalonJsTests.ts @@ -2,14 +2,8 @@ * Runs all Talon everywhere/JS tests. */ -process.env.CURSORLESS_MODE = "test"; - void (async () => { const { TestType, runAllTests } = await import("../runAllTests"); - try { - await runAllTests(TestType.talonJs); - } catch (_ex) { - process.exit(1); - } + await runAllTests(TestType.talonJs); })(); diff --git a/packages/test-harness/src/scripts/runTalonTests.ts b/packages/test-harness/src/scripts/runTalonTests.ts index 7b90ff06bd..7396c6306d 100644 --- a/packages/test-harness/src/scripts/runTalonTests.ts +++ b/packages/test-harness/src/scripts/runTalonTests.ts @@ -1,6 +1,9 @@ /** * Runs all Talon tests. */ -import { TestType, runAllTests } from "../runAllTests"; -void runAllTests(TestType.talon); +void (async () => { + const { TestType, runAllTests } = await import("../runAllTests"); + + await runAllTests(TestType.talon); +})(); diff --git a/packages/test-harness/src/scripts/runUnitTests.ts b/packages/test-harness/src/scripts/runUnitTests.ts new file mode 100644 index 0000000000..b13f2ec6fd --- /dev/null +++ b/packages/test-harness/src/scripts/runUnitTests.ts @@ -0,0 +1,9 @@ +/** + * Runs all tests that don't have to be run within a particular environment. + */ + +void (async () => { + const { TestType, runAllTests } = await import("../runAllTests"); + + await runAllTests(TestType.unit); +})(); diff --git a/packages/test-harness/src/scripts/runUnitTestsOnly.ts b/packages/test-harness/src/scripts/runUnitTestsOnly.ts deleted file mode 100644 index d33b75a7f1..0000000000 --- a/packages/test-harness/src/scripts/runUnitTestsOnly.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Runs all tests that don't have to be run within VSCode. - */ - -const supportedArgs = new Set(["--subset", "--update"]); - -const args = new Set(process.argv.slice(2)); -const unsupportedArgs = [...args].filter((arg) => !supportedArgs.has(arg)); - -if (unsupportedArgs.length > 0) { - throw new Error(`Unsupported arguments: ${unsupportedArgs.join(", ")}`); -} - -process.env.CURSORLESS_MODE = "test"; - -if (args.has("--subset")) { - process.env.CURSORLESS_RUN_TEST_SUBSET = "true"; -} - -if (args.has("--update")) { - process.env.CURSORLESS_TEST_UPDATE_FIXTURES = "true"; -} - -void (async () => { - const { TestType, runAllTests } = await import("../runAllTests"); - - await runAllTests(TestType.unit); -})(); diff --git a/packages/test-harness/src/scripts/runVscodeTestsCI.ts b/packages/test-harness/src/scripts/runVscodeTestsCI.ts index b23ac57055..c182884b64 100644 --- a/packages/test-harness/src/scripts/runVscodeTestsCI.ts +++ b/packages/test-harness/src/scripts/runVscodeTestsCI.ts @@ -6,8 +6,6 @@ import { getCursorlessRepoRoot } from "@cursorless/node-common"; import * as path from "node:path"; import { launchVscodeAndRunTests } from "../launchVscodeAndRunTests"; -process.env.CURSORLESS_MODE = "test"; - void (async () => { const extensionTestsPath = path.resolve( getCursorlessRepoRoot(), From 1468722393cb923c80322f107c434e149e68abf6 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 15:21:30 +0100 Subject: [PATCH 27/37] cleanup --- .../test-harness/src/scripts/runNeovimTestsCI.ts | 4 +--- packages/test-harness/src/scripts/runTalonJsTests.ts | 6 ++---- packages/test-harness/src/scripts/runTalonTests.ts | 6 ++---- packages/test-harness/src/scripts/runUnitTests.ts | 6 ++---- .../test-harness/src/scripts/runVscodeTestsCI.ts | 12 +++++------- 5 files changed, 12 insertions(+), 22 deletions(-) diff --git a/packages/test-harness/src/scripts/runNeovimTestsCI.ts b/packages/test-harness/src/scripts/runNeovimTestsCI.ts index 51f859f8c1..1163e4ebd9 100644 --- a/packages/test-harness/src/scripts/runNeovimTestsCI.ts +++ b/packages/test-harness/src/scripts/runNeovimTestsCI.ts @@ -4,6 +4,4 @@ import { launchNeovimAndRunTests } from "../launchNeovimAndRunTests"; -void (async () => { - await launchNeovimAndRunTests(); -})(); +void launchNeovimAndRunTests(); diff --git a/packages/test-harness/src/scripts/runTalonJsTests.ts b/packages/test-harness/src/scripts/runTalonJsTests.ts index 5b6567fff0..555ca83798 100644 --- a/packages/test-harness/src/scripts/runTalonJsTests.ts +++ b/packages/test-harness/src/scripts/runTalonJsTests.ts @@ -2,8 +2,6 @@ * Runs all Talon everywhere/JS tests. */ -void (async () => { - const { TestType, runAllTests } = await import("../runAllTests"); +import { TestType, runAllTests } from "../runAllTests"; - await runAllTests(TestType.talonJs); -})(); +void runAllTests(TestType.talonJs); diff --git a/packages/test-harness/src/scripts/runTalonTests.ts b/packages/test-harness/src/scripts/runTalonTests.ts index 7396c6306d..8b8aab4526 100644 --- a/packages/test-harness/src/scripts/runTalonTests.ts +++ b/packages/test-harness/src/scripts/runTalonTests.ts @@ -2,8 +2,6 @@ * Runs all Talon tests. */ -void (async () => { - const { TestType, runAllTests } = await import("../runAllTests"); +import { TestType, runAllTests } from "../runAllTests"; - await runAllTests(TestType.talon); -})(); +void runAllTests(TestType.talon); diff --git a/packages/test-harness/src/scripts/runUnitTests.ts b/packages/test-harness/src/scripts/runUnitTests.ts index b13f2ec6fd..0d62c31fc4 100644 --- a/packages/test-harness/src/scripts/runUnitTests.ts +++ b/packages/test-harness/src/scripts/runUnitTests.ts @@ -2,8 +2,6 @@ * Runs all tests that don't have to be run within a particular environment. */ -void (async () => { - const { TestType, runAllTests } = await import("../runAllTests"); +import { TestType, runAllTests } from "../runAllTests"; - await runAllTests(TestType.unit); -})(); +void runAllTests(TestType.unit); diff --git a/packages/test-harness/src/scripts/runVscodeTestsCI.ts b/packages/test-harness/src/scripts/runVscodeTestsCI.ts index c182884b64..4cde3f5837 100644 --- a/packages/test-harness/src/scripts/runVscodeTestsCI.ts +++ b/packages/test-harness/src/scripts/runVscodeTestsCI.ts @@ -6,11 +6,9 @@ import { getCursorlessRepoRoot } from "@cursorless/node-common"; import * as path from "node:path"; import { launchVscodeAndRunTests } from "../launchVscodeAndRunTests"; -void (async () => { - const extensionTestsPath = path.resolve( - getCursorlessRepoRoot(), - "packages/test-harness/out/extensionTestsVscode.cjs", - ); +const extensionTestsPath = path.resolve( + getCursorlessRepoRoot(), + "packages/test-harness/out/extensionTestsVscode.cjs", +); - await launchVscodeAndRunTests(extensionTestsPath); -})(); +void launchVscodeAndRunTests(extensionTestsPath); From e14e1c09e71e51f86c2ac01449be8e0ebcf02e56 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 15:30:29 +0100 Subject: [PATCH 28/37] Move sheet cheat to out directory --- packages/cheatsheet-local/README.md | 4 ++-- packages/cheatsheet-local/vite.config.ts | 2 +- packages/cursorless-vscode/src/scripts/populateDist/assets.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/cheatsheet-local/README.md b/packages/cheatsheet-local/README.md index 9b01f4aac2..4a72cf7c4e 100644 --- a/packages/cheatsheet-local/README.md +++ b/packages/cheatsheet-local/README.md @@ -11,7 +11,7 @@ Note that there is no development server for this app. It is just a bundle step. Builds the cheatsheet into a single file for deployment. ```bash -pnpm bundle +pnpm bundle:prod ``` -The output will be in `dist/index.html`. Note that this file includes a bit of fake data so that it can be opened to check that it is functioning, but in production it will be replaced with the real data (see above). +The output will be in `out/index.html`. Note that this file includes a bit of fake data so that it can be opened to check that it is functioning, but in production it will be replaced with the real data (see above). diff --git a/packages/cheatsheet-local/vite.config.ts b/packages/cheatsheet-local/vite.config.ts index 37e703cc4f..edf7ba61d2 100644 --- a/packages/cheatsheet-local/vite.config.ts +++ b/packages/cheatsheet-local/vite.config.ts @@ -7,7 +7,7 @@ import { viteSingleFile } from "vite-plugin-singlefile"; export default defineConfig((): UserConfig => { return { build: { - outDir: "dist", + outDir: "out", }, resolve: { diff --git a/packages/cursorless-vscode/src/scripts/populateDist/assets.ts b/packages/cursorless-vscode/src/scripts/populateDist/assets.ts index 50d7a1027b..5cea6271a6 100644 --- a/packages/cursorless-vscode/src/scripts/populateDist/assets.ts +++ b/packages/cursorless-vscode/src/scripts/populateDist/assets.ts @@ -8,7 +8,7 @@ export const assets: Asset[] = [ { source: "../../NOTICE.md", destination: "NOTICE.md" }, { source: "../../README.md", destination: "README.md" }, { - source: "../cheatsheet-local/dist/index.html", + source: "../cheatsheet-local/out/index.html", destination: "cheatsheet.html", // We allow this to be optional in dev mode because it is expensive to // build, and is only used when they say "cursorless cheatsheet". From 84c51a366765e47f88e5c0227cb4fc2fd3c98c80 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 15:34:42 +0100 Subject: [PATCH 29/37] Update install local script --- packages/cursorless-vscode/scripts/install-local.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/cursorless-vscode/scripts/install-local.sh b/packages/cursorless-vscode/scripts/install-local.sh index 167f5a2224..525d39029c 100755 --- a/packages/cursorless-vscode/scripts/install-local.sh +++ b/packages/cursorless-vscode/scripts/install-local.sh @@ -16,9 +16,8 @@ fi # Cursorless first and using a special extension id to break update chain # 1. Build local cursorless, using special extension id to break update chain -pnpm bundle -pnpm -F @cursorless/cheatsheet-local bundle -pnpm -F @cursorless/cursorless-vscode-tutorial-webview bundle +pnpm -F @cursorless/cheatsheet-local bundle:prod +pnpm -F @cursorless/cursorless-vscode-tutorial-webview bundle:prod pnpm build --local-install # 2. Bundle the extension From 719839a7ee39a388f5abfde8b38708611735ebe1 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 15:59:42 +0100 Subject: [PATCH 30/37] Apply suggestions from code review Co-authored-by: Andreas Arvidsson --- AGENTS.md | 3 +-- packages/test-harness/scripts/compile-esbuild.sh | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index de99a5b242..3762dfacdb 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -15,9 +15,8 @@ ## Build and Test -- Always run lint and typecheck when making changes: +- Always run lint when making changes: - `pnpm run lint` - - `pnpm run typecheck` - Tests can be run with: - `pnpm test` diff --git a/packages/test-harness/scripts/compile-esbuild.sh b/packages/test-harness/scripts/compile-esbuild.sh index 4f667a4053..926026df28 100755 --- a/packages/test-harness/scripts/compile-esbuild.sh +++ b/packages/test-harness/scripts/compile-esbuild.sh @@ -11,6 +11,6 @@ set -euo pipefail ./src/runners/extensionTestsNeovim.ts \ --outfile=out/extensionTestsNeovim.cjs -# Compiled test cases +# Compile test cases find .. -name '*.test.ts' -print0 | xargs -0 -n 50 ./scripts/run-esbuild.sh --outdir=out --out-extension:.js=.cjs From 19c28f4d1b72648aa80da7ed04d47301a9b91a70 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 16:25:06 +0100 Subject: [PATCH 31/37] --- packages/cheatsheet-local/tsconfig.json | 6 +----- packages/cheatsheet/tsconfig.json | 6 +----- packages/cursorless-org-docs/tsconfig.json | 7 ++----- packages/cursorless-org/tsconfig.json | 9 ++------- .../cursorless-vscode-tutorial-webview/tsconfig.json | 7 +------ packages/meta-updater/tsconfig.json | 3 --- tsconfig.web.json | 8 ++++++++ 7 files changed, 15 insertions(+), 31 deletions(-) create mode 100644 tsconfig.web.json diff --git a/packages/cheatsheet-local/tsconfig.json b/packages/cheatsheet-local/tsconfig.json index 585ad521cf..dde103acad 100644 --- a/packages/cheatsheet-local/tsconfig.json +++ b/packages/cheatsheet-local/tsconfig.json @@ -1,10 +1,6 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.web.json", "compilerOptions": { - "target": "es2022", - "lib": ["dom", "es2022"], - "jsx": "react-jsx", - "jsxImportSource": "preact", "skipLibCheck": true }, "include": [ diff --git a/packages/cheatsheet/tsconfig.json b/packages/cheatsheet/tsconfig.json index 585ad521cf..dde103acad 100644 --- a/packages/cheatsheet/tsconfig.json +++ b/packages/cheatsheet/tsconfig.json @@ -1,10 +1,6 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.web.json", "compilerOptions": { - "target": "es2022", - "lib": ["dom", "es2022"], - "jsx": "react-jsx", - "jsxImportSource": "preact", "skipLibCheck": true }, "include": [ diff --git a/packages/cursorless-org-docs/tsconfig.json b/packages/cursorless-org-docs/tsconfig.json index 408e5121a9..b3112620c2 100644 --- a/packages/cursorless-org-docs/tsconfig.json +++ b/packages/cursorless-org-docs/tsconfig.json @@ -1,10 +1,7 @@ { - "extends": ["@tsconfig/docusaurus/tsconfig.json", "../../tsconfig.base.json"], + "extends": ["@tsconfig/docusaurus/tsconfig.json", "../../tsconfig.web.json"], "compilerOptions": { - "target": "es2022", - "lib": ["dom", "es2022"], - "jsx": "react", - "esModuleInterop": true + "jsx": "react-jsx" }, "include": [ "src/**/*.ts", diff --git a/packages/cursorless-org/tsconfig.json b/packages/cursorless-org/tsconfig.json index db26b60037..4e63517cbd 100644 --- a/packages/cursorless-org/tsconfig.json +++ b/packages/cursorless-org/tsconfig.json @@ -1,12 +1,7 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.web.json", "compilerOptions": { - "target": "es2022", - "lib": ["dom", "es2022"], - "jsx": "react-jsx", - "jsxImportSource": "preact", - "skipLibCheck": true, - "isolatedModules": true + "skipLibCheck": true }, "include": [ "src/**/*.ts", diff --git a/packages/cursorless-vscode-tutorial-webview/tsconfig.json b/packages/cursorless-vscode-tutorial-webview/tsconfig.json index cb21d4300e..13f9279bff 100644 --- a/packages/cursorless-vscode-tutorial-webview/tsconfig.json +++ b/packages/cursorless-vscode-tutorial-webview/tsconfig.json @@ -1,10 +1,5 @@ { - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "lib": ["dom", "es2022"], - "jsx": "react-jsx", - "jsxImportSource": "preact" - }, + "extends": "../../tsconfig.web.json", "include": [ "src/**/*.ts", "src/**/*.tsx", diff --git a/packages/meta-updater/tsconfig.json b/packages/meta-updater/tsconfig.json index 9f02581c94..d4fbbd0828 100644 --- a/packages/meta-updater/tsconfig.json +++ b/packages/meta-updater/tsconfig.json @@ -1,7 +1,4 @@ { "extends": "../../tsconfig.base.json", - "compilerOptions": { - "esModuleInterop": true - }, "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/tsconfig.web.json b/tsconfig.web.json new file mode 100644 index 0000000000..64e644abe0 --- /dev/null +++ b/tsconfig.web.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "lib": ["dom", "es2022"], + "jsx": "react-jsx", + "jsxImportSource": "preact" + } +} From a5e1550a4ccc8cd302b661bdcc4698adffefdb05 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 16:46:49 +0100 Subject: [PATCH 32/37] Small fixes --- .../cursorless-everywhere-talon-core/src/polyfill.ts | 10 ---------- packages/cursorless-everywhere-talon-e2e/package.json | 3 ++- .../scripts/test-quickjs.sh | 6 +++--- .../cursorless-everywhere-talon-e2e/tsconfig.json | 7 +------ packages/cursorless-everywhere-talon/src/polyfill.ts | 11 +++++++++++ .../src/types/quickjs.d.ts | 0 .../src/types/talon.d.ts | 0 packages/cursorless-everywhere-talon/tsconfig.json | 7 +------ packages/cursorless-org-docs/tsconfig.json | 3 ++- packages/meta-updater/src/updateTSConfig.ts | 4 ---- pnpm-lock.yaml | 3 +++ 11 files changed, 23 insertions(+), 31 deletions(-) create mode 100644 packages/cursorless-everywhere-talon/src/polyfill.ts rename packages/{cursorless-everywhere-talon-core => cursorless-everywhere-talon}/src/types/quickjs.d.ts (100%) rename packages/{cursorless-everywhere-talon-core => cursorless-everywhere-talon}/src/types/talon.d.ts (100%) diff --git a/packages/cursorless-everywhere-talon-core/src/polyfill.ts b/packages/cursorless-everywhere-talon-core/src/polyfill.ts index cc81601dee..f0d5de8c0c 100644 --- a/packages/cursorless-everywhere-talon-core/src/polyfill.ts +++ b/packages/cursorless-everywhere-talon-core/src/polyfill.ts @@ -13,16 +13,6 @@ if (global.performance == null) { }; } -// Allows us to use `console.*` with quickjs -if (typeof print === "function") { - global.console = { - log: print, - error: print, - warn: print, - debug: print, - }; -} - // In quickjs `setTimeout` is not available. // FIXME: Remove dependency on `setTimeout` in the future. // https://github.com/cursorless-dev/cursorless/issues/2596 diff --git a/packages/cursorless-everywhere-talon-e2e/package.json b/packages/cursorless-everywhere-talon-e2e/package.json index ae766bc8a2..2488e4be39 100644 --- a/packages/cursorless-everywhere-talon-e2e/package.json +++ b/packages/cursorless-everywhere-talon-e2e/package.json @@ -9,7 +9,7 @@ "scripts": { "typecheck": "tsc", "clean": "rm -rf ./out tsconfig.tsbuildinfo ./dist ./build", - "test:quickjs": "bash scripts/test-quickjs.sh" + "test:quickjs": "bash ./scripts/test-quickjs.sh" }, "dependencies": { "@cursorless/common": "workspace:*", @@ -19,6 +19,7 @@ }, "devDependencies": { "@types/mocha": "^10.0.10", + "esbuild": "^0.27.0", "mocha": "^11.7.5" } } diff --git a/packages/cursorless-everywhere-talon-e2e/scripts/test-quickjs.sh b/packages/cursorless-everywhere-talon-e2e/scripts/test-quickjs.sh index de7b8f7d1b..136de7a3a0 100755 --- a/packages/cursorless-everywhere-talon-e2e/scripts/test-quickjs.sh +++ b/packages/cursorless-everywhere-talon-e2e/scripts/test-quickjs.sh @@ -6,7 +6,7 @@ QUICKJS_VERSION=2024-01-13 echo $ esbuild ... src/quickjsTest.ts esbuild \ - --outfile=testOut/quickjsTest.mjs \ + --outfile=out/quickjsTest.mjs \ --platform=neutral \ --format=esm \ --main-fields=main,module \ @@ -15,8 +15,8 @@ esbuild \ --external:node:crypto \ src/quickjsTest.ts -echo $ cd testOut -cd testOut +echo $ cd out +cd out if [[ "$OSTYPE" == "darwin"* ]]; then brew install quickjs diff --git a/packages/cursorless-everywhere-talon-e2e/tsconfig.json b/packages/cursorless-everywhere-talon-e2e/tsconfig.json index 00a2affff5..d4fbbd0828 100644 --- a/packages/cursorless-everywhere-talon-e2e/tsconfig.json +++ b/packages/cursorless-everywhere-talon-e2e/tsconfig.json @@ -1,9 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": [ - "src/**/*.ts", - "src/**/*.json", - "../../typings/**/*.d.ts", - "../cursorless-everywhere-talon-core/src/types/**/*.d.ts" - ] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-everywhere-talon/src/polyfill.ts b/packages/cursorless-everywhere-talon/src/polyfill.ts new file mode 100644 index 0000000000..8c7527253c --- /dev/null +++ b/packages/cursorless-everywhere-talon/src/polyfill.ts @@ -0,0 +1,11 @@ +// Allows us to use `console.*` with quickjs +if (typeof print === "function") { + const global = globalThis as any; + + global.console = { + log: print, + error: print, + warn: print, + debug: print, + }; +} diff --git a/packages/cursorless-everywhere-talon-core/src/types/quickjs.d.ts b/packages/cursorless-everywhere-talon/src/types/quickjs.d.ts similarity index 100% rename from packages/cursorless-everywhere-talon-core/src/types/quickjs.d.ts rename to packages/cursorless-everywhere-talon/src/types/quickjs.d.ts diff --git a/packages/cursorless-everywhere-talon-core/src/types/talon.d.ts b/packages/cursorless-everywhere-talon/src/types/talon.d.ts similarity index 100% rename from packages/cursorless-everywhere-talon-core/src/types/talon.d.ts rename to packages/cursorless-everywhere-talon/src/types/talon.d.ts diff --git a/packages/cursorless-everywhere-talon/tsconfig.json b/packages/cursorless-everywhere-talon/tsconfig.json index 00a2affff5..d4fbbd0828 100644 --- a/packages/cursorless-everywhere-talon/tsconfig.json +++ b/packages/cursorless-everywhere-talon/tsconfig.json @@ -1,9 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": [ - "src/**/*.ts", - "src/**/*.json", - "../../typings/**/*.d.ts", - "../cursorless-everywhere-talon-core/src/types/**/*.d.ts" - ] + "include": ["src/**/*.ts", "src/**/*.json", "../../typings/**/*.d.ts"] } diff --git a/packages/cursorless-org-docs/tsconfig.json b/packages/cursorless-org-docs/tsconfig.json index b3112620c2..c82379e86b 100644 --- a/packages/cursorless-org-docs/tsconfig.json +++ b/packages/cursorless-org-docs/tsconfig.json @@ -1,7 +1,8 @@ { "extends": ["@tsconfig/docusaurus/tsconfig.json", "../../tsconfig.web.json"], "compilerOptions": { - "jsx": "react-jsx" + "jsx": "react-jsx", + "jsxImportSource": "react" }, "include": [ "src/**/*.ts", diff --git a/packages/meta-updater/src/updateTSConfig.ts b/packages/meta-updater/src/updateTSConfig.ts index d84924f196..980aeeee4f 100644 --- a/packages/meta-updater/src/updateTSConfig.ts +++ b/packages/meta-updater/src/updateTSConfig.ts @@ -60,9 +60,6 @@ export async function updateTSConfig( delete compilerOptions.outDir; delete compilerOptions.rootDir; - const packageIncludes = - input.include?.filter((i) => i.startsWith("../cursorless")) ?? []; - return { ...input, extends: getExtends(pathFromPackageToRoot, input.extends), @@ -74,7 +71,6 @@ export async function updateTSConfig( ...(input.compilerOptions?.jsx == null ? [] : ["src/**/*.tsx"]), "src/**/*.json", toPosixPath(path.join(pathFromPackageToRoot, "typings", "**/*.d.ts")), - ...packageIncludes, ], }; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4552feba9d..717068480c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -342,6 +342,9 @@ importers: '@types/mocha': specifier: ^10.0.10 version: 10.0.10 + esbuild: + specifier: ^0.27.0 + version: 0.27.4 mocha: specifier: ^11.7.5 version: 11.7.5 From e1870db3d92ab97fbd1c0fc473ebfde725d7cec4 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 17:02:40 +0100 Subject: [PATCH 33/37] Update meta-updater and quickjs test --- .../scripts/test-quickjs.sh | 13 +++------ packages/meta-updater/src/updateTSConfig.ts | 27 ++++++++++++------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/packages/cursorless-everywhere-talon-e2e/scripts/test-quickjs.sh b/packages/cursorless-everywhere-talon-e2e/scripts/test-quickjs.sh index 136de7a3a0..fd1e3e2afb 100755 --- a/packages/cursorless-everywhere-talon-e2e/scripts/test-quickjs.sh +++ b/packages/cursorless-everywhere-talon-e2e/scripts/test-quickjs.sh @@ -1,21 +1,18 @@ #!/usr/bin/env bash -set -euo pipefail -set -euo pipefail +set -euox pipefail QUICKJS_VERSION=2024-01-13 -echo $ esbuild ... src/quickjsTest.ts esbuild \ + src/quickjsTest.ts \ --outfile=out/quickjsTest.mjs \ --platform=neutral \ --format=esm \ --main-fields=main,module \ --bundle \ --external:std \ - --external:node:crypto \ - src/quickjsTest.ts + --external:node:crypto -echo $ cd out cd out if [[ "$OSTYPE" == "darwin"* ]]; then @@ -23,7 +20,6 @@ if [[ "$OSTYPE" == "darwin"* ]]; then # Brew doesn't actually publish different versions of the quickjs binary # brew install quickjs@$QUICKJS_VERSION - echo $ qjs -I quickjsTest.mjs qjs -I quickjsTest.mjs exit 0 @@ -46,11 +42,8 @@ else exit 1 fi -echo $ curl -o $QUICKJS_FILE $QUICKJS_URL curl -o $QUICKJS_FILE $QUICKJS_URL -echo $ unzip $QUICKJS_FILE unzip $QUICKJS_FILE -echo $ ./qjs -I quickjsTest.mjs ./qjs -I quickjsTest.mjs diff --git a/packages/meta-updater/src/updateTSConfig.ts b/packages/meta-updater/src/updateTSConfig.ts index 980aeeee4f..14cb0ccc7b 100644 --- a/packages/meta-updater/src/updateTSConfig.ts +++ b/packages/meta-updater/src/updateTSConfig.ts @@ -1,12 +1,15 @@ import { getLockfileImporterId } from "@pnpm/lockfile-file"; import type { FormatPluginFnOptions } from "@pnpm/meta-updater"; -import { cloneDeep, isEqual, uniq } from "lodash-es"; +import { cloneDeep, isEqual } from "lodash-es"; import normalizePath from "normalize-path"; import * as path from "path"; import type { TsConfigJson } from "type-fest"; import type { Context } from "./Context"; import { toPosixPath } from "./toPosixPath"; +const baseName = "tsconfig.base.json"; +const webJsonName = "tsconfig.web.json"; + /** * Given a tsconfig.json, update it to match our conventions. This function is * called by the pnpm `meta-updater` plugin either to check if the tsconfig.json @@ -60,15 +63,20 @@ export async function updateTSConfig( delete compilerOptions.outDir; delete compilerOptions.rootDir; + const extendsList = getExtends(pathFromPackageToRoot, input.extends); + const isWeb = + input.compilerOptions?.jsx != null || + extendsList.some((e) => e.endsWith(webJsonName)); + return { ...input, - extends: getExtends(pathFromPackageToRoot, input.extends), + extends: extendsList.length === 1 ? extendsList[0] : extendsList, ...(isEqual(compilerOptions, {}) ? {} : { compilerOptions }), include: [ "src/**/*.ts", - ...(input.compilerOptions?.jsx == null ? [] : ["src/**/*.tsx"]), + ...(isWeb ? ["src/**/*.tsx"] : []), "src/**/*.json", toPosixPath(path.join(pathFromPackageToRoot, "typings", "**/*.d.ts")), ], @@ -79,18 +87,19 @@ function getExtends( pathFromPackageToRoot: string, inputExtends: string | string[] | undefined, ) { - let extendsList = + const extendsList = inputExtends == null ? [] : Array.isArray(inputExtends) ? [...inputExtends] : [inputExtends]; - extendsList.push( - toPosixPath(path.join(pathFromPackageToRoot, "tsconfig.base.json")), - ); + const basePath = toPosixPath(path.join(pathFromPackageToRoot, baseName)); + const webPath = toPosixPath(path.join(pathFromPackageToRoot, webJsonName)); - extendsList = uniq(extendsList); + if (!extendsList.includes(basePath) && !extendsList.includes(webPath)) { + extendsList.push(basePath); + } - return extendsList.length === 1 ? extendsList[0] : extendsList; + return extendsList; } From c91652fd9e7541e8db1b16fe6b2f6cc05525665a Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 17:15:21 +0100 Subject: [PATCH 34/37] updated dependencies --- .../node/command-server/package.json | 2 +- package.json | 2 +- packages/cursorless-engine/package.json | 4 +- .../package.json | 2 +- packages/cursorless-neovim-e2e/package.json | 2 +- packages/cursorless-vscode-e2e/package.json | 2 +- packages/cursorless-vscode/package.json | 4 +- pnpm-lock.yaml | 923 +++++++++++------- 8 files changed, 559 insertions(+), 382 deletions(-) diff --git a/cursorless.nvim/node/command-server/package.json b/cursorless.nvim/node/command-server/package.json index 59a89c4ff7..35482431f7 100644 --- a/cursorless.nvim/node/command-server/package.json +++ b/cursorless.nvim/node/command-server/package.json @@ -17,7 +17,7 @@ "@types/vscode": "^1.98.0", "@typescript-eslint/eslint-plugin": "^8.32.1", "@typescript-eslint/parser": "^8.32.1", - "esbuild": "^0.27.0", + "esbuild": "^0.27.4", "eslint": "^10.0.0", "glob": "^13.0.0", "mocha": "^8.1.3", diff --git a/package.json b/package.json index fbaa4159b7..4d26c2eb9e 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "syncpack": "^14.2.0", "tsx": "^4.21.0", "typescript": "^5.9.3", - "typescript-eslint": "^8.57.0" + "typescript-eslint": "^8.57.1" }, "pnpm": { "patchedDependencies": { diff --git a/packages/cursorless-engine/package.json b/packages/cursorless-engine/package.json index 949b970a36..2078e8bbf8 100644 --- a/packages/cursorless-engine/package.json +++ b/packages/cursorless-engine/package.json @@ -20,7 +20,7 @@ "@cursorless/common": "workspace:*", "@cursorless/node-common": "workspace:*", "@cursorless/sentence-parser": "workspace:*", - "@cursorless/talon-tools": "^0.7.0", + "@cursorless/talon-tools": "^0.8.0", "immer": "^11.1.4", "immutability-helper": "^3.1.1", "itertools": "^2.6.0", @@ -41,7 +41,7 @@ "chai": "^6.2.2", "js-yaml": "^4.1.1", "mocha": "^11.7.5", - "sinon": "^21.0.2", + "sinon": "^21.0.3", "vscode-uri": "^3.1.0", "web-tree-sitter": "^0.26.7" } diff --git a/packages/cursorless-everywhere-talon-e2e/package.json b/packages/cursorless-everywhere-talon-e2e/package.json index 2488e4be39..54276757c7 100644 --- a/packages/cursorless-everywhere-talon-e2e/package.json +++ b/packages/cursorless-everywhere-talon-e2e/package.json @@ -19,7 +19,7 @@ }, "devDependencies": { "@types/mocha": "^10.0.10", - "esbuild": "^0.27.0", + "esbuild": "^0.27.4", "mocha": "^11.7.5" } } diff --git a/packages/cursorless-neovim-e2e/package.json b/packages/cursorless-neovim-e2e/package.json index f0d3171dc7..48b0fb09fb 100644 --- a/packages/cursorless-neovim-e2e/package.json +++ b/packages/cursorless-neovim-e2e/package.json @@ -28,6 +28,6 @@ "@types/sinon": "^21.0.0", "js-yaml": "^4.1.1", "neovim": "^5.4.0", - "sinon": "^21.0.2" + "sinon": "^21.0.3" } } diff --git a/packages/cursorless-vscode-e2e/package.json b/packages/cursorless-vscode-e2e/package.json index 37cea18233..3b8bc65922 100644 --- a/packages/cursorless-vscode-e2e/package.json +++ b/packages/cursorless-vscode-e2e/package.json @@ -33,6 +33,6 @@ "js-yaml": "^4.1.1", "mocha": "^11.7.5", "semver": "^7.7.4", - "sinon": "^21.0.2" + "sinon": "^21.0.3" } } diff --git a/packages/cursorless-vscode/package.json b/packages/cursorless-vscode/package.json index bb1abe177a..01bc59a0e2 100644 --- a/packages/cursorless-vscode/package.json +++ b/packages/cursorless-vscode/package.json @@ -1334,9 +1334,9 @@ "@types/sinon": "^21.0.0", "@types/vscode": "1.98.0", "esbuild": "^0.27.4", - "fast-xml-parser": "^5.5.5", + "fast-xml-parser": "^5.5.6", "fs-extra": "^11.3.4", - "sinon": "^21.0.2", + "sinon": "^21.0.3", "tsx": "^4.21.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 717068480c..5e2a09a62c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -49,7 +49,7 @@ importers: version: 4.4.4(eslint-plugin-import@2.32.0)(eslint@10.0.3(jiti@2.6.1)) eslint-plugin-import: specifier: ^2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@10.0.3(jiti@2.6.1)) + version: 2.32.0(@typescript-eslint/parser@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@10.0.3(jiti@2.6.1)) eslint-plugin-mocha: specifier: ^11.2.0 version: 11.2.0(eslint@10.0.3(jiti@2.6.1)) @@ -58,7 +58,7 @@ importers: version: 63.0.0(eslint@10.0.3(jiti@2.6.1)) eslint-plugin-unused-imports: specifier: ^4.4.1 - version: 4.4.1(@typescript-eslint/eslint-plugin@8.57.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1)) + version: 4.4.1(@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1)) prettier: specifier: ^3.8.1 version: 3.8.1 @@ -81,8 +81,8 @@ importers: specifier: ^5.9.3 version: 5.9.3 typescript-eslint: - specifier: ^8.57.0 - version: 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) + specifier: ^8.57.1 + version: 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) packages/cheatsheet: dependencies: @@ -144,13 +144,13 @@ importers: version: 5.9.3 vite: specifier: ^8.0.0 - version: 8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-purgecss: specifier: ^0.2.13 - version: 0.2.13(@swc/core@1.15.18)(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + version: 0.2.13(@swc/core@1.15.18)(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) vite-plugin-singlefile: specifier: ^2.3.2 - version: 2.3.2(rollup@4.59.0)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.3.2(rollup@4.59.0)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) packages/common: dependencies: @@ -229,8 +229,8 @@ importers: specifier: workspace:* version: link:../sentence-parser '@cursorless/talon-tools': - specifier: ^0.7.0 - version: 0.7.0 + specifier: ^0.8.0 + version: 0.8.0 immer: specifier: ^11.1.4 version: 11.1.4 @@ -287,8 +287,8 @@ importers: specifier: ^11.7.5 version: 11.7.5 sinon: - specifier: ^21.0.2 - version: 21.0.2 + specifier: ^21.0.3 + version: 21.0.3 vscode-uri: specifier: ^3.1.0 version: 3.1.0 @@ -343,7 +343,7 @@ importers: specifier: ^10.0.10 version: 10.0.10 esbuild: - specifier: ^0.27.0 + specifier: ^0.27.4 version: 0.27.4 mocha: specifier: ^11.7.5 @@ -426,8 +426,8 @@ importers: specifier: ^5.4.0 version: 5.4.0 sinon: - specifier: ^21.0.2 - version: 21.0.2 + specifier: ^21.0.3 + version: 21.0.3 packages/cursorless-org: dependencies: @@ -464,13 +464,13 @@ importers: version: 5.9.3 vite: specifier: ^8.0.0 - version: 8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-purgecss: specifier: ^0.2.13 - version: 0.2.13(@swc/core@1.15.18)(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + version: 0.2.13(@swc/core@1.15.18)(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) vite-plugin-svgr: specifier: ^4.5.0 - version: 4.5.0(rollup@4.59.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.5.0(rollup@4.59.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) packages/cursorless-org-docs: dependencies: @@ -485,22 +485,22 @@ importers: version: 4.6.0(@algolia/client-search@5.49.2)(@types/react@19.2.14)(algoliasearch@5.49.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3) '@docusaurus/core': specifier: ^3.9.2 - version: 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + version: 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/faster': specifier: ^3.9.2 version: 3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4) '@docusaurus/preset-classic': specifier: ^3.9.2 - version: 3.9.2(@algolia/client-search@5.49.2)(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(@types/react@19.2.14)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3) + version: 3.9.2(@algolia/client-search@5.49.2)(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(@types/react@19.2.14)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3) '@docusaurus/theme-classic': specifier: ^3.9.2 - version: 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(@types/react@19.2.14)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + version: 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(@types/react@19.2.14)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/theme-common': specifier: ^3.9.2 - version: 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/theme-search-algolia': specifier: ^3.9.2 - version: 3.9.2(@algolia/client-search@5.49.2)(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(@types/react@19.2.14)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3) + version: 3.9.2(@algolia/client-search@5.49.2)(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(@types/react@19.2.14)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3) '@mdx-js/react': specifier: ^3.1.1 version: 3.1.1(@types/react@19.2.14)(react@19.2.4) @@ -512,7 +512,7 @@ importers: version: 2.1.1 docusaurus-plugin-sass: specifier: ^0.2.6 - version: 0.2.6(@docusaurus/core@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@rspack/core@1.7.8)(sass@1.98.0)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)) + version: 0.2.6(@docusaurus/core@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@rspack/core@1.7.9)(sass@1.98.0)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)) mdast-util-find-and-replace: specifier: ^3.0.2 version: 3.0.2 @@ -655,14 +655,14 @@ importers: specifier: ^0.27.4 version: 0.27.4 fast-xml-parser: - specifier: ^5.5.5 - version: 5.5.5 + specifier: ^5.5.6 + version: 5.5.6 fs-extra: specifier: ^11.3.4 version: 11.3.4 sinon: - specifier: ^21.0.2 - version: 21.0.2 + specifier: ^21.0.3 + version: 21.0.3 tsx: specifier: ^4.21.0 version: 4.21.0 @@ -719,8 +719,8 @@ importers: specifier: ^7.7.4 version: 7.7.4 sinon: - specifier: ^21.0.2 - version: 21.0.2 + specifier: ^21.0.3 + version: 21.0.3 packages/cursorless-vscode-tutorial-webview: dependencies: @@ -739,10 +739,10 @@ importers: version: 1.57.5 vite: specifier: ^8.0.0 - version: 8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) vite-plugin-purgecss: specifier: ^0.2.13 - version: 0.2.13(@swc/core@1.15.18)(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) + version: 0.2.13(@swc/core@1.15.18)(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) packages/meta-updater: devDependencies: @@ -1055,8 +1055,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.6.7': - resolution: {integrity: sha512-6Fqi8MtQ/PweQ9xvux65emkLQ83uB+qAVtfHkC9UodyHMIZdxNI01HjLCLUtybElp2KY2XNE0nOgyP1E1vXw9w==} + '@babel/helper-define-polyfill-provider@0.6.8': + resolution: {integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -1118,12 +1118,12 @@ packages: resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.6': - resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} + '@babel/helpers@7.29.2': + resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.0': - resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} engines: {node: '>=6.0.0'} hasBin: true @@ -1619,8 +1619,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.29.0': - resolution: {integrity: sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==} + '@babel/preset-env@7.29.2': + resolution: {integrity: sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1642,12 +1642,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime-corejs3@7.29.0': - resolution: {integrity: sha512-TgUkdp71C9pIbBcHudc+gXZnihEDOjUAmXO1VO4HHGES7QLZcShR0stfKIxLSNIYx2fqhmJChOjm/wkF8wv4gA==} + '@babel/runtime-corejs3@7.29.2': + resolution: {integrity: sha512-Lc94FOD5+0aXhdb0Tdg3RUtqT6yWbI/BbFWvlaSJ3gAb9Ks+99nHRDKADVqC37er4eCB0fHyWT+y+K3QOvJKbw==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.28.6': - resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} '@babel/template@7.28.6': @@ -2027,8 +2027,8 @@ packages: peerDependencies: postcss: ^8.4 - '@cursorless/talon-tools@0.7.0': - resolution: {integrity: sha512-P7sJyKC61UfhX2P+5KIV9pME7qx6M7L4tgDGOO7RNSrfoTXsP+SSjFDh/0zxyXinO9J3J6acCf/z+acIEIbVWA==} + '@cursorless/talon-tools@0.8.0': + resolution: {integrity: sha512-JGcwGfX57dcgIykJVBmZRyeiTptBuunamhw0kTjERb3ob0K1YyS6BzqVEDwtj58We5VqQF8myHnhVzbu0+VyGw==} hasBin: true '@cursorless/tree-sitter-wasms@0.7.0': @@ -2973,6 +2973,10 @@ packages: '@napi-rs/wasm-runtime@1.1.1': resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -3091,6 +3095,40 @@ packages: resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} engines: {node: '>= 10.0.0'} + '@peculiar/asn1-cms@2.6.1': + resolution: {integrity: sha512-vdG4fBF6Lkirkcl53q6eOdn3XYKt+kJTG59edgRZORlg/3atWWEReRCx5rYE1ZzTTX6vLK5zDMjHh7vbrcXGtw==} + + '@peculiar/asn1-csr@2.6.1': + resolution: {integrity: sha512-WRWnKfIocHyzFYQTka8O/tXCiBquAPSrRjXbOkHbO4qdmS6loffCEGs+rby6WxxGdJCuunnhS2duHURhjyio6w==} + + '@peculiar/asn1-ecc@2.6.1': + resolution: {integrity: sha512-+Vqw8WFxrtDIN5ehUdvlN2m73exS2JVG0UAyfVB31gIfor3zWEAQPD+K9ydCxaj3MLen9k0JhKpu9LqviuCE1g==} + + '@peculiar/asn1-pfx@2.6.1': + resolution: {integrity: sha512-nB5jVQy3MAAWvq0KY0R2JUZG8bO/bTLpnwyOzXyEh/e54ynGTatAR+csOnXkkVD9AFZ2uL8Z7EV918+qB1qDvw==} + + '@peculiar/asn1-pkcs8@2.6.1': + resolution: {integrity: sha512-JB5iQ9Izn5yGMw3ZG4Nw3Xn/hb/G38GYF3lf7WmJb8JZUydhVGEjK/ZlFSWhnlB7K/4oqEs8HnfFIKklhR58Tw==} + + '@peculiar/asn1-pkcs9@2.6.1': + resolution: {integrity: sha512-5EV8nZoMSxeWmcxWmmcolg22ojZRgJg+Y9MX2fnE2bGRo5KQLqV5IL9kdSQDZxlHz95tHvIq9F//bvL1OeNILw==} + + '@peculiar/asn1-rsa@2.6.1': + resolution: {integrity: sha512-1nVMEh46SElUt5CB3RUTV4EG/z7iYc7EoaDY5ECwganibQPkZ/Y2eMsTKB/LeyrUJ+W/tKoD9WUqIy8vB+CEdA==} + + '@peculiar/asn1-schema@2.6.0': + resolution: {integrity: sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==} + + '@peculiar/asn1-x509-attr@2.6.1': + resolution: {integrity: sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ==} + + '@peculiar/asn1-x509@2.6.1': + resolution: {integrity: sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA==} + + '@peculiar/x509@1.14.3': + resolution: {integrity: sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==} + engines: {node: '>=20.0.0'} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -3975,64 +4013,64 @@ packages: cpu: [x64] os: [win32] - '@rspack/binding-darwin-arm64@1.7.8': - resolution: {integrity: sha512-KS6SRc+4VYRdX1cKr1j1HEuMNyEzt7onBS0rkenaiCRRYF0z4WNZNyZqRiuxgM3qZ3TISF7gdmgJQyd4ZB43ig==} + '@rspack/binding-darwin-arm64@1.7.9': + resolution: {integrity: sha512-64dgstte0If5czi9bA/cpOe0ryY6wC9AIQRtyJ3DlOF6Tt+y9cKkmUoGu3V+WYaYIZRT7HNk8V7kL8amVjFTYw==} cpu: [arm64] os: [darwin] - '@rspack/binding-darwin-x64@1.7.8': - resolution: {integrity: sha512-uyXSDKLg2CtqIJrsJDlCqQH80YIPsCUiTToJ59cXAG3v4eke0Qbiv6d/+pV0h/mc0u4inAaSkr5dD18zkMIghw==} + '@rspack/binding-darwin-x64@1.7.9': + resolution: {integrity: sha512-2QSLs3w4rLy4UUGVnIlkt6IlIKOzR1e0RPsq2FYQW6s3p9JrwRCtOeHohyh7EJSqF54dtfhe9UZSAwba3LqH1Q==} cpu: [x64] os: [darwin] - '@rspack/binding-linux-arm64-gnu@1.7.8': - resolution: {integrity: sha512-dD6gSHA18Uj0eqc1FCwwQ5IO5mIckrpYN4H4kPk9Pjau+1mxWvC4y5Lryz1Z8P/Rh1lnQ/wwGE0XL9nd80+LqQ==} + '@rspack/binding-linux-arm64-gnu@1.7.9': + resolution: {integrity: sha512-qhUGI/uVfvLmKWts4QkVHGL8yfUyJkblZs+OFD5Upa2y676EOsbQgWsCwX4xGB6Tv+TOzFP0SLh/UfO8ZfdE+w==} cpu: [arm64] os: [linux] libc: [glibc] - '@rspack/binding-linux-arm64-musl@1.7.8': - resolution: {integrity: sha512-m+uBi9mEVGkZ02PPOAYN2BSmmvc00XGa6v9CjV8qLpolpUXQIMzDNG+i1fD5SHp8LO+XWsZJOHypMsT0MzGTGw==} + '@rspack/binding-linux-arm64-musl@1.7.9': + resolution: {integrity: sha512-VjfmR1hgO9n3L6MaE5KG+DXSrrLVqHHOkVcOtS2LMq3bjMTwbBywY7ycymcLnX5KJsol8d3ZGYep6IfSOt3lFA==} cpu: [arm64] os: [linux] libc: [musl] - '@rspack/binding-linux-x64-gnu@1.7.8': - resolution: {integrity: sha512-IAPp2L3yS33MAEkcGn/I1gO+a+WExJHXz2ZlRlL2oFCUGpYi2ZQHyAcJ3o2tJqkXmdqsTiN+OjEVMd/RcLa24g==} + '@rspack/binding-linux-x64-gnu@1.7.9': + resolution: {integrity: sha512-0kldV+3WTs/VYDWzxJ7K40hCW26IHtnk8xPK3whKoo1649rgeXXa0EdsU5P7hG8Ef5SWQjHHHZ/fuHYSO3Y6HA==} cpu: [x64] os: [linux] libc: [glibc] - '@rspack/binding-linux-x64-musl@1.7.8': - resolution: {integrity: sha512-do/QNzb4GWdXCsipblDcroqRDR3BFcbyzpZpAw/3j9ajvEqsOKpdHZpILT2NZX/VahhjqfqB3k0kJVt3uK7UYQ==} + '@rspack/binding-linux-x64-musl@1.7.9': + resolution: {integrity: sha512-Gi4872cFtc2d83FKATR6Qcf2VBa/tFCqffI/IwRRl6Hx5FulEBqx+tH7gAuRVF693vrbXNxK+FQ+k4iEsEJxrw==} cpu: [x64] os: [linux] libc: [musl] - '@rspack/binding-wasm32-wasi@1.7.8': - resolution: {integrity: sha512-mHtgYTpdhx01i0XNKFYBZyCjtv9YUe/sDfpD1QK4FytPFB+1VpYnmZiaJIMM77VpNsjxGAqWhmUYxi2P6jWifw==} + '@rspack/binding-wasm32-wasi@1.7.9': + resolution: {integrity: sha512-5QEzqo6EaolpuZmK6w/mgSueorgGnnzp7dJaAvBj6ECFIg/aLXhXXmWCWbxt7Ws2gKvG5/PgaxDqbUxYL51juA==} cpu: [wasm32] - '@rspack/binding-win32-arm64-msvc@1.7.8': - resolution: {integrity: sha512-Mkxg86F7kIT4pM9XvE/1LAGjK5NOQi/GJxKyyiKbUAeKM8XBUizVeNuvKR0avf2V5IDAIRXiH1SX8SpujMJteA==} + '@rspack/binding-win32-arm64-msvc@1.7.9': + resolution: {integrity: sha512-MMqvcrIc8aOqTuHjWkjdzilvoZ3Hv07Od0Foogiyq3JMudsS3Wcmh7T1dFerGg19MOJcRUeEkrg2NQOMOQ6xDA==} cpu: [arm64] os: [win32] - '@rspack/binding-win32-ia32-msvc@1.7.8': - resolution: {integrity: sha512-VmTOZ/X7M85lKFNwb2qJpCRzr4SgO42vucq/X7Uz1oSoTPAf8UUMNdi7BPnu+D4lgy6l8PwV804ZyHO3gGsvPA==} + '@rspack/binding-win32-ia32-msvc@1.7.9': + resolution: {integrity: sha512-4kYYS+NZ2CuNbKjq40yB/UEyB51o1PHj5wpr+Y943oOJXpEKWU2Q4vkF8VEohPEcnA9cKVotYCnqStme+02suA==} cpu: [ia32] os: [win32] - '@rspack/binding-win32-x64-msvc@1.7.8': - resolution: {integrity: sha512-BK0I4HAwp/yQLnmdJpUtGHcht3x11e9fZwyaiMzznznFc+Oypbf+FS5h+aBgpb53QnNkPpdG7MfAPoKItOcU8A==} + '@rspack/binding-win32-x64-msvc@1.7.9': + resolution: {integrity: sha512-1g+QyXXvs+838Un/4GaUvJfARDGHMCs15eXDYWBl5m/Skubyng8djWAgr6ag1+cVoJZXCPOvybTItcblWF3gbQ==} cpu: [x64] os: [win32] - '@rspack/binding@1.7.8': - resolution: {integrity: sha512-P4fbrQx5hRhAiC8TBTEMCTnNawrIzJLjWwAgrTwRxjgenpjNvimEkQBtSGrXOY+c+MV5Q74P+9wPvVWLKzRkQQ==} + '@rspack/binding@1.7.9': + resolution: {integrity: sha512-A56e0NdfNwbOSJoilMkxzaPuVYaKCNn1shuiwWnCIBmhV9ix1n9S1XvquDjkGyv+gCdR1+zfJBOa5DMB7htLHw==} - '@rspack/core@1.7.8': - resolution: {integrity: sha512-kT6yYo8xjKoDfM7iB8N9AmN9DJIlrs7UmQDbpTu1N4zaZocN1/t2fIAWOKjr5+3eJlZQR2twKZhDVHNLbLPjOw==} + '@rspack/core@1.7.9': + resolution: {integrity: sha512-VHuSKvRkuv42Ya+TxEGO0LE0r9+8P4tKGokmomj4R1f/Nu2vtS3yoaIMfC4fR6VuHGd3MZ+KTI0cNNwHfFcskw==} engines: {node: '>=18.12.0'} peerDependencies: '@swc/helpers': ^0.5.17 @@ -4118,8 +4156,8 @@ packages: '@sinonjs/fake-timers@15.1.1': resolution: {integrity: sha512-cO5W33JgAPbOh07tvZjUOJ7oWhtaqGHiZw+11DPbyqh2kHTBc3eF/CjJDeQ4205RLQsX6rxCuYOroFQwl7JDRw==} - '@sinonjs/samsam@9.0.2': - resolution: {integrity: sha512-H/JSxa4GNKZuuU41E3b8Y3tbSEx8y4uq4UH1C56ONQac16HblReJomIvv3Ud7ANQHQmkeSowY49Ij972e/pGxQ==} + '@sinonjs/samsam@9.0.3': + resolution: {integrity: sha512-ZgYY7Dc2RW+OUdnZ1DEHg00lhRt+9BjymPKHog4PRFzr1U3MbK57+djmscWyKxzO1qfunHqs4N45WWyKIFKpiQ==} '@slorber/react-helmet-async@1.3.0': resolution: {integrity: sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==} @@ -4583,9 +4621,6 @@ packages: '@types/nearley@2.11.5': resolution: {integrity: sha512-dM7TrN0bVxGGXTYGx4YhGear8ysLO5SOuouAWM9oltjQ3m9oYa13qi8Z1DJp5zxVMPukvQdsrnZmgzpeuTSEQA==} - '@types/node-forge@1.3.14': - resolution: {integrity: sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==} - '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} @@ -4691,63 +4726,63 @@ packages: '@types/yargs@17.0.35': resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} - '@typescript-eslint/eslint-plugin@8.57.0': - resolution: {integrity: sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==} + '@typescript-eslint/eslint-plugin@8.57.1': + resolution: {integrity: sha512-Gn3aqnvNl4NGc6x3/Bqk1AOn0thyTU9bqDRhiRnUWezgvr2OnhYCWCgC8zXXRVqBsIL1pSDt7T9nJUe0oM0kDQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.57.0 + '@typescript-eslint/parser': ^8.57.1 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.57.0': - resolution: {integrity: sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==} + '@typescript-eslint/parser@8.57.1': + resolution: {integrity: sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.57.0': - resolution: {integrity: sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==} + '@typescript-eslint/project-service@8.57.1': + resolution: {integrity: sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.57.0': - resolution: {integrity: sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==} + '@typescript-eslint/scope-manager@8.57.1': + resolution: {integrity: sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.57.0': - resolution: {integrity: sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==} + '@typescript-eslint/tsconfig-utils@8.57.1': + resolution: {integrity: sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.57.0': - resolution: {integrity: sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==} + '@typescript-eslint/type-utils@8.57.1': + resolution: {integrity: sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.57.0': - resolution: {integrity: sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==} + '@typescript-eslint/types@8.57.1': + resolution: {integrity: sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.57.0': - resolution: {integrity: sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==} + '@typescript-eslint/typescript-estree@8.57.1': + resolution: {integrity: sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.57.0': - resolution: {integrity: sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==} + '@typescript-eslint/utils@8.57.1': + resolution: {integrity: sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.57.0': - resolution: {integrity: sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==} + '@typescript-eslint/visitor-keys@8.57.1': + resolution: {integrity: sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -5141,6 +5176,10 @@ packages: as-table@1.0.55: resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} + asn1js@3.0.7: + resolution: {integrity: sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==} + engines: {node: '>=12.0.0'} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -5195,8 +5234,8 @@ packages: resolution: {integrity: sha512-+TRkByhsws6sfPjVaitzadk1I0F5sPvOVUH5tyTSzhePpsGIVrdeunHSw/C36QeocS95OOk8lunc4rlu5Anwsg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - babel-plugin-polyfill-corejs2@0.4.16: - resolution: {integrity: sha512-xaVwwSfebXf0ooE11BJovZYKhFjIvQo7TsyVpETuIeH2JHv0k/T6Y5j22pPTvqYqmpkxdlPAJlyJ0tfOJAoMxw==} + babel-plugin-polyfill-corejs2@0.4.17: + resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -5205,13 +5244,13 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-corejs3@0.14.1: - resolution: {integrity: sha512-ENp89vM9Pw4kv/koBb5N2f9bDZsR0hpf3BdPMOg/pkS3pwO4dzNnQZVXtBbeyAadgm865DmQG2jMMLqmZXvuCw==} + babel-plugin-polyfill-corejs3@0.14.2: + resolution: {integrity: sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.7: - resolution: {integrity: sha512-OTYbUlSwXhNgr4g6efMZgsO8//jA61P7ZbRX3iTT53VON8l+WQS8IAUEVo4a4cWknrg2W8Cj4gQhRYNCJ8GkAA==} + babel-plugin-polyfill-regenerator@0.6.8: + resolution: {integrity: sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -5355,6 +5394,10 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} + bytestreamjs@2.0.1: + resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} + engines: {node: '>=6.0.0'} + cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -5424,8 +5467,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001779: - resolution: {integrity: sha512-U5og2PN7V4DMgF50YPNtnZJGWVLFjjsN3zb6uMT5VGYIewieDj1upwfuVNXf4Kor+89c3iCRJnSzMD5LmTvsfA==} + caniuse-lite@1.0.30001780: + resolution: {integrity: sha512-llngX0E7nQci5BPJDqoZSbuZ5Bcs9F5db7EtgfwBerX9XGtkkiO4NwfDDIRzHTTwcYC8vC7bmeUEPGrKlR/TkQ==} castable-video@1.1.11: resolution: {integrity: sha512-LCRTK6oe7SB1SiUQFzZCo6D6gcEzijqBTVIuj3smKpQdesXM18QTbCVqWgh9MfOeQgTx/i9ji5jGcdqNPeWg2g==} @@ -5725,14 +5768,14 @@ packages: peerDependencies: webpack: ^5.1.0 - core-js-compat@3.48.0: - resolution: {integrity: sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==} + core-js-compat@3.49.0: + resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} - core-js-pure@3.48.0: - resolution: {integrity: sha512-1slJgk89tWC51HQ1AEqG+s2VuwpTRr8ocu4n20QUcH1v9lAN0RXen0Q0AABa/DK1I7RrNWLucplOHMx8hfTGTw==} + core-js-pure@3.49.0: + resolution: {integrity: sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw==} - core-js@3.48.0: - resolution: {integrity: sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==} + core-js@3.49.0: + resolution: {integrity: sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -6229,8 +6272,8 @@ packages: encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - enhanced-resolve@5.20.0: - resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==} + enhanced-resolve@5.20.1: + resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} engines: {node: '>=10.13.0'} entities@2.2.0: @@ -6574,11 +6617,11 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fast-xml-builder@1.1.3: - resolution: {integrity: sha512-1o60KoFw2+LWKQu3IdcfcFlGTW4dpqEWmjhYec6H82AYZU2TVBXep6tMl8Z1Y+wM+ZrzCwe3BZ9Vyd9N2rIvmg==} + fast-xml-builder@1.1.4: + resolution: {integrity: sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg==} - fast-xml-parser@5.5.5: - resolution: {integrity: sha512-NLY+V5NNbdmiEszx9n14mZBseJTC50bRq1VHsaxOmR72JDuZt+5J1Co+dC/4JPnyq+WrIHNM69r0sqf7BMb3Mg==} + fast-xml-parser@5.5.6: + resolution: {integrity: sha512-3+fdZyBRVg29n4rXP0joHthhcHdPUHaIC16cuyyd1iLsuaO6Vea36MPrxgAzbZna8lhvZeRL8Bc9GP56/J9xEw==} hasBin: true fastest-levenshtein@1.0.16: @@ -6688,8 +6731,8 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@3.4.1: - resolution: {integrity: sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} @@ -8547,10 +8590,6 @@ packages: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} - node-forge@1.3.3: - resolution: {integrity: sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==} - engines: {node: '>= 6.13.0'} - node-gyp@11.5.0: resolution: {integrity: sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==} engines: {node: ^18.17.0 || >=20.5.0} @@ -8946,6 +8985,10 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + pkijs@3.3.3: + resolution: {integrity: sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw==} + engines: {node: '>=16.0.0'} + player.style@0.3.1: resolution: {integrity: sha512-z/T8hJGaTkHT9vdXgWdOgF37eB1FV7/j52VXQZ2lgEhpru9oT8TaUWIxp6GoxTnhPBM4X6nSbpkAHrT7UTjUKg==} @@ -9485,13 +9528,20 @@ packages: pure-rand@7.0.1: resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==} - pure-rand@8.0.0: - resolution: {integrity: sha512-7rgWlxG2gAvFPIQfUreo1XYlNvrQ9VnQPFWdncPkdl3icucLK0InOxsaafbvxGTnI6Bk/Rxmslg0lQlRCuzOXw==} + pure-rand@8.2.0: + resolution: {integrity: sha512-KHnUjm68KSO/hqpWlVwagMDPrIjnDNY9r0DbKN79xEa5RU2MLUe0lICBGpWDF8cwmhUiN8r9A8DLGPVcFB62/A==} purgecss@4.1.3: resolution: {integrity: sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==} hasBin: true + pvtsutils@1.3.6: + resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} + + pvutils@1.1.5: + resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} + engines: {node: '>=16.0.0'} + qified@0.6.0: resolution: {integrity: sha512-tsSGN1x3h569ZSU1u6diwhltLyfUWDp3YbFHedapTmpBl0B3P6U3+Qptg7xu+v+1io1EwhdPyyRHYbEw0KN2FA==} engines: {node: '>=20'} @@ -9673,6 +9723,9 @@ packages: resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} engines: {node: '>=12'} + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + reflect.getprototypeof@1.0.10: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} @@ -9949,8 +10002,8 @@ packages: sax@1.2.1: resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} - sax@1.5.0: - resolution: {integrity: sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==} + sax@1.6.0: + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} engines: {node: '>=11.0.0'} saxes@6.0.0: @@ -9988,9 +10041,9 @@ packages: select-hose@2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} + selfsigned@5.5.0: + resolution: {integrity: sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==} + engines: {node: '>=18'} semver-diff@4.0.0: resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} @@ -10097,8 +10150,8 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - sinon@21.0.2: - resolution: {integrity: sha512-VHV4UaoxIe5jrMd89Y9duI76T5g3Lp+ET+ctLhLDaZtSznDPah1KKpRElbdBV4RwqWSw2vadFiVs9Del7MbVeQ==} + sinon@21.0.3: + resolution: {integrity: sha512-0x8TQFr8EjADhSME01u1ZK31yv2+bd6Z5NrBCHVM+n4qL1wFqbxftmeyi3bwlr49FbbzRfrqSFOpyHCOh/YmYA==} sirv@2.0.4: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} @@ -10574,8 +10627,8 @@ packages: uglify-js: optional: true - terser@5.46.0: - resolution: {integrity: sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==} + terser@5.46.1: + resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} engines: {node: '>=10'} hasBin: true @@ -10752,6 +10805,9 @@ packages: tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -10779,6 +10835,10 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + tsyringe@4.10.0: + resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==} + engines: {node: '>= 6.0.0'} + twitch-video-element@0.1.6: resolution: {integrity: sha512-X7l8gy+DEFKJ/EztUwaVnAYwQN9fUJxPkOVJj2sE62sGvGU4DNLyvmOsmVulM+8Plc5dMg6hYIMNRAPaH+39Uw==} @@ -10856,8 +10916,8 @@ packages: typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - typescript-eslint@8.57.0: - resolution: {integrity: sha512-W8GcigEMEeB07xEZol8oJ26rigm3+bfPHxHvwbYUlu1fUDsGuQ7Hiskx5xGW/xM4USc9Ephe3jtv7ZYPQntHeA==} + typescript-eslint@8.57.1: + resolution: {integrity: sha512-fLvZWf+cAGw3tqMCYzGIU6yR8K+Y9NT2z23RwOjlNFF2HwSB3KhdEFI5lSBv8tNmFkkBShSjsCjzx1vahZfISA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -11211,8 +11271,8 @@ packages: webpack: optional: true - webpack-dev-server@5.2.2: - resolution: {integrity: sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==} + webpack-dev-server@5.2.3: + resolution: {integrity: sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ==} engines: {node: '>= 18.12.0'} hasBin: true peerDependencies: @@ -11611,8 +11671,8 @@ snapshots: '@babel/generator': 7.29.1 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.28.6 - '@babel/parser': 7.29.0 + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 @@ -11627,7 +11687,7 @@ snapshots: '@babel/generator@7.29.1': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 @@ -11665,7 +11725,7 @@ snapshots: regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.7(@babel/core@7.29.0)': + '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 @@ -11746,12 +11806,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helpers@7.28.6': + '@babel/helpers@7.29.2': dependencies: '@babel/template': 7.28.6 '@babel/types': 7.29.0 - '@babel/parser@7.29.0': + '@babel/parser@7.29.2': dependencies: '@babel/types': 7.29.0 @@ -12216,9 +12276,9 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - babel-plugin-polyfill-corejs2: 0.4.16(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0) babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.0) - babel-plugin-polyfill-regenerator: 0.6.7(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -12285,7 +12345,7 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/preset-env@7.29.0(@babel/core@7.29.0)': + '@babel/preset-env@7.29.2(@babel/core@7.29.0)': dependencies: '@babel/compat-data': 7.29.0 '@babel/core': 7.29.0 @@ -12353,10 +12413,10 @@ snapshots: '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.0) '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0) - babel-plugin-polyfill-corejs2: 0.4.16(@babel/core@7.29.0) - babel-plugin-polyfill-corejs3: 0.14.1(@babel/core@7.29.0) - babel-plugin-polyfill-regenerator: 0.6.7(@babel/core@7.29.0) - core-js-compat: 3.48.0 + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -12391,16 +12451,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/runtime-corejs3@7.29.0': + '@babel/runtime-corejs3@7.29.2': dependencies: - core-js-pure: 3.48.0 + core-js-pure: 3.49.0 - '@babel/runtime@7.28.6': {} + '@babel/runtime@7.29.2': {} '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@babel/traverse@7.29.0': @@ -12408,7 +12468,7 @@ snapshots: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/types': 7.29.0 debug: 4.4.3(supports-color@8.1.1) @@ -12781,7 +12841,7 @@ snapshots: dependencies: postcss: 8.5.8 - '@cursorless/talon-tools@0.7.0': + '@cursorless/talon-tools@0.8.0': dependencies: '@cursorless/tree-sitter-wasms': 0.7.0 editorconfig: 3.0.2 @@ -12827,11 +12887,11 @@ snapshots: '@babel/generator': 7.29.1 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.0) '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) - '@babel/preset-env': 7.29.0(@babel/core@7.29.0) + '@babel/preset-env': 7.29.2(@babel/core@7.29.0) '@babel/preset-react': 7.28.5(@babel/core@7.29.0) '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) - '@babel/runtime': 7.28.6 - '@babel/runtime-corejs3': 7.29.0 + '@babel/runtime': 7.29.2 + '@babel/runtime-corejs3': 7.29.2 '@babel/traverse': 7.29.0 '@docusaurus/logger': 3.9.2 '@docusaurus/utils': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -12847,7 +12907,7 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/bundler@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/bundler@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: '@babel/core': 7.29.0 '@docusaurus/babel': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -12858,7 +12918,7 @@ snapshots: babel-loader: 9.2.1(@babel/core@7.29.0)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)) clean-css: 5.3.3 copy-webpack-plugin: 11.0.0(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)) - css-loader: 6.11.0(@rspack/core@1.7.8)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)) + css-loader: 6.11.0(@rspack/core@1.7.9)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)) css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(esbuild@0.27.4)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)) cssnano: 6.1.2(postcss@8.5.8) file-loader: 6.2.0(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)) @@ -12890,10 +12950,10 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/core@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/core@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: '@docusaurus/babel': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@docusaurus/bundler': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/bundler': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/logger': 3.9.2 '@docusaurus/mdx-loader': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -12906,7 +12966,7 @@ snapshots: cli-table3: 0.6.5 combine-promises: 1.2.0 commander: 5.1.0 - core-js: 3.48.0 + core-js: 3.49.0 detect-port: 1.6.1 escape-html: 1.0.3 eta: 2.2.0 @@ -12914,7 +12974,7 @@ snapshots: execa: 5.1.1 fs-extra: 11.3.4 html-tags: 3.3.1 - html-webpack-plugin: 5.6.6(@rspack/core@1.7.8)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)) + html-webpack-plugin: 5.6.6(@rspack/core@1.7.9)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)) leven: 3.1.0 lodash: 4.17.23 open: 8.4.2 @@ -12935,7 +12995,7 @@ snapshots: update-notifier: 6.0.2 webpack: 5.105.4(@swc/core@1.15.18)(esbuild@0.27.4) webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 5.2.2(tslib@2.8.1)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)) + webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)) webpack-merge: 6.0.1 transitivePeerDependencies: - '@docusaurus/faster' @@ -12964,7 +13024,7 @@ snapshots: '@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4)': dependencies: '@docusaurus/types': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@rspack/core': 1.7.8 + '@rspack/core': 1.7.9 '@swc/core': 1.15.18 '@swc/html': 1.15.18 browserslist: 4.28.1 @@ -13036,13 +13096,13 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-content-blog@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/logger': 3.9.2 '@docusaurus/mdx-loader': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@docusaurus/plugin-content-docs': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/plugin-content-docs': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/types': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-common': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -13077,13 +13137,13 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/logger': 3.9.2 '@docusaurus/mdx-loader': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/module-type-aliases': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/types': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-common': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -13117,9 +13177,9 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-pages@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-content-pages@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/mdx-loader': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/types': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -13147,9 +13207,9 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-css-cascade-layers@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-css-cascade-layers@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/types': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -13174,9 +13234,9 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-debug@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-debug@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/types': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) fs-extra: 11.3.4 @@ -13202,9 +13262,9 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-analytics@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-google-analytics@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/types': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 @@ -13228,9 +13288,9 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-gtag@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-google-gtag@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/types': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@types/gtag.js': 0.0.12 @@ -13255,9 +13315,9 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-google-tag-manager@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/types': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 @@ -13281,9 +13341,9 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-sitemap@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-sitemap@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/logger': 3.9.2 '@docusaurus/types': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -13312,9 +13372,9 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-svgr@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/plugin-svgr@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/types': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -13342,22 +13402,22 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/preset-classic@3.9.2(@algolia/client-search@5.49.2)(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(@types/react@19.2.14)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3)': - dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-content-docs': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-content-pages': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-css-cascade-layers': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-debug': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-google-analytics': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-google-gtag': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-google-tag-manager': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-sitemap': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-svgr': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/theme-classic': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(@types/react@19.2.14)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@docusaurus/theme-search-algolia': 3.9.2(@algolia/client-search@5.49.2)(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(@types/react@19.2.14)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3) + '@docusaurus/preset-classic@3.9.2(@algolia/client-search@5.49.2)(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(@types/react@19.2.14)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3)': + dependencies: + '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-content-docs': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-content-pages': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-css-cascade-layers': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-debug': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-google-analytics': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-google-gtag': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-google-tag-manager': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-sitemap': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-svgr': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/theme-classic': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(@types/react@19.2.14)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/theme-search-algolia': 3.9.2(@algolia/client-search@5.49.2)(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(@types/react@19.2.14)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3) '@docusaurus/types': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) @@ -13387,16 +13447,16 @@ snapshots: '@types/react': 19.2.14 react: 19.2.4 - '@docusaurus/theme-classic@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(@types/react@19.2.14)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@docusaurus/theme-classic@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(@types/react@19.2.14)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/logger': 3.9.2 '@docusaurus/mdx-loader': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/module-type-aliases': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-content-docs': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/plugin-content-pages': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/plugin-content-blog': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-content-docs': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-content-pages': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/theme-translations': 3.9.2 '@docusaurus/types': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -13434,11 +13494,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/theme-common@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@docusaurus/theme-common@3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@docusaurus/mdx-loader': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/module-type-aliases': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@docusaurus/plugin-content-docs': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/plugin-content-docs': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/utils': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-common': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@types/history': 4.7.11 @@ -13458,13 +13518,13 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/theme-search-algolia@3.9.2(@algolia/client-search@5.49.2)(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(@types/react@19.2.14)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3)': + '@docusaurus/theme-search-algolia@3.9.2(@algolia/client-search@5.49.2)(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(@types/react@19.2.14)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3)': dependencies: '@docsearch/react': 4.6.0(@algolia/client-search@5.49.2)(@types/react@19.2.14)(algoliasearch@5.49.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3) - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) '@docusaurus/logger': 3.9.2 - '@docusaurus/plugin-content-docs': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) - '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@docusaurus/plugin-content-docs': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/theme-common': 3.9.2(@docusaurus/plugin-content-docs@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/theme-translations': 3.9.2 '@docusaurus/utils': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@docusaurus/utils-validation': 3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -14339,6 +14399,8 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true + '@noble/hashes@1.4.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -14432,6 +14494,96 @@ snapshots: '@parcel/watcher-win32-x64': 2.5.6 optional: true + '@peculiar/asn1-cms@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + '@peculiar/asn1-x509-attr': 2.6.1 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-csr@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-ecc@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-pfx@2.6.1': + dependencies: + '@peculiar/asn1-cms': 2.6.1 + '@peculiar/asn1-pkcs8': 2.6.1 + '@peculiar/asn1-rsa': 2.6.1 + '@peculiar/asn1-schema': 2.6.0 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-pkcs8@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-pkcs9@2.6.1': + dependencies: + '@peculiar/asn1-cms': 2.6.1 + '@peculiar/asn1-pfx': 2.6.1 + '@peculiar/asn1-pkcs8': 2.6.1 + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + '@peculiar/asn1-x509-attr': 2.6.1 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-rsa@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-schema@2.6.0': + dependencies: + asn1js: 3.0.7 + pvtsutils: 1.3.6 + tslib: 2.8.1 + + '@peculiar/asn1-x509-attr@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + asn1js: 3.0.7 + tslib: 2.8.1 + + '@peculiar/asn1-x509@2.6.1': + dependencies: + '@peculiar/asn1-schema': 2.6.0 + asn1js: 3.0.7 + pvtsutils: 1.3.6 + tslib: 2.8.1 + + '@peculiar/x509@1.14.3': + dependencies: + '@peculiar/asn1-cms': 2.6.1 + '@peculiar/asn1-csr': 2.6.1 + '@peculiar/asn1-ecc': 2.6.1 + '@peculiar/asn1-pkcs9': 2.6.1 + '@peculiar/asn1-rsa': 2.6.1 + '@peculiar/asn1-schema': 2.6.0 + '@peculiar/asn1-x509': 2.6.1 + pvtsutils: 1.3.6 + reflect-metadata: 0.2.2 + tslib: 2.8.1 + tsyringe: 4.10.0 + '@pkgjs/parseargs@0.11.0': optional: true @@ -15709,55 +15861,55 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true - '@rspack/binding-darwin-arm64@1.7.8': + '@rspack/binding-darwin-arm64@1.7.9': optional: true - '@rspack/binding-darwin-x64@1.7.8': + '@rspack/binding-darwin-x64@1.7.9': optional: true - '@rspack/binding-linux-arm64-gnu@1.7.8': + '@rspack/binding-linux-arm64-gnu@1.7.9': optional: true - '@rspack/binding-linux-arm64-musl@1.7.8': + '@rspack/binding-linux-arm64-musl@1.7.9': optional: true - '@rspack/binding-linux-x64-gnu@1.7.8': + '@rspack/binding-linux-x64-gnu@1.7.9': optional: true - '@rspack/binding-linux-x64-musl@1.7.8': + '@rspack/binding-linux-x64-musl@1.7.9': optional: true - '@rspack/binding-wasm32-wasi@1.7.8': + '@rspack/binding-wasm32-wasi@1.7.9': dependencies: '@napi-rs/wasm-runtime': 1.0.7 optional: true - '@rspack/binding-win32-arm64-msvc@1.7.8': + '@rspack/binding-win32-arm64-msvc@1.7.9': optional: true - '@rspack/binding-win32-ia32-msvc@1.7.8': + '@rspack/binding-win32-ia32-msvc@1.7.9': optional: true - '@rspack/binding-win32-x64-msvc@1.7.8': + '@rspack/binding-win32-x64-msvc@1.7.9': optional: true - '@rspack/binding@1.7.8': + '@rspack/binding@1.7.9': optionalDependencies: - '@rspack/binding-darwin-arm64': 1.7.8 - '@rspack/binding-darwin-x64': 1.7.8 - '@rspack/binding-linux-arm64-gnu': 1.7.8 - '@rspack/binding-linux-arm64-musl': 1.7.8 - '@rspack/binding-linux-x64-gnu': 1.7.8 - '@rspack/binding-linux-x64-musl': 1.7.8 - '@rspack/binding-wasm32-wasi': 1.7.8 - '@rspack/binding-win32-arm64-msvc': 1.7.8 - '@rspack/binding-win32-ia32-msvc': 1.7.8 - '@rspack/binding-win32-x64-msvc': 1.7.8 - - '@rspack/core@1.7.8': + '@rspack/binding-darwin-arm64': 1.7.9 + '@rspack/binding-darwin-x64': 1.7.9 + '@rspack/binding-linux-arm64-gnu': 1.7.9 + '@rspack/binding-linux-arm64-musl': 1.7.9 + '@rspack/binding-linux-x64-gnu': 1.7.9 + '@rspack/binding-linux-x64-musl': 1.7.9 + '@rspack/binding-wasm32-wasi': 1.7.9 + '@rspack/binding-win32-arm64-msvc': 1.7.9 + '@rspack/binding-win32-ia32-msvc': 1.7.9 + '@rspack/binding-win32-x64-msvc': 1.7.9 + + '@rspack/core@1.7.9': dependencies: '@module-federation/runtime-tools': 0.22.0 - '@rspack/binding': 1.7.8 + '@rspack/binding': 1.7.9 '@rspack/lite-tapable': 1.1.0 '@rspack/lite-tapable@1.1.0': {} @@ -15834,14 +15986,14 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@sinonjs/samsam@9.0.2': + '@sinonjs/samsam@9.0.3': dependencies: '@sinonjs/commons': 3.0.1 type-detect: 4.1.0 '@slorber/react-helmet-async@1.3.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 invariant: 2.2.4 prop-types: 15.8.1 react: 19.2.4 @@ -15943,7 +16095,7 @@ snapshots: dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.29.0) - '@babel/preset-env': 7.29.0(@babel/core@7.29.0) + '@babel/preset-env': 7.29.2(@babel/core@7.29.0) '@babel/preset-react': 7.28.5(@babel/core@7.29.0) '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) '@svgr/core': 8.1.0(typescript@5.9.3) @@ -16117,7 +16269,7 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 @@ -16129,7 +16281,7 @@ snapshots: '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@types/babel__traverse@7.28.0': @@ -16281,10 +16433,6 @@ snapshots: '@types/nearley@2.11.5(patch_hash=72ccc6b9fd704c6d457027e12d6e1d005695ab3508558a08c6aaf73fb608ef69)': {} - '@types/node-forge@1.3.14': - dependencies: - '@types/node': 24.12.0 - '@types/node@17.0.45': {} '@types/node@24.12.0': @@ -16396,14 +16544,14 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.57.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.57.0 - '@typescript-eslint/type-utils': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.57.0 + '@typescript-eslint/parser': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/type-utils': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.1 eslint: 10.0.3(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 @@ -16412,41 +16560,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.57.0 - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.57.0 + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3(supports-color@8.1.1) eslint: 10.0.3(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.57.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.57.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.9.3) - '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) + '@typescript-eslint/types': 8.57.1 debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.57.0': + '@typescript-eslint/scope-manager@8.57.1': dependencies: - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/visitor-keys': 8.57.0 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/visitor-keys': 8.57.1 - '@typescript-eslint/tsconfig-utils@8.57.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.57.1(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) eslint: 10.0.3(jiti@2.6.1) ts-api-utils: 2.4.0(typescript@5.9.3) @@ -16454,14 +16602,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.57.0': {} + '@typescript-eslint/types@8.57.1': {} - '@typescript-eslint/typescript-estree@8.57.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.57.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.57.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.9.3) - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/visitor-keys': 8.57.0 + '@typescript-eslint/project-service': 8.57.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3(supports-color@8.1.1) minimatch: 10.2.4 semver: 7.7.4 @@ -16471,20 +16619,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.3(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.57.0 - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) eslint: 10.0.3(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.57.0': + '@typescript-eslint/visitor-keys@8.57.1': dependencies: - '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/types': 8.57.1 eslint-visitor-keys: 5.0.1 '@ungap/structured-clone@1.3.0': {} @@ -16898,6 +17046,12 @@ snapshots: dependencies: printable-characters: 1.0.42 + asn1js@3.0.7: + dependencies: + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + assertion-error@2.0.1: {} astral-regex@2.0.0: {} @@ -16911,7 +17065,7 @@ snapshots: autoprefixer@10.4.27(postcss@8.5.8): dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001779 + caniuse-lite: 1.0.30001780 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.8 @@ -16959,11 +17113,11 @@ snapshots: dependencies: '@types/babel__core': 7.20.5 - babel-plugin-polyfill-corejs2@0.4.16(@babel/core@7.29.0): + babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.0): dependencies: '@babel/compat-data': 7.29.0 '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -16971,23 +17125,23 @@ snapshots: babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) - core-js-compat: 3.48.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.14.1(@babel/core@7.29.0): + babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) - core-js-compat: 3.48.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.7(@babel/core@7.29.0): + babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -17135,7 +17289,7 @@ snapshots: browserslist@4.28.1: dependencies: baseline-browser-mapping: 2.10.8 - caniuse-lite: 1.0.30001779 + caniuse-lite: 1.0.30001780 electron-to-chromium: 1.5.313 node-releases: 2.0.36 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -17169,6 +17323,8 @@ snapshots: bytes@3.1.2: {} + bytestreamjs@2.0.1: {} + cac@6.7.14: {} cacache@19.0.1: @@ -17258,11 +17414,11 @@ snapshots: caniuse-api@3.0.0: dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001779 + caniuse-lite: 1.0.30001780 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001779: {} + caniuse-lite@1.0.30001780: {} castable-video@1.1.11: dependencies: @@ -17529,13 +17685,13 @@ snapshots: serialize-javascript: 6.0.2 webpack: 5.105.4(@swc/core@1.15.18)(esbuild@0.27.4) - core-js-compat@3.48.0: + core-js-compat@3.49.0: dependencies: browserslist: 4.28.1 - core-js-pure@3.48.0: {} + core-js-pure@3.49.0: {} - core-js@3.48.0: {} + core-js@3.49.0: {} core-util-is@1.0.3: {} @@ -17598,7 +17754,7 @@ snapshots: dependencies: hyphenate-style-name: 1.1.0 - css-loader@6.11.0(@rspack/core@1.7.8)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)): + css-loader@6.11.0(@rspack/core@1.7.9)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)): dependencies: icss-utils: 5.1.0(postcss@8.5.8) postcss: 8.5.8 @@ -17609,7 +17765,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.7.4 optionalDependencies: - '@rspack/core': 1.7.8 + '@rspack/core': 1.7.9 webpack: 5.105.4(@swc/core@1.15.18)(esbuild@0.27.4) css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(esbuild@0.27.4)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)): @@ -17940,11 +18096,11 @@ snapshots: dependencies: esutils: 2.0.3 - docusaurus-plugin-sass@0.2.6(@docusaurus/core@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@rspack/core@1.7.8)(sass@1.98.0)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)): + docusaurus-plugin-sass@0.2.6(@docusaurus/core@3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@rspack/core@1.7.9)(sass@1.98.0)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)): dependencies: - '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.8)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@docusaurus/core': 3.9.2(@docusaurus/faster@3.9.2(@docusaurus/types@3.9.2(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(esbuild@0.27.4))(@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4))(@rspack/core@1.7.9)(@swc/core@1.15.18)(esbuild@0.27.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) sass: 1.98.0 - sass-loader: 16.0.7(@rspack/core@1.7.8)(sass@1.98.0)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)) + sass-loader: 16.0.7(@rspack/core@1.7.9)(sass@1.98.0)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)) transitivePeerDependencies: - '@rspack/core' - node-sass @@ -18046,7 +18202,7 @@ snapshots: iconv-lite: 0.6.3 optional: true - enhanced-resolve@5.20.0: + enhanced-resolve@5.20.1: dependencies: graceful-fs: 4.2.11 tapable: 2.3.0 @@ -18269,22 +18425,22 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@10.0.3(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@10.0.3(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@10.0.3(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@10.0.3(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) eslint: 10.0.3(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import@2.32.0)(eslint@10.0.3(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@10.0.3(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@10.0.3(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -18295,7 +18451,7 @@ snapshots: doctrine: 2.1.0 eslint: 10.0.3(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@10.0.3(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@10.0.3(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -18307,7 +18463,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -18326,7 +18482,7 @@ snapshots: change-case: 5.4.4 ci-info: 4.4.0 clean-regexp: 1.0.0 - core-js-compat: 3.48.0 + core-js-compat: 3.49.0 eslint: 10.0.3(jiti@2.6.1) find-up-simple: 1.0.1 globals: 16.5.0 @@ -18339,11 +18495,11 @@ snapshots: semver: 7.7.4 strip-indent: 4.1.1 - eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.57.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1)): + eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1)): dependencies: eslint: 10.0.3(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.57.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) eslint-scope@5.1.1: dependencies: @@ -18549,7 +18705,7 @@ snapshots: fast-check@4.6.0: dependencies: - pure-rand: 8.0.0 + pure-rand: 8.2.0 fast-deep-equal@3.1.3: {} @@ -18571,13 +18727,13 @@ snapshots: fast-uri@3.1.0: {} - fast-xml-builder@1.1.3: + fast-xml-builder@1.1.4: dependencies: path-expression-matcher: 1.1.3 - fast-xml-parser@5.5.5: + fast-xml-parser@5.5.6: dependencies: - fast-xml-builder: 1.1.3 + fast-xml-builder: 1.1.4 path-expression-matcher: 1.1.3 strnum: 2.2.0 @@ -18682,18 +18838,18 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.4.1 + flatted: 3.4.2 keyv: 4.5.4 flat-cache@6.1.20: dependencies: cacheable: 2.3.3 - flatted: 3.4.1 + flatted: 3.4.2 hookified: 1.15.1 flat@5.0.2: {} - flatted@3.4.1: {} + flatted@3.4.2: {} fn.name@1.1.0: {} @@ -19099,7 +19255,7 @@ snapshots: history@4.10.1: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 loose-envify: 1.4.0 resolve-pathname: 3.0.0 tiny-invariant: 1.3.3 @@ -19159,7 +19315,7 @@ snapshots: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.46.0 + terser: 5.46.1 html-minifier-terser@7.2.0: dependencies: @@ -19169,7 +19325,7 @@ snapshots: entities: 4.5.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.46.0 + terser: 5.46.1 html-tags@3.3.1: {} @@ -19177,7 +19333,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.6(@rspack/core@1.7.8)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)): + html-webpack-plugin@5.6.6(@rspack/core@1.7.9)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -19185,7 +19341,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.3.0 optionalDependencies: - '@rspack/core': 1.7.8 + '@rspack/core': 1.7.9 webpack: 5.105.4(@swc/core@1.15.18)(esbuild@0.27.4) htmlparser2@6.1.0: @@ -19622,7 +19778,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.29.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.4 @@ -21117,8 +21273,6 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 - node-forge@1.3.3: {} - node-gyp@11.5.0: dependencies: env-paths: 2.2.1 @@ -21524,6 +21678,15 @@ snapshots: mlly: 1.8.1 pathe: 2.0.3 + pkijs@3.3.3: + dependencies: + '@noble/hashes': 1.4.0 + asn1js: 3.0.7 + bytestreamjs: 2.0.1 + pvtsutils: 1.3.6 + pvutils: 1.1.5 + tslib: 2.8.1 + player.style@0.3.1(react@19.2.4): dependencies: media-chrome: 4.16.1(react@19.2.4) @@ -22092,7 +22255,7 @@ snapshots: pure-rand@7.0.1: {} - pure-rand@8.0.0: {} + pure-rand@8.2.0: {} purgecss@4.1.3: dependencies: @@ -22101,6 +22264,12 @@ snapshots: postcss: 8.5.8 postcss-selector-parser: 6.1.2 + pvtsutils@1.3.6: + dependencies: + tslib: 2.8.1 + + pvutils@1.1.5: {} + qified@0.6.0: dependencies: hookified: 1.15.1 @@ -22172,7 +22341,7 @@ snapshots: react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@19.2.4))(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)): dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.4)' webpack: 5.105.4(@swc/core@1.15.18)(esbuild@0.27.4) @@ -22199,13 +22368,13 @@ snapshots: react-router-config@5.1.1(react-router@5.3.4(react@19.2.4))(react@19.2.4): dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 react: 19.2.4 react-router: 5.3.4(react@19.2.4) react-router-dom@5.3.4(react@19.2.4): dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 history: 4.10.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -22216,7 +22385,7 @@ snapshots: react-router@5.3.4(react@19.2.4): dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 history: 4.10.1 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -22336,6 +22505,8 @@ snapshots: indent-string: 5.0.0 strip-indent: 4.1.1 + reflect-metadata@0.2.2: {} + reflect.getprototypeof@1.0.10: dependencies: call-bind: 1.0.8 @@ -22612,7 +22783,7 @@ snapshots: rtl-css-js@1.16.1: dependencies: - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 rtlcss@4.3.0: dependencies: @@ -22678,11 +22849,11 @@ snapshots: dependencies: truncate-utf8-bytes: 1.0.2 - sass-loader@16.0.7(@rspack/core@1.7.8)(sass@1.98.0)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)): + sass-loader@16.0.7(@rspack/core@1.7.9)(sass@1.98.0)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)): dependencies: neo-async: 2.6.2 optionalDependencies: - '@rspack/core': 1.7.8 + '@rspack/core': 1.7.9 sass: 1.98.0 webpack: 5.105.4(@swc/core@1.15.18)(esbuild@0.27.4) @@ -22696,7 +22867,7 @@ snapshots: sax@1.2.1: {} - sax@1.5.0: {} + sax@1.6.0: {} saxes@6.0.0: dependencies: @@ -22732,10 +22903,10 @@ snapshots: select-hose@2.0.0: {} - selfsigned@2.4.1: + selfsigned@5.5.0: dependencies: - '@types/node-forge': 1.3.14 - node-forge: 1.3.3 + '@peculiar/x509': 1.14.3 + pkijs: 3.3.3 semver-diff@4.0.0: dependencies: @@ -22887,11 +23058,11 @@ snapshots: signal-exit@4.1.0: {} - sinon@21.0.2: + sinon@21.0.3: dependencies: '@sinonjs/commons': 3.0.1 '@sinonjs/fake-timers': 15.1.1 - '@sinonjs/samsam': 9.0.2 + '@sinonjs/samsam': 9.0.3 diff: 8.0.3 supports-color: 7.2.0 @@ -22908,7 +23079,7 @@ snapshots: '@types/node': 17.0.45 '@types/sax': 1.2.7 arg: 5.0.2 - sax: 1.5.0 + sax: 1.6.0 skin-tone@2.0.0: dependencies: @@ -23322,7 +23493,7 @@ snapshots: css-what: 6.2.2 csso: 5.0.5 picocolors: 1.1.1 - sax: 1.5.0 + sax: 1.6.0 swc-loader@0.2.7(@swc/core@1.15.18)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)): dependencies: @@ -23413,13 +23584,13 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - terser: 5.46.0 + terser: 5.46.1 webpack: 5.105.4(@swc/core@1.15.18)(esbuild@0.27.4) optionalDependencies: '@swc/core': 1.15.18 esbuild: 0.27.4 - terser@5.46.0: + terser@5.46.1: dependencies: '@jridgewell/source-map': 0.3.11 acorn: 8.16.0 @@ -23577,6 +23748,8 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 + tslib@1.14.1: {} + tslib@2.8.1: {} tsup@8.5.1(@swc/core@1.15.18)(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): @@ -23615,6 +23788,10 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + tsyringe@4.10.0: + dependencies: + tslib: 1.14.1 + twitch-video-element@0.1.6: {} typanion@3.14.0: {} @@ -23689,12 +23866,12 @@ snapshots: dependencies: is-typedarray: 1.0.0 - typescript-eslint@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.57.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) eslint: 10.0.3(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -23925,11 +24102,11 @@ snapshots: '@vimeo/player': 2.29.0 media-played-ranges-mixin: 0.1.0 - vite-plugin-purgecss@0.2.13(@swc/core@1.15.18)(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): + vite-plugin-purgecss@0.2.13(@swc/core@1.15.18)(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): dependencies: purgecss: 4.1.3 tsup: 8.5.1(@swc/core@1.15.18)(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) - vite: 6.4.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 6.4.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@microsoft/api-extractor' - '@swc/core' @@ -23948,11 +24125,11 @@ snapshots: - typescript - yaml - vite-plugin-purgecss@0.2.13(@swc/core@1.15.18)(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): + vite-plugin-purgecss@0.2.13(@swc/core@1.15.18)(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(postcss@8.5.8)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): dependencies: purgecss: 4.1.3 tsup: 8.5.1(@swc/core@1.15.18)(jiti@2.6.1)(postcss@8.5.8)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) - vite: 6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@microsoft/api-extractor' - '@swc/core' @@ -23971,24 +24148,24 @@ snapshots: - typescript - yaml - vite-plugin-singlefile@2.3.2(rollup@4.59.0)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-singlefile@2.3.2(rollup@4.59.0)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)): dependencies: micromatch: 4.0.8 rollup: 4.59.0 - vite: 8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - vite-plugin-svgr@4.5.0(rollup@4.59.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)): + vite-plugin-svgr@4.5.0(rollup@4.59.0)(typescript@5.9.3)(vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.59.0) '@svgr/core': 8.1.0(typescript@5.9.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) - vite: 8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - rollup - supports-color - typescript - vite@6.4.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@6.4.1(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -24002,11 +24179,11 @@ snapshots: jiti: 2.6.1 lightningcss: 1.32.0 sass: 1.98.0 - terser: 5.46.0 + terser: 5.46.1 tsx: 4.21.0 yaml: 2.8.2 - vite@6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@6.4.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -24020,11 +24197,11 @@ snapshots: jiti: 2.6.1 lightningcss: 1.32.0 sass: 1.98.0 - terser: 5.46.0 + terser: 5.46.1 tsx: 4.21.0 yaml: 2.8.2 - vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@8.0.0(@types/node@24.12.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@oxc-project/runtime': 0.115.0 lightningcss: 1.32.0 @@ -24038,11 +24215,11 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 sass: 1.98.0 - terser: 5.46.0 + terser: 5.46.1 tsx: 4.21.0 yaml: 2.8.2 - vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@oxc-project/runtime': 0.115.0 lightningcss: 1.32.0 @@ -24056,7 +24233,7 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 sass: 1.98.0 - terser: 5.46.0 + terser: 5.46.1 tsx: 4.21.0 yaml: 2.8.2 @@ -24122,7 +24299,7 @@ snapshots: transitivePeerDependencies: - tslib - webpack-dev-server@5.2.2(tslib@2.8.1)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)): + webpack-dev-server@5.2.3(tslib@2.8.1)(webpack@5.105.4(@swc/core@1.15.18)(esbuild@0.27.4)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -24146,7 +24323,7 @@ snapshots: open: 10.2.0 p-retry: 6.2.1 schema-utils: 4.3.3 - selfsigned: 2.4.1 + selfsigned: 5.5.0 serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 @@ -24187,7 +24364,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.20.0 + enhanced-resolve: 5.20.1 es-module-lexer: 2.0.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -24404,7 +24581,7 @@ snapshots: xml-js@1.6.11: dependencies: - sax: 1.5.0 + sax: 1.6.0 xml-name-validator@5.0.0: {} From b36a0bc89577d3f37658cd20941eb4895078bf19 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 17:23:06 +0100 Subject: [PATCH 35/37] Update polyfill --- .../cursorless-everywhere-talon-core/src/polyfill.ts | 10 ++++++++++ packages/cursorless-everywhere-talon/src/polyfill.ts | 11 ----------- .../src/types/quickjs.d.ts | 1 - 3 files changed, 10 insertions(+), 12 deletions(-) delete mode 100644 packages/cursorless-everywhere-talon/src/polyfill.ts delete mode 100644 packages/cursorless-everywhere-talon/src/types/quickjs.d.ts diff --git a/packages/cursorless-everywhere-talon-core/src/polyfill.ts b/packages/cursorless-everywhere-talon-core/src/polyfill.ts index f0d5de8c0c..bf08b80819 100644 --- a/packages/cursorless-everywhere-talon-core/src/polyfill.ts +++ b/packages/cursorless-everywhere-talon-core/src/polyfill.ts @@ -1,5 +1,15 @@ const global = globalThis as any; +// Allows us to use `console.*` with quickjs +if (typeof global.print === "function") { + global.console = { + log: global.print, + error: global.print, + warn: global.print, + debug: global.print, + }; +} + // process.env is used by `immer` if (global.process == null) { global.process = { diff --git a/packages/cursorless-everywhere-talon/src/polyfill.ts b/packages/cursorless-everywhere-talon/src/polyfill.ts deleted file mode 100644 index 8c7527253c..0000000000 --- a/packages/cursorless-everywhere-talon/src/polyfill.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Allows us to use `console.*` with quickjs -if (typeof print === "function") { - const global = globalThis as any; - - global.console = { - log: print, - error: print, - warn: print, - debug: print, - }; -} diff --git a/packages/cursorless-everywhere-talon/src/types/quickjs.d.ts b/packages/cursorless-everywhere-talon/src/types/quickjs.d.ts deleted file mode 100644 index 3dbbe5b37f..0000000000 --- a/packages/cursorless-everywhere-talon/src/types/quickjs.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare function print(...objs: any): void; From d1a977ffcf2a3590f42011f995cbc7d977e32f4f Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 17:44:10 +0100 Subject: [PATCH 36/37] Use use instead of import --- packages/cursorless-org-docs/src/css/custom.scss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/cursorless-org-docs/src/css/custom.scss b/packages/cursorless-org-docs/src/css/custom.scss index 6c1525ceff..b7168287c5 100644 --- a/packages/cursorless-org-docs/src/css/custom.scss +++ b/packages/cursorless-org-docs/src/css/custom.scss @@ -1,5 +1,7 @@ -@use "sass:map"; +@use "./github-link"; +// Bootstrap 5.3 still composes these partials via legacy `@import`. +// Keep that chain intact until the upstream Sass entrypoints are modernized. @import "bootstrap/scss/functions"; @import "bootstrap/scss/variables"; @import "bootstrap/scss/variables-dark"; @@ -12,8 +14,6 @@ @import "bootstrap/scss/forms/form-select"; @import "bootstrap/scss/card"; -@import "./github-link"; - [data-theme="dark"] .dark-mode-invert { filter: invert(90%) hue-rotate(180deg); } From 313d193fdd561a538e74502e4bc1689438d8db2c Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Tue, 17 Mar 2026 17:50:02 +0100 Subject: [PATCH 37/37] Update test flow --- .github/workflows/test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 95c1abfe50..b10656fd73 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -102,15 +102,15 @@ jobs: run: pnpm -F @cursorless/test-harness test:talonJs if: runner.os != 'Linux' - - name: Run Cursorless-everywhere-talon tests (Linux) + - name: Run QuickJS tests (Linux) run: xvfb-run -a pnpm -F @cursorless/cursorless-everywhere-talon-e2e test:quickjs if: runner.os == 'Linux' && matrix.app_version == 'stable' - - name: Run Cursorless-everywhere-talon tests (Win,Mac) + - name: Run QuickJS tests (Win,Mac) run: pnpm -F @cursorless/cursorless-everywhere-talon-e2e test:quickjs if: runner.os != 'Linux' - - name: Create vscode dist that can be installed locally + - name: Create VSCode dist that can be installed locally run: pnpm -F @cursorless/cursorless-vscode populate-dist --local-install if: runner.os == 'Linux' && matrix.app_version == 'stable'