From fccb8c7e3c5227193a00c1d2982e25036c263624 Mon Sep 17 00:00:00 2001 From: Ryan Bower Date: Tue, 23 Jun 2026 21:30:11 -0700 Subject: [PATCH 1/3] build: support TypeScript 6.0 Signed-off-by: Ryan Bower --- .gitignore | 1 + package.json | 5 +- packages/cli/tsconfig.lib.json | 3 +- packages/codemod/tsconfig.lib.json | 3 +- packages/create-qui/tsconfig.lib.json | 3 +- packages/css-utils/tsconfig.lib.json | 3 +- packages/esbuild/tsconfig.lib.json | 3 +- pnpm-lock.yaml | 215 +++++++++++++------------- pnpm-workspace.yaml | 2 +- 9 files changed, 123 insertions(+), 115 deletions(-) diff --git a/.gitignore b/.gitignore index f663c78..61de3f5 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,7 @@ packages/docs/*/knowledge/ packages/docs/*/public/exports .wireit .lint-cache +.pnpm-store ############################################################################### # Framework-specific outputs diff --git a/package.json b/package.json index 11309c4..c61d8ba 100644 --- a/package.json +++ b/package.json @@ -68,8 +68,7 @@ "resolutions": { "eslint": "catalog:", "lodash": "4.17.23", - "playwright": "1.58.2", - "typescript": "5.9.3" + "playwright": "1.58.2" }, - "packageManager": "pnpm@11.5.0+sha512.dbfcc4f81cf48597afd4bc391ffdf12c11f1a9fb83a395bfa6b0a2d9cc2fd8ffebafdb1ccbd529632153f793904c2615b7f09fe1a345473fd1c35845172a8eb1" + "packageManager": "pnpm@11.9.0+sha512.bd682d5d03fe525ef7c9fd6780c6884d1e756ac4c9c9fe00c538782824310dcf90e3ddc4f53835f06dfaebd5085e41855e0bcbb3b60de2ac5bbab89e5036f03b" } diff --git a/packages/cli/tsconfig.lib.json b/packages/cli/tsconfig.lib.json index 92b6477..9503802 100644 --- a/packages/cli/tsconfig.lib.json +++ b/packages/cli/tsconfig.lib.json @@ -7,7 +7,8 @@ "resolveJsonModule": true, "tsBuildInfoFile": "node_modules/.tmp/.tsbuildinfo-lib", "module": "NodeNext", - "moduleResolution": "NodeNext" + "moduleResolution": "NodeNext", + "types": ["node"] }, "include": ["./src"] } diff --git a/packages/codemod/tsconfig.lib.json b/packages/codemod/tsconfig.lib.json index f4b19ac..8f75afc 100644 --- a/packages/codemod/tsconfig.lib.json +++ b/packages/codemod/tsconfig.lib.json @@ -4,7 +4,8 @@ "composite": true, "outDir": "./dist", "rootDir": "./src", - "tsBuildInfoFile": "node_modules/.tmp/.tsbuildinfo-lib" + "tsBuildInfoFile": "node_modules/.tmp/.tsbuildinfo-lib", + "types": ["node"] }, "include": ["./src"], "exclude": ["./src/**/__tests__", "./src/**/*.spec.ts", "./src/**/*.spec.tsx"] diff --git a/packages/create-qui/tsconfig.lib.json b/packages/create-qui/tsconfig.lib.json index 36c629f..6d8a311 100644 --- a/packages/create-qui/tsconfig.lib.json +++ b/packages/create-qui/tsconfig.lib.json @@ -4,7 +4,8 @@ "composite": true, "outDir": "./dist", "rootDir": "./src", - "tsBuildInfoFile": "node_modules/.tmp/.tsbuildinfo-lib" + "tsBuildInfoFile": "node_modules/.tmp/.tsbuildinfo-lib", + "types": ["node"] }, "include": ["./src"] } diff --git a/packages/css-utils/tsconfig.lib.json b/packages/css-utils/tsconfig.lib.json index 36c629f..6d8a311 100644 --- a/packages/css-utils/tsconfig.lib.json +++ b/packages/css-utils/tsconfig.lib.json @@ -4,7 +4,8 @@ "composite": true, "outDir": "./dist", "rootDir": "./src", - "tsBuildInfoFile": "node_modules/.tmp/.tsbuildinfo-lib" + "tsBuildInfoFile": "node_modules/.tmp/.tsbuildinfo-lib", + "types": ["node"] }, "include": ["./src"] } diff --git a/packages/esbuild/tsconfig.lib.json b/packages/esbuild/tsconfig.lib.json index 36c629f..6d8a311 100644 --- a/packages/esbuild/tsconfig.lib.json +++ b/packages/esbuild/tsconfig.lib.json @@ -4,7 +4,8 @@ "composite": true, "outDir": "./dist", "rootDir": "./src", - "tsBuildInfoFile": "node_modules/.tmp/.tsbuildinfo-lib" + "tsBuildInfoFile": "node_modules/.tmp/.tsbuildinfo-lib", + "types": ["node"] }, "include": ["./src"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 00d84d2..d0ca199 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,8 +28,8 @@ catalogs: specifier: 4.21.0 version: 4.21.0 typescript: - specifier: 5.9.3 - version: 5.9.3 + specifier: 6.0.3 + version: 6.0.3 typescript-eslint: specifier: 8.58.1 version: 8.58.1 @@ -88,13 +88,13 @@ importers: version: link:packages/changesets-cli '@qualcomm-ui/eslint-config-mdx': specifier: ^3.0.3 - version: 3.0.3(eslint-mdx@3.8.1(eslint@9.39.4(jiti@2.7.0)))(eslint-plugin-mdx@3.8.1(eslint@9.39.4(jiti@2.7.0)))(eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.7.0)))(eslint@9.39.4(jiti@2.7.0))(oxfmt@0.54.0)(remark-frontmatter@5.0.0)(remark-lint-fenced-code-flag@4.2.0)(remark-lint-final-newline@3.0.1)(remark-lint-heading-increment@4.0.1)(remark-lint-list-item-content-indent@4.0.1)(remark-lint-list-item-indent@4.0.1)(remark-lint-maximum-heading-length@4.1.1)(remark-lint-no-consecutive-blank-lines@5.0.1)(remark-lint-no-duplicate-headings-in-section@4.0.1)(remark-lint-no-heading-punctuation@4.0.1)(remark-lint-unordered-list-marker-style@4.0.1)(typescript-eslint@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(typescript@5.9.3)(unified@11.0.5) + version: 3.0.3(eslint-mdx@3.8.1(eslint@9.39.4(jiti@2.7.0)))(eslint-plugin-mdx@3.8.1(eslint@9.39.4(jiti@2.7.0)))(eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.7.0)))(eslint@9.39.4(jiti@2.7.0))(oxfmt@0.54.0)(remark-frontmatter@5.0.0)(remark-lint-fenced-code-flag@4.2.0)(remark-lint-final-newline@3.0.1)(remark-lint-heading-increment@4.0.1)(remark-lint-list-item-content-indent@4.0.1)(remark-lint-list-item-indent@4.0.1)(remark-lint-maximum-heading-length@4.1.1)(remark-lint-no-consecutive-blank-lines@5.0.1)(remark-lint-no-duplicate-headings-in-section@4.0.1)(remark-lint-no-heading-punctuation@4.0.1)(remark-lint-unordered-list-marker-style@4.0.1)(typescript-eslint@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(typescript@6.0.3)(unified@11.0.5) '@qualcomm-ui/eslint-config-react': specifier: ^2.0.0 - version: 2.0.0(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-plugin-import@2.32.0)(eslint-plugin-react-hooks@7.1.1(eslint@9.39.4(jiti@2.7.0)))(eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.7.0)))(eslint@9.39.4(jiti@2.7.0))(typescript-eslint@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(typescript@5.9.3) + version: 2.0.0(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint-plugin-import@2.32.0)(eslint-plugin-react-hooks@7.1.1(eslint@9.39.4(jiti@2.7.0)))(eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.7.0)))(eslint@9.39.4(jiti@2.7.0))(typescript-eslint@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(typescript@6.0.3) '@qualcomm-ui/eslint-config-typescript': specifier: ^3.0.0 - version: 3.0.0(48c65a38de3e346ef5e55ff86c0a87ee) + version: 3.0.0(7482bbde4fa81b4e157e045912491b72) '@qualcomm-ui/eslint-plugin-path-alias': specifier: ^1.1.2 version: 1.1.2 @@ -160,13 +160,13 @@ importers: version: 0.4.0 stylelint: specifier: ^17.1.1 - version: 17.12.0(typescript@5.9.3) + version: 17.12.0(typescript@6.0.3) stylelint-config-standard: specifier: ^40.0.0 - version: 40.0.0(stylelint@17.12.0(typescript@5.9.3)) + version: 40.0.0(stylelint@17.12.0(typescript@6.0.3)) stylelint-order: specifier: ^7.0.1 - version: 7.0.1(stylelint@17.12.0(typescript@5.9.3)) + version: 7.0.1(stylelint@17.12.0(typescript@6.0.3)) syncpack: specifier: 15.1.2 version: 15.1.2 @@ -181,10 +181,10 @@ importers: version: 2.9.16 typescript: specifier: 'catalog:' - version: 5.9.3 + version: 6.0.3 typescript-eslint: specifier: 'catalog:' - version: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + version: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) yaml: specifier: ^2.8.2 version: 2.9.0 @@ -240,6 +240,9 @@ importers: '@commander-js/extra-typings': specifier: ^14.0.0 version: 14.0.0(commander@14.0.3) + '@manypkg/get-packages': + specifier: ^3.1.0 + version: 3.1.0 chalk: specifier: ^5.6.2 version: 5.6.2 @@ -342,7 +345,7 @@ importers: version: 4.21.0 typescript: specifier: 'catalog:' - version: 5.9.3 + version: 6.0.3 unified: specifier: ^11.0.5 version: 11.0.5 @@ -382,7 +385,7 @@ importers: dependencies: cosmiconfig: specifier: '>=9.0.0' - version: 9.0.1(typescript@5.9.3) + version: 9.0.1(typescript@6.0.3) devDependencies: '@commander-js/extra-typings': specifier: ^14.0.0 @@ -482,7 +485,7 @@ importers: version: link:../cli typescript: specifier: 'catalog:' - version: 5.9.3 + version: 6.0.3 packages/vite: dependencies: @@ -5035,8 +5038,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true @@ -6274,7 +6277,7 @@ snapshots: '@polka/url@1.0.0-next.29': {} - '@qualcomm-ui/eslint-config-mdx@3.0.3(eslint-mdx@3.8.1(eslint@9.39.4(jiti@2.7.0)))(eslint-plugin-mdx@3.8.1(eslint@9.39.4(jiti@2.7.0)))(eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.7.0)))(eslint@9.39.4(jiti@2.7.0))(oxfmt@0.54.0)(remark-frontmatter@5.0.0)(remark-lint-fenced-code-flag@4.2.0)(remark-lint-final-newline@3.0.1)(remark-lint-heading-increment@4.0.1)(remark-lint-list-item-content-indent@4.0.1)(remark-lint-list-item-indent@4.0.1)(remark-lint-maximum-heading-length@4.1.1)(remark-lint-no-consecutive-blank-lines@5.0.1)(remark-lint-no-duplicate-headings-in-section@4.0.1)(remark-lint-no-heading-punctuation@4.0.1)(remark-lint-unordered-list-marker-style@4.0.1)(typescript-eslint@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(typescript@5.9.3)(unified@11.0.5)': + '@qualcomm-ui/eslint-config-mdx@3.0.3(eslint-mdx@3.8.1(eslint@9.39.4(jiti@2.7.0)))(eslint-plugin-mdx@3.8.1(eslint@9.39.4(jiti@2.7.0)))(eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.7.0)))(eslint@9.39.4(jiti@2.7.0))(oxfmt@0.54.0)(remark-frontmatter@5.0.0)(remark-lint-fenced-code-flag@4.2.0)(remark-lint-final-newline@3.0.1)(remark-lint-heading-increment@4.0.1)(remark-lint-list-item-content-indent@4.0.1)(remark-lint-list-item-indent@4.0.1)(remark-lint-maximum-heading-length@4.1.1)(remark-lint-no-consecutive-blank-lines@5.0.1)(remark-lint-no-duplicate-headings-in-section@4.0.1)(remark-lint-no-heading-punctuation@4.0.1)(remark-lint-unordered-list-marker-style@4.0.1)(typescript-eslint@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(typescript@6.0.3)(unified@11.0.5)': dependencies: eslint: 9.39.4(jiti@2.7.0) eslint-mdx: 3.8.1(eslint@9.39.4(jiti@2.7.0)) @@ -6292,40 +6295,40 @@ snapshots: remark-lint-no-duplicate-headings-in-section: 4.0.1 remark-lint-no-heading-punctuation: 4.0.1 remark-lint-unordered-list-marker-style: 4.0.1 - typescript: 5.9.3 - typescript-eslint: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + typescript: 6.0.3 + typescript-eslint: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) unified: 11.0.5 - '@qualcomm-ui/eslint-config-react@2.0.0(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-plugin-import@2.32.0)(eslint-plugin-react-hooks@7.1.1(eslint@9.39.4(jiti@2.7.0)))(eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.7.0)))(eslint@9.39.4(jiti@2.7.0))(typescript-eslint@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(typescript@5.9.3)': + '@qualcomm-ui/eslint-config-react@2.0.0(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint-plugin-import@2.32.0)(eslint-plugin-react-hooks@7.1.1(eslint@9.39.4(jiti@2.7.0)))(eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@2.7.0)))(eslint@9.39.4(jiti@2.7.0))(typescript-eslint@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(typescript@6.0.3)': dependencies: - '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) - '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) eslint: 9.39.4(jiti@2.7.0) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.5)(eslint@9.39.4(jiti@2.7.0)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.5)(eslint@9.39.4(jiti@2.7.0)) eslint-plugin-react: 7.37.5(eslint@9.39.4(jiti@2.7.0)) eslint-plugin-react-hooks: 7.1.1(eslint@9.39.4(jiti@2.7.0)) - typescript: 5.9.3 - typescript-eslint: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + typescript: 6.0.3 + typescript-eslint: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) - '@qualcomm-ui/eslint-config-typescript@3.0.0(48c65a38de3e346ef5e55ff86c0a87ee)': + '@qualcomm-ui/eslint-config-typescript@3.0.0(7482bbde4fa81b4e157e045912491b72)': dependencies: '@eslint/js': 9.39.4 '@stylistic/eslint-plugin': 5.10.0(eslint@9.39.4(jiti@2.7.0)) - '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) - '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) eslint: 9.39.4(jiti@2.7.0) eslint-import-resolver-typescript: 4.4.5(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.7.0)) - eslint-plugin-comment-length: 2.3.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.5)(eslint@9.39.4(jiti@2.7.0)) + eslint-plugin-comment-length: 2.3.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.5)(eslint@9.39.4(jiti@2.7.0)) eslint-plugin-jsdoc: 63.0.1(eslint@9.39.4(jiti@2.7.0)) eslint-plugin-oxfmt: 0.9.0(eslint@9.39.4(jiti@2.7.0))(oxfmt@0.54.0) - eslint-plugin-perfectionist: 5.9.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + eslint-plugin-perfectionist: 5.9.0(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) eslint-plugin-promise: 7.3.0(eslint@9.39.4(jiti@2.7.0)) eslint-plugin-unicorn: 65.0.1(eslint@9.39.4(jiti@2.7.0)) - eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0)) + eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.4(jiti@2.7.0)) oxfmt: 0.54.0 - typescript: 5.9.3 - typescript-eslint: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + typescript: 6.0.3 + typescript-eslint: 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) '@qualcomm-ui/eslint-plugin-path-alias@1.1.2': {} @@ -6492,49 +6495,49 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.58.1 - '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.58.1 eslint: 9.39.4(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 8.58.1 '@typescript-eslint/types': 8.58.1 - '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.58.1(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.58.1 debug: 4.4.3 eslint: 9.39.4(jiti@2.7.0) - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.58.1(typescript@5.9.3)': + '@typescript-eslint/project-service@8.58.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.58.1(typescript@5.9.3) - '@typescript-eslint/types': 8.58.1 + '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@6.0.3) + '@typescript-eslint/types': 8.60.1 debug: 4.4.3 - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.60.1(typescript@5.9.3)': + '@typescript-eslint/project-service@8.60.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@6.0.3) '@typescript-eslint/types': 8.60.1 debug: 4.4.3 - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -6548,23 +6551,23 @@ snapshots: '@typescript-eslint/types': 8.60.1 '@typescript-eslint/visitor-keys': 8.60.1 - '@typescript-eslint/tsconfig-utils@8.58.1(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.58.1(typescript@6.0.3)': dependencies: - typescript: 5.9.3 + typescript: 6.0.3 - '@typescript-eslint/tsconfig-utils@8.60.1(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.60.1(typescript@6.0.3)': dependencies: - typescript: 5.9.3 + typescript: 6.0.3 - '@typescript-eslint/type-utils@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.58.1 - '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.58.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) debug: 4.4.3 eslint: 9.39.4(jiti@2.7.0) - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -6572,55 +6575,55 @@ snapshots: '@typescript-eslint/types@8.60.1': {} - '@typescript-eslint/typescript-estree@8.58.1(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.58.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.58.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.58.1(typescript@5.9.3) + '@typescript-eslint/project-service': 8.58.1(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.58.1(typescript@6.0.3) '@typescript-eslint/types': 8.58.1 '@typescript-eslint/visitor-keys': 8.58.1 debug: 4.4.3 minimatch: 10.2.5 semver: 7.8.1 tinyglobby: 0.2.17 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.60.1(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.60.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.60.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@5.9.3) + '@typescript-eslint/project-service': 8.60.1(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.60.1(typescript@6.0.3) '@typescript-eslint/types': 8.60.1 '@typescript-eslint/visitor-keys': 8.60.1 debug: 4.4.3 minimatch: 10.2.5 semver: 7.8.1 tinyglobby: 0.2.17 - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/utils@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.58.1 '@typescript-eslint/types': 8.58.1 - '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.58.1(typescript@6.0.3) eslint: 9.39.4(jiti@2.7.0) - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.60.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/utils@8.60.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.60.1 '@typescript-eslint/types': 8.60.1 - '@typescript-eslint/typescript-estree': 8.60.1(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.60.1(typescript@6.0.3) eslint: 9.39.4(jiti@2.7.0) - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -7075,14 +7078,14 @@ snapshots: dependencies: browserslist: 4.28.2 - cosmiconfig@9.0.1(typescript@5.9.3): + cosmiconfig@9.0.1(typescript@6.0.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.2.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 cross-env@10.1.0: dependencies: @@ -7527,7 +7530,7 @@ snapshots: tinyglobby: 0.2.17 unrs-resolver: 1.12.2 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.5)(eslint@9.39.4(jiti@2.7.0)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.5)(eslint@9.39.4(jiti@2.7.0)) transitivePeerDependencies: - supports-color @@ -7550,26 +7553,26 @@ snapshots: - bluebird - supports-color - eslint-module-utils@2.13.0(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.5)(eslint@9.39.4(jiti@2.7.0)): + eslint-module-utils@2.13.0(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.5)(eslint@9.39.4(jiti@2.7.0)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) eslint: 9.39.4(jiti@2.7.0) eslint-import-resolver-node: 0.3.10 eslint-import-resolver-typescript: 4.4.5(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.7.0)) transitivePeerDependencies: - supports-color - eslint-plugin-comment-length@2.3.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): + eslint-plugin-comment-length@2.3.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@typescript-eslint/utils': 8.60.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) eslint: 9.39.4(jiti@2.7.0) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.5)(eslint@9.39.4(jiti@2.7.0)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.5)(eslint@9.39.4(jiti@2.7.0)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -7580,7 +7583,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.4(jiti@2.7.0) eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.13.0(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.5)(eslint@9.39.4(jiti@2.7.0)) + eslint-module-utils: 2.13.0(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.5)(eslint@9.39.4(jiti@2.7.0)) hasown: 2.0.4 is-core-module: 2.16.2 is-glob: 4.0.3 @@ -7592,7 +7595,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -7645,9 +7648,9 @@ snapshots: picomatch: 4.0.4 synckit: 0.11.13 - eslint-plugin-perfectionist@5.9.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): + eslint-plugin-perfectionist@5.9.0(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@typescript-eslint/utils': 8.60.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) eslint: 9.39.4(jiti@2.7.0) natural-orderby: 5.0.0 transitivePeerDependencies: @@ -7711,11 +7714,11 @@ snapshots: semver: 7.8.1 strip-indent: 4.1.1 - eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0)): + eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.4(jiti@2.7.0)): dependencies: eslint: 9.39.4(jiti@2.7.0) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) eslint-scope@8.4.0: dependencies: @@ -10185,22 +10188,22 @@ snapshots: postcss: 8.5.15 postcss-selector-parser: 6.1.2 - stylelint-config-recommended@18.0.0(stylelint@17.12.0(typescript@5.9.3)): + stylelint-config-recommended@18.0.0(stylelint@17.12.0(typescript@6.0.3)): dependencies: - stylelint: 17.12.0(typescript@5.9.3) + stylelint: 17.12.0(typescript@6.0.3) - stylelint-config-standard@40.0.0(stylelint@17.12.0(typescript@5.9.3)): + stylelint-config-standard@40.0.0(stylelint@17.12.0(typescript@6.0.3)): dependencies: - stylelint: 17.12.0(typescript@5.9.3) - stylelint-config-recommended: 18.0.0(stylelint@17.12.0(typescript@5.9.3)) + stylelint: 17.12.0(typescript@6.0.3) + stylelint-config-recommended: 18.0.0(stylelint@17.12.0(typescript@6.0.3)) - stylelint-order@7.0.1(stylelint@17.12.0(typescript@5.9.3)): + stylelint-order@7.0.1(stylelint@17.12.0(typescript@6.0.3)): dependencies: postcss: 8.5.15 postcss-sorting: 9.1.0(postcss@8.5.15) - stylelint: 17.12.0(typescript@5.9.3) + stylelint: 17.12.0(typescript@6.0.3) - stylelint@17.12.0(typescript@5.9.3): + stylelint@17.12.0(typescript@6.0.3): dependencies: '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) @@ -10210,7 +10213,7 @@ snapshots: '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.1) '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) colord: 2.9.3 - cosmiconfig: 9.0.1(typescript@5.9.3) + cosmiconfig: 9.0.1(typescript@6.0.3) css-functions-list: 3.3.3 css-tree: 3.2.1 debug: 4.4.3 @@ -10377,9 +10380,9 @@ snapshots: trough@2.2.0: {} - ts-api-utils@2.5.0(typescript@5.9.3): + ts-api-utils@2.5.0(typescript@6.0.3): dependencies: - typescript: 5.9.3 + typescript: 6.0.3 ts-morph@25.0.1: dependencies: @@ -10454,18 +10457,18 @@ snapshots: typedarray@0.0.6: {} - typescript-eslint@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3): + typescript-eslint@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) - '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.58.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.58.1(@typescript-eslint/parser@8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.58.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.58.1(eslint@9.39.4(jiti@2.7.0))(typescript@6.0.3) eslint: 9.39.4(jiti@2.7.0) - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - typescript@5.9.3: {} + typescript@6.0.3: {} unbox-primitive@1.1.0: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 9243b2e..6f8e0a2 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -51,7 +51,7 @@ catalog: react-dom: 19.2.4 react-router: 7.12.0 tsx: 4.21.0 - typescript: 5.9.3 + typescript: 6.0.3 typescript-eslint: 8.58.1 vite: 8.0.12 vitest: 4.1.6 From 1131bb3e54ad676fe2f2041183e930b4c18f78c0 Mon Sep 17 00:00:00 2001 From: Ryan Bower Date: Tue, 23 Jun 2026 21:34:08 -0700 Subject: [PATCH 2/3] feat(lint-changed): add script for linting changed files Signed-off-by: Ryan Bower --- packages/cli/build.ts | 2 +- packages/cli/package.json | 4 + packages/cli/src/cli.ts | 5 +- packages/cli/src/modules/index.ts | 2 - packages/cli/src/modules/lint-changed.ts | 470 +++++++++++++++++++++++ packages/cli/src/modules/publish.ts | 8 +- 6 files changed, 483 insertions(+), 8 deletions(-) delete mode 100644 packages/cli/src/modules/index.ts create mode 100644 packages/cli/src/modules/lint-changed.ts diff --git a/packages/cli/build.ts b/packages/cli/build.ts index b7f2c54..b1ed06f 100644 --- a/packages/cli/build.ts +++ b/packages/cli/build.ts @@ -30,7 +30,7 @@ async function main(argv: string[]) { "process.env.BUILD_MODE": JSON.stringify(BUILD_MODE), }, entryPoints: ["./src/cli.ts"], - external: ["typescript"], + external: ["typescript", "@manypkg/get-packages"], format: "cjs", loader: { ".node": "copy", diff --git a/packages/cli/package.json b/packages/cli/package.json index 2edf4c9..5def6ef 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -32,11 +32,15 @@ }, "devDependencies": { "@commander-js/extra-typings": "^14.0.0", + "@manypkg/get-packages": "^3.1.0", "chalk": "^5.6.2", "chokidar": "^4.0.3", "commander": "^14.0.3", "dayjs": "^1.11.19", "esbuild": "catalog:", "vitest": "catalog:" + }, + "peerDependencies": { + "@manypkg/get-packages": ">=3.1.0" } } diff --git a/packages/cli/src/cli.ts b/packages/cli/src/cli.ts index 0ef01e5..d31d9f7 100644 --- a/packages/cli/src/cli.ts +++ b/packages/cli/src/cli.ts @@ -3,11 +3,14 @@ import {program} from "@commander-js/extra-typings" -import {addPublishAngularCommands, addPublishCommands} from "./modules/index.js" +import {addLintChangedCommand} from "./modules/lint-changed.js" +import {addPublishAngularCommands} from "./modules/publish-angular.js" +import {addPublishCommands} from "./modules/publish.js" program.allowUnknownOption(false) addPublishCommands() addPublishAngularCommands() +addLintChangedCommand() program.parse(process.argv) diff --git a/packages/cli/src/modules/index.ts b/packages/cli/src/modules/index.ts deleted file mode 100644 index dd3c2b5..0000000 --- a/packages/cli/src/modules/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./publish-angular.js" -export * from "./publish.js" diff --git a/packages/cli/src/modules/lint-changed.ts b/packages/cli/src/modules/lint-changed.ts new file mode 100644 index 0000000..4d54897 --- /dev/null +++ b/packages/cli/src/modules/lint-changed.ts @@ -0,0 +1,470 @@ +// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. +// SPDX-License-Identifier: BSD-3-Clause-Clear + +import {program} from "@commander-js/extra-typings" +import type { + Package, + getPackagesSync as getPackagesSyncType, +} from "@manypkg/get-packages" +import {execa} from "execa" +import {readFile} from "node:fs/promises" +import {relative, sep} from "node:path" +import {extname} from "node:path/posix" + +const DEFAULT_LINTABLE_FILE_EXTENSIONS = [ + ".cjs", + ".cts", + ".js", + ".jsx", + ".mjs", + ".mts", + ".ts", + ".tsx", +] + +const DEFAULT_CONCURRENCY = 3 + +enum Commands { + LINT_CHANGED = "lint-changed", +} + +export interface LintChangedFilesOptions { + /** Base branch or ref to diff against. */ + base?: string + /** Maximum number of package lint commands to run at once. */ + concurrency?: number + /** Whether to continue running commands after a failure. */ + continueOnError?: boolean + /** Directory used to discover the repo and run git commands. */ + cwd?: string + /** Print commands without running them. */ + dryRun?: boolean + /** Lintable file extensions. */ + extensions?: string[] + /** Whether to fetch the base ref before diffing. */ + fetch?: boolean + /** Package manager command used to run scripts. */ + packageManager?: string + /** Script name passed to the package manager. */ + script?: string + /** Run the script once at the workspace root. */ + workspaceRoot?: boolean +} + +interface LintChangedCommandOptions { + /** Base branch or ref to diff against. */ + base?: string + /** Maximum number of package lint commands to run at once. */ + concurrency: string + /** Whether to continue running commands after a failure. */ + continue: boolean + /** Directory used to discover the repo and run git commands. */ + cwd: string + /** Print commands without running them. */ + dryRun?: boolean + /** Comma-separated list of lintable file extensions. */ + extensions: string + /** Whether to fetch the base ref before diffing. */ + fetch: boolean + /** Package manager command used to run scripts. */ + packageManager?: string + /** Script name passed to the package manager. */ + script: string + /** Run the script once at the workspace root. */ + workspaceRoot?: boolean +} + +interface LintCommand { + args: string[] + cwd: string + displayPath: string + files: string[] + packageManager: string +} + +interface LintError { + command: LintCommand + files: string[] + message: string + packagePath: string +} + +export async function lintChangedFiles({ + base = process.env.GITHUB_BASE_REF ?? "main", + concurrency = DEFAULT_CONCURRENCY, + continueOnError = true, + cwd = process.cwd(), + dryRun = false, + extensions = DEFAULT_LINTABLE_FILE_EXTENSIONS, + fetch = true, + packageManager, + script = "lint", + workspaceRoot = false, +}: LintChangedFilesOptions = {}): Promise { + const getPackagesSync = await loadGetPackagesSync() + const repo = getPackagesSync(cwd) + const repoRoot = repo.rootDir + const selectedPackageManager = await getPackageManager({ + packageManager, + repoRoot, + }) + const baseRef = normalizeBaseRef(base) + const changedFiles = await getChangedFiles({baseRef, cwd: repoRoot, fetch}) + const lintableFiles = changedFiles.filter((file) => + isLintableFile(file, new Set(extensions)), + ) + const commands = workspaceRoot + ? getWorkspaceRootCommands({ + files: lintableFiles, + packageManager: selectedPackageManager, + repoRoot, + script, + }) + : getPackageCommands({ + files: lintableFiles, + packageManager: selectedPackageManager, + packages: repo.packages, + script, + }) + + if (commands.length === 0) { + console.info("No changed files to lint") + return + } + + if (dryRun) { + logCommands(commands) + return + } + + const errors = await runLintCommands({ + commands, + concurrency: normalizeConcurrency(concurrency), + continueOnError, + }) + + if (errors.length > 0) { + throw new Error(`Lint failed in ${errors.length} package(s)`) + } +} + +async function loadGetPackagesSync(): Promise { + const {getPackagesSync} = await import("@manypkg/get-packages") + + return getPackagesSync +} + +async function getPackageManager({ + packageManager, + repoRoot, +}: { + packageManager?: string + repoRoot: string +}) { + if (packageManager) { + return packageManager + } + + const rootPackageJson = JSON.parse( + await readFile(`${repoRoot}/package.json`, "utf-8"), + ) as {packageManager?: string} + + return rootPackageJson.packageManager?.split("@").at(0) || "npm" +} + +function normalizeBaseRef(base: string) { + if (base.includes("/") || base.includes("...") || base === "HEAD") { + return base + } + + return `origin/${base}` +} + +function normalizeConcurrency(concurrency: number) { + if (!Number.isInteger(concurrency) || concurrency < 1) { + throw new Error("--concurrency must be a positive integer") + } + + return concurrency +} + +function parseConcurrency(value: string) { + const concurrency = Number.parseInt(value, 10) + + if (!Number.isInteger(concurrency) || concurrency < 1) { + throw new Error("--concurrency must be a positive integer") + } + + return concurrency +} + +function parseExtensions(value: string) { + return value + .split(",") + .map((extension) => extension.trim()) + .filter(Boolean) + .map((extension) => + extension.startsWith(".") ? extension : `.${extension}`, + ) +} + +async function runLintCommands({ + commands, + concurrency, + continueOnError, +}: { + commands: LintCommand[] + concurrency: number + continueOnError: boolean +}) { + const errors: LintError[] = [] + let shouldStop = false + + const commandConcurrency = continueOnError ? concurrency : 1 + + await runQueue( + commands, + commandConcurrency, + () => shouldStop, + async (command) => { + console.info( + `Linting ${command.files.length} changed file(s) in ${command.displayPath}`, + ) + + const result = await execa(command.packageManager, command.args, { + all: true, + cwd: command.cwd, + reject: false, + }) + + if (result.failed) { + const error = { + command, + files: command.files, + message: result.all.trim(), + packagePath: command.displayPath, + } + + errors.push(error) + logLintErrors([error]) + + if (!continueOnError) { + shouldStop = true + } + } + }, + ) + + return errors +} + +async function runQueue( + items: T[], + concurrency: number, + shouldStop: () => boolean, + worker: (item: T) => Promise, +): Promise { + let nextIndex = 0 + + async function runNext() { + while (nextIndex < items.length && !shouldStop()) { + const item = items[nextIndex] + nextIndex += 1 + await worker(item) + } + } + + await Promise.all( + Array.from({length: Math.min(concurrency, items.length)}, () => runNext()), + ) +} + +function logLintErrors(errors: LintError[]): void { + for (const error of errors) { + console.error(`\n${error.packagePath}`) + console.error(error.message) + } +} + +function logCommands(commands: LintCommand[]) { + for (const command of commands) { + console.info( + `cd ${command.displayPath} && ${command.packageManager} ${command.args.join(" ")}`, + ) + } +} + +async function getChangedFiles({ + baseRef, + cwd, + fetch, +}: { + baseRef: string + cwd: string + fetch: boolean +}): Promise { + if (fetch) { + const targetBranch = baseRef.replace("origin/", "") + + await execa( + "git", + [ + "fetch", + "origin", + `${targetBranch}:refs/remotes/origin/${targetBranch}`, + ], + {cwd}, + ) + } + + const {stdout} = await execa( + "git", + ["diff", "--name-only", "--diff-filter=ACMRTUXB", `${baseRef}...HEAD`], + {cwd}, + ) + + return stdout.split("\n").filter(Boolean) +} + +function getWorkspaceRootCommands({ + files, + packageManager, + repoRoot, + script, +}: { + files: string[] + packageManager: string + repoRoot: string + script: string +}): LintCommand[] { + if (files.length === 0) { + return [] + } + + return [ + { + args: ["run", script, "--", ...files], + cwd: repoRoot, + displayPath: "workspace root", + files, + packageManager, + }, + ] +} + +function getPackageCommands({ + files, + packageManager, + packages, + script, +}: { + files: string[] + packageManager: string + packages: Package[] + script: string +}) { + const filesByPackage = new Map() + + for (const file of files) { + const pkg = getContainingPackage(file, packages) + + if (pkg === undefined) { + continue + } + + const packageFiles = filesByPackage.get(pkg) ?? [] + packageFiles.push(relativePath(pkg.relativeDir, file)) + filesByPackage.set(pkg, packageFiles) + } + + return Array.from(filesByPackage, ([pkg, packageFiles]) => ({ + args: ["run", script, "--", ...packageFiles], + cwd: pkg.dir, + displayPath: pkg.relativeDir, + files: packageFiles, + packageManager, + })) +} + +function getContainingPackage(file: string, packages: Package[]) { + return packages + .filter((pkg) => isWithinDirectory(pkg.relativeDir, file)) + .sort( + (a, b) => + normalizePath(b.relativeDir).length - + normalizePath(a.relativeDir).length, + ) + .at(0) +} + +function relativePath(from: string, to: string) { + if (from === ".") { + return to + } + + return normalizePath(relative(from, to)) +} + +function isWithinDirectory(parent: string, child: string) { + const normalizedParent = normalizePath(parent) + const normalizedChild = normalizePath(child) + + return ( + normalizedParent === "." || + normalizedChild === normalizedParent || + normalizedChild.startsWith(`${normalizedParent}/`) + ) +} + +function normalizePath(path: string) { + return path.split(sep).join("/") +} + +function isLintableFile(file: string, extensions: Set) { + return extensions.has(extname(file)) +} + +export function addLintChangedCommand() { + program + .command(Commands.LINT_CHANGED) + .option( + "--base ", + "Base branch/ref to diff against", + process.env.GITHUB_BASE_REF ?? "main", + ) + .option( + "--concurrency ", + "Maximum number of package lint commands to run at once", + String(DEFAULT_CONCURRENCY), + ) + .option("--no-continue", "Stop after the first command failure") + .option("--cwd ", "Repo start directory", process.cwd()) + .option("--dry-run", "Print commands without running them") + .option( + "--extensions ", + "Comma-separated lintable file extensions", + DEFAULT_LINTABLE_FILE_EXTENSIONS.join(","), + ) + .option("--no-fetch", "Skip fetching the base ref") + .option( + "--package-manager ", + "Package manager command used to run scripts", + ) + .option("--script ", "Script to run", "lint") + .option("-w, --workspace-root", "Run the script once at the workspace root") + .summary("Run a script against changed lintable files.") + .action(async (options: LintChangedCommandOptions) => { + await lintChangedFiles({ + base: options.base, + concurrency: parseConcurrency(options.concurrency), + continueOnError: options.continue, + cwd: options.cwd, + dryRun: options.dryRun, + extensions: parseExtensions(options.extensions), + fetch: options.fetch, + packageManager: options.packageManager, + script: options.script, + workspaceRoot: options.workspaceRoot, + }) + }) +} diff --git a/packages/cli/src/modules/publish.ts b/packages/cli/src/modules/publish.ts index 2f8f61c..fcec9a8 100644 --- a/packages/cli/src/modules/publish.ts +++ b/packages/cli/src/modules/publish.ts @@ -11,10 +11,10 @@ import { } from "node:fs" import {resolve} from "node:path" -enum Commands { - PRE_PUBLISH = "pre-publish", - POST_PUBLISH = "post-publish", -} +const Commands = { + POST_PUBLISH: "post-publish", + PRE_PUBLISH: "pre-publish", +} as const export function prePublish(pkgPath: string, pkgBackupPath: string) { cpSync(pkgPath, pkgBackupPath) From f84b1f306f668c5c16d01b7de2b08ad87674ba73 Mon Sep 17 00:00:00 2001 From: Ryan Bower Date: Tue, 23 Jun 2026 21:38:35 -0700 Subject: [PATCH 3/3] version bumps Signed-off-by: Ryan Bower --- packages/cli/CHANGELOG.md | 12 ++++++++++++ packages/cli/package.json | 2 +- packages/codemod/CHANGELOG.md | 8 ++++++++ packages/codemod/package.json | 2 +- packages/create-qui/CHANGELOG.md | 9 +++++++++ packages/create-qui/package.json | 2 +- packages/css-utils/CHANGELOG.md | 8 ++++++++ packages/css-utils/package.json | 6 +++--- packages/esbuild/CHANGELOG.md | 8 ++++++++ packages/esbuild/package.json | 4 ++-- packages/tsconfig/package.json | 2 +- packages/vite/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 13 files changed, 60 insertions(+), 15 deletions(-) create mode 100644 packages/create-qui/CHANGELOG.md diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 3c65310..211619a 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,17 @@ # @qualcomm-ui/cli Changelog +## 1.1.0 + +Jun 23rd, 2026 + +### Features + +- [lint-changed]: add script for linting changed files ([1131bb3](https://github.com/qualcomm/qualcomm-ui-utils/commit/1131bb3)) + +### Build System + +- support TypeScript 6.0 ([fccb8c7](https://github.com/qualcomm/qualcomm-ui-utils/commit/fccb8c7)) + ## 1.0.8 Jun 11th, 2026 diff --git a/packages/cli/package.json b/packages/cli/package.json index 5def6ef..bfe5f52 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@qualcomm-ui/cli", - "version": "1.0.8", + "version": "1.1.0", "description": "Dev utils and scripts in a convenient CLI", "license": "BSD-3-Clause-Clear", "author": "Ryan Bower", diff --git a/packages/codemod/CHANGELOG.md b/packages/codemod/CHANGELOG.md index d267fd5..8689704 100644 --- a/packages/codemod/CHANGELOG.md +++ b/packages/codemod/CHANGELOG.md @@ -1,5 +1,13 @@ # @qualcomm-ui/codemod Changelog +## 0.2.4 + +Jun 23rd, 2026 + +### Build System + +- support TypeScript 6.0 ([fccb8c7](https://github.com/qualcomm/qualcomm-ui-utils/commit/fccb8c7)) + ## 0.2.3 Jun 11th, 2026 diff --git a/packages/codemod/package.json b/packages/codemod/package.json index 6dcf2e3..523ba94 100644 --- a/packages/codemod/package.json +++ b/packages/codemod/package.json @@ -1,6 +1,6 @@ { "name": "@qualcomm-ui/codemod", - "version": "0.2.3", + "version": "0.2.4", "description": "Codemod utilities for automatic QUI package migrations", "license": "BSD-3-Clause-Clear", "author": "Ryan Bower", diff --git a/packages/create-qui/CHANGELOG.md b/packages/create-qui/CHANGELOG.md new file mode 100644 index 0000000..8fe1843 --- /dev/null +++ b/packages/create-qui/CHANGELOG.md @@ -0,0 +1,9 @@ +# create-qui + +## 0.1.1 + +### Patch Changes + +### Build System + +- support TypeScript 6.0 ([fccb8c7](https://github.com/qualcomm/qualcomm-ui-utils/commit/fccb8c7)) diff --git a/packages/create-qui/package.json b/packages/create-qui/package.json index e26e3a9..d634d87 100644 --- a/packages/create-qui/package.json +++ b/packages/create-qui/package.json @@ -1,6 +1,6 @@ { "name": "create-qui", - "version": "0.1.0", + "version": "0.1.1", "description": "Create a new Qualcomm UI project", "license": "BSD-3-Clause-Clear", "author": "Ryan Bower", diff --git a/packages/css-utils/CHANGELOG.md b/packages/css-utils/CHANGELOG.md index 64f2c12..104aacc 100644 --- a/packages/css-utils/CHANGELOG.md +++ b/packages/css-utils/CHANGELOG.md @@ -1,5 +1,13 @@ # @qualcomm-ui/css-utils Changelog +## 1.1.3 + +Jun 23rd, 2026 + +### Build System + +- support TypeScript 6.0 ([fccb8c7](https://github.com/qualcomm/qualcomm-ui-utils/commit/fccb8c7)) + ## 1.1.2 Jun 11th, 2026 diff --git a/packages/css-utils/package.json b/packages/css-utils/package.json index f32a39d..1ac15d0 100644 --- a/packages/css-utils/package.json +++ b/packages/css-utils/package.json @@ -1,6 +1,6 @@ { "name": "@qualcomm-ui/css-utils", - "version": "1.1.2", + "version": "1.1.3", "description": "QUI utils for bundling CSS", "license": "BSD-3-Clause-Clear", "author": "Ryan Bower", @@ -40,8 +40,8 @@ }, "devDependencies": { "@commander-js/extra-typings": "^14.0.0", - "@qualcomm-ui/cli": "workspace:^1.0.8", - "@qualcomm-ui/esbuild": "workspace:^1.0.6", + "@qualcomm-ui/cli": "workspace:^1.1.0", + "@qualcomm-ui/esbuild": "workspace:^1.0.7", "@qualcomm-ui/tsconfig": "workspace:^2.3.0", "autoprefixer": "^10.4.21", "chalk": "^5.6.2", diff --git a/packages/esbuild/CHANGELOG.md b/packages/esbuild/CHANGELOG.md index 26c2c9d..4bda8d8 100644 --- a/packages/esbuild/CHANGELOG.md +++ b/packages/esbuild/CHANGELOG.md @@ -1,5 +1,13 @@ # @qualcomm-ui/esbuild Changelog +## 1.0.7 + +Jun 23rd, 2026 + +### Build System + +- support TypeScript 6.0 ([fccb8c7](https://github.com/qualcomm/qualcomm-ui-utils/commit/fccb8c7)) + ## 1.0.6 Jun 11th, 2026 diff --git a/packages/esbuild/package.json b/packages/esbuild/package.json index bc286cb..c2fe146 100644 --- a/packages/esbuild/package.json +++ b/packages/esbuild/package.json @@ -1,6 +1,6 @@ { "name": "@qualcomm-ui/esbuild", - "version": "1.0.6", + "version": "1.0.7", "description": "esbuild utilities and plugins", "license": "BSD-3-Clause-Clear", "author": "Ryan Bower", @@ -39,7 +39,7 @@ }, "devDependencies": { "@commander-js/extra-typings": "^14.0.0", - "@qualcomm-ui/cli": "workspace:^1.0.8", + "@qualcomm-ui/cli": "workspace:^1.1.0", "@qualcomm-ui/tsconfig": "workspace:^2.3.0", "chalk": "^5.6.2", "chokidar": "^4.0.3", diff --git a/packages/tsconfig/package.json b/packages/tsconfig/package.json index 03ea2c4..c1a822f 100644 --- a/packages/tsconfig/package.json +++ b/packages/tsconfig/package.json @@ -15,7 +15,7 @@ "postpublish": "qui-cli post-publish" }, "devDependencies": { - "@qualcomm-ui/cli": "workspace:^1.0.8", + "@qualcomm-ui/cli": "workspace:^1.1.0", "typescript": "catalog:" }, "peerDependencies": { diff --git a/packages/vite/package.json b/packages/vite/package.json index ca2db71..4568992 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -36,7 +36,7 @@ "chokidar": "^4.0.3" }, "devDependencies": { - "@qualcomm-ui/cli": "workspace:^1.0.8", + "@qualcomm-ui/cli": "workspace:^1.1.0", "@qualcomm-ui/tsconfig": "workspace:^2.3.0", "npm-run-all2": "^8.0.4", "shx": "^0.4.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d0ca199..c5599ac 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -391,10 +391,10 @@ importers: specifier: ^14.0.0 version: 14.0.0(commander@14.0.3) '@qualcomm-ui/cli': - specifier: workspace:^1.0.8 + specifier: workspace:^1.1.0 version: link:../cli '@qualcomm-ui/esbuild': - specifier: workspace:^1.0.6 + specifier: workspace:^1.0.7 version: link:../esbuild '@qualcomm-ui/tsconfig': specifier: workspace:^2.3.0 @@ -451,7 +451,7 @@ importers: specifier: ^14.0.0 version: 14.0.0(commander@14.0.3) '@qualcomm-ui/cli': - specifier: workspace:^1.0.8 + specifier: workspace:^1.1.0 version: link:../cli '@qualcomm-ui/tsconfig': specifier: workspace:^2.3.0 @@ -481,7 +481,7 @@ importers: packages/tsconfig: devDependencies: '@qualcomm-ui/cli': - specifier: workspace:^1.0.8 + specifier: workspace:^1.1.0 version: link:../cli typescript: specifier: 'catalog:' @@ -494,7 +494,7 @@ importers: version: 4.0.3 devDependencies: '@qualcomm-ui/cli': - specifier: workspace:^1.0.8 + specifier: workspace:^1.1.0 version: link:../cli '@qualcomm-ui/tsconfig': specifier: workspace:^2.3.0