diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 216794a5366..f2953f73fa0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -76,6 +76,10 @@ jobs: run: node repo-scripts/repo-toolbox/lib/start.js readme --verify working-directory: repo-a + - name: Collect JSON schemas + run: node repo-scripts/repo-toolbox/lib/start.js collect-json-schemas --output-path ${GITHUB_WORKSPACE}/artifacts/json-schemas + working-directory: repo-a + - name: Clone another copy of the repo to test the build cache uses: actions/checkout@v3 with: diff --git a/.vscode/launch.json b/.vscode/launch.json index 62282eb0785..a143932c7a5 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -66,6 +66,25 @@ "console": "integratedTerminal", "internalConsoleOptions": "neverOpen" }, + { + "type": "node", + "request": "launch", + "name": "Debug Clean Build in Selected Project (Heft)", + "cwd": "${fileDirname}", + "runtimeArgs": [ + "--nolazy", + "--inspect-brk", + "${workspaceFolder}/apps/heft/lib/start.js", + "--debug", + "build", + "--clean" + ], + "skipFiles": ["/**"], + "outFiles": [], + "sourceMaps": true, + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen" + }, { "name": "Attach", "type": "node", diff --git a/.vscode/settings.json b/.vscode/settings.json index 5367d5843db..0fc07ff37ea 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -21,5 +21,35 @@ "files.associations": { "**/package.json": "json", "**/*.json": "jsonc" - } + }, + "json.schemas": [ + { + "fileMatch": ["/rush.json"], + "url": "./libraries/rush-lib/src/schemas/rush.schema.json" + }, + { + "fileMatch": ["**/rush-plugin.json"], + "url": "./libraries/rush-lib/src/schemas/rush-plugin-manifest.schema.json" + }, + { + "fileMatch": ["**/config/heft.json"], + "url": "./apps/heft/src/schemas/heft.schema.json" + }, + { + "fileMatch": ["**/config/rig.json"], + "url": "./libraries/rig-package/src/schemas/rig.schema.json" + }, + { + "fileMatch": ["**/config/rush-project.json"], + "url": "./libraries/rush-lib/src/schemas/rush-project.schema.json" + }, + { + "fileMatch": ["**/config/typescript.json"], + "url": "./heft-plugins/heft-typescript-plugin/src/schemas/typescript.schema.json" + }, + { + "fileMatch": ["**/heft-plugin.json"], + "url": "./apps/heft/src/schemas/heft-plugin.schema.json" + } + ] } diff --git a/README.md b/README.md index 4109469a420..5fbf77f7665 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,7 @@ These GitHub repositories provide supplementary resources for Rush Stack: | [/heft-plugins/heft-webpack4-plugin](./heft-plugins/heft-webpack4-plugin/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Fheft-webpack4-plugin.svg)](https://badge.fury.io/js/%40rushstack%2Fheft-webpack4-plugin) | [changelog](./heft-plugins/heft-webpack4-plugin/CHANGELOG.md) | [@rushstack/heft-webpack4-plugin](https://www.npmjs.com/package/@rushstack/heft-webpack4-plugin) | | [/heft-plugins/heft-webpack5-plugin](./heft-plugins/heft-webpack5-plugin/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Fheft-webpack5-plugin.svg)](https://badge.fury.io/js/%40rushstack%2Fheft-webpack5-plugin) | [changelog](./heft-plugins/heft-webpack5-plugin/CHANGELOG.md) | [@rushstack/heft-webpack5-plugin](https://www.npmjs.com/package/@rushstack/heft-webpack5-plugin) | | [/libraries/api-extractor-model](./libraries/api-extractor-model/) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fapi-extractor-model.svg)](https://badge.fury.io/js/%40microsoft%2Fapi-extractor-model) | [changelog](./libraries/api-extractor-model/CHANGELOG.md) | [@microsoft/api-extractor-model](https://www.npmjs.com/package/@microsoft/api-extractor-model) | +| [/libraries/credential-cache](./libraries/credential-cache/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Fcredential-cache.svg)](https://badge.fury.io/js/%40rushstack%2Fcredential-cache) | [changelog](./libraries/credential-cache/CHANGELOG.md) | [@rushstack/credential-cache](https://www.npmjs.com/package/@rushstack/credential-cache) | | [/libraries/debug-certificate-manager](./libraries/debug-certificate-manager/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Fdebug-certificate-manager.svg)](https://badge.fury.io/js/%40rushstack%2Fdebug-certificate-manager) | [changelog](./libraries/debug-certificate-manager/CHANGELOG.md) | [@rushstack/debug-certificate-manager](https://www.npmjs.com/package/@rushstack/debug-certificate-manager) | | [/libraries/heft-config-file](./libraries/heft-config-file/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Fheft-config-file.svg)](https://badge.fury.io/js/%40rushstack%2Fheft-config-file) | [changelog](./libraries/heft-config-file/CHANGELOG.md) | [@rushstack/heft-config-file](https://www.npmjs.com/package/@rushstack/heft-config-file) | | [/libraries/load-themed-styles](./libraries/load-themed-styles/) | [![npm version](https://badge.fury.io/js/%40microsoft%2Fload-themed-styles.svg)](https://badge.fury.io/js/%40microsoft%2Fload-themed-styles) | [changelog](./libraries/load-themed-styles/CHANGELOG.md) | [@microsoft/load-themed-styles](https://www.npmjs.com/package/@microsoft/load-themed-styles) | @@ -87,6 +88,7 @@ These GitHub repositories provide supplementary resources for Rush Stack: | [/libraries/lookup-by-path](./libraries/lookup-by-path/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Flookup-by-path.svg)](https://badge.fury.io/js/%40rushstack%2Flookup-by-path) | [changelog](./libraries/lookup-by-path/CHANGELOG.md) | [@rushstack/lookup-by-path](https://www.npmjs.com/package/@rushstack/lookup-by-path) | | [/libraries/module-minifier](./libraries/module-minifier/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Fmodule-minifier.svg)](https://badge.fury.io/js/%40rushstack%2Fmodule-minifier) | [changelog](./libraries/module-minifier/CHANGELOG.md) | [@rushstack/module-minifier](https://www.npmjs.com/package/@rushstack/module-minifier) | | [/libraries/node-core-library](./libraries/node-core-library/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Fnode-core-library.svg)](https://badge.fury.io/js/%40rushstack%2Fnode-core-library) | [changelog](./libraries/node-core-library/CHANGELOG.md) | [@rushstack/node-core-library](https://www.npmjs.com/package/@rushstack/node-core-library) | +| [/libraries/npm-check-fork](./libraries/npm-check-fork/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Fnpm-check-fork.svg)](https://badge.fury.io/js/%40rushstack%2Fnpm-check-fork) | [changelog](./libraries/npm-check-fork/CHANGELOG.md) | [@rushstack/npm-check-fork](https://www.npmjs.com/package/@rushstack/npm-check-fork) | | [/libraries/operation-graph](./libraries/operation-graph/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Foperation-graph.svg)](https://badge.fury.io/js/%40rushstack%2Foperation-graph) | [changelog](./libraries/operation-graph/CHANGELOG.md) | [@rushstack/operation-graph](https://www.npmjs.com/package/@rushstack/operation-graph) | | [/libraries/package-deps-hash](./libraries/package-deps-hash/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Fpackage-deps-hash.svg)](https://badge.fury.io/js/%40rushstack%2Fpackage-deps-hash) | [changelog](./libraries/package-deps-hash/CHANGELOG.md) | [@rushstack/package-deps-hash](https://www.npmjs.com/package/@rushstack/package-deps-hash) | | [/libraries/package-extractor](./libraries/package-extractor/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Fpackage-extractor.svg)](https://badge.fury.io/js/%40rushstack%2Fpackage-extractor) | [changelog](./libraries/package-extractor/CHANGELOG.md) | [@rushstack/package-extractor](https://www.npmjs.com/package/@rushstack/package-extractor) | @@ -187,6 +189,7 @@ These GitHub repositories provide supplementary resources for Rush Stack: | [/build-tests/heft-node-everything-test](./build-tests/heft-node-everything-test/) | Building this project tests every task and config file for Heft when targeting the Node.js runtime | | [/build-tests/heft-parameter-plugin](./build-tests/heft-parameter-plugin/) | This project contains a Heft plugin that adds a custom parameter to built-in actions | | [/build-tests/heft-parameter-plugin-test](./build-tests/heft-parameter-plugin-test/) | This project exercises a built-in Heft action with a custom parameter | +| [/build-tests/heft-rspack-everything-test](./build-tests/heft-rspack-everything-test/) | Building this project tests every task and config file for Heft when targeting the web browser runtime using Rspack | | [/build-tests/heft-sass-test](./build-tests/heft-sass-test/) | This project illustrates a minimal tutorial Heft project targeting the web browser runtime | | [/build-tests/heft-swc-test](./build-tests/heft-swc-test/) | Building this project tests building with SWC | | [/build-tests/heft-typescript-composite-test](./build-tests/heft-typescript-composite-test/) | Building this project tests behavior of Heft when the tsconfig.json file uses project references. | @@ -212,6 +215,7 @@ These GitHub repositories provide supplementary resources for Rush Stack: | [/build-tests/set-webpack-public-path-plugin-test](./build-tests/set-webpack-public-path-plugin-test/) | Building this project tests the set-webpack-public-path-plugin | | [/build-tests/webpack-local-version-test](./build-tests/webpack-local-version-test/) | Building this project tests the rig loading for the local version of webpack | | [/eslint/local-eslint-config](./eslint/local-eslint-config/) | An ESLint configuration consumed projects inside the rushstack repo. | +| [/heft-plugins/heft-rspack-plugin](./heft-plugins/heft-rspack-plugin/) | Heft plugin for Rspack | | [/libraries/rush-themed-ui](./libraries/rush-themed-ui/) | Rush Component Library: a set of themed components for rush projects | | [/libraries/rushell](./libraries/rushell/) | Execute shell commands using a consistent syntax on every platform | | [/repo-scripts/doc-plugin-rush-stack](./repo-scripts/doc-plugin-rush-stack/) | API Documenter plugin used with the rushstack.io website | diff --git a/apps/api-documenter/CHANGELOG.json b/apps/api-documenter/CHANGELOG.json index 807c7ecc63d..ef9635bce96 100644 --- a/apps/api-documenter/CHANGELOG.json +++ b/apps/api-documenter/CHANGELOG.json @@ -1,6 +1,86 @@ { "name": "@microsoft/api-documenter", "entries": [ + { + "version": "7.28.0", + "tag": "@microsoft/api-documenter_v7.28.0", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "minor": [ + { + "comment": "Bump the `@microsoft/tsdoc` dependency to `~0.16.0`." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor-model\" to `7.32.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "7.27.4", + "tag": "@microsoft/api-documenter_v7.27.4", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "7.27.3", + "tag": "@microsoft/api-documenter_v7.27.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor-model\" to `7.31.3`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "7.27.2", + "tag": "@microsoft/api-documenter_v7.27.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor-model\" to `7.31.2`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "7.27.1", "tag": "@microsoft/api-documenter_v7.27.1", diff --git a/apps/api-documenter/CHANGELOG.md b/apps/api-documenter/CHANGELOG.md index bea39173907..2549bff04af 100644 --- a/apps/api-documenter/CHANGELOG.md +++ b/apps/api-documenter/CHANGELOG.md @@ -1,6 +1,28 @@ # Change Log - @microsoft/api-documenter -This log was last generated on Wed, 08 Oct 2025 00:13:28 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 7.28.0 +Wed, 12 Nov 2025 01:12:56 GMT + +### Minor changes + +- Bump the `@microsoft/tsdoc` dependency to `~0.16.0`. + +## 7.27.4 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 7.27.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 7.27.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 7.27.1 Wed, 08 Oct 2025 00:13:28 GMT diff --git a/apps/api-documenter/config/heft.json b/apps/api-documenter/config/heft.json new file mode 100644 index 00000000000..b3046cad172 --- /dev/null +++ b/apps/api-documenter/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + "extends": "local-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/api-extractor/v7"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/apps/api-documenter/package.json b/apps/api-documenter/package.json index 614434d2fc9..af9b71ffac3 100644 --- a/apps/api-documenter/package.json +++ b/apps/api-documenter/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/api-documenter", - "version": "7.27.1", + "version": "7.28.0", "description": "Read JSON files from api-extractor, generate documentation pages", "repository": { "type": "git", @@ -21,7 +21,7 @@ "typings": "dist/rollup.d.ts", "dependencies": { "@microsoft/api-extractor-model": "workspace:*", - "@microsoft/tsdoc": "~0.15.1", + "@microsoft/tsdoc": "~0.16.0", "@rushstack/node-core-library": "workspace:*", "@rushstack/terminal": "workspace:*", "@rushstack/ts-command-line": "workspace:*", diff --git a/apps/api-extractor/CHANGELOG.json b/apps/api-extractor/CHANGELOG.json index 1435814962b..09bcc15b9e3 100644 --- a/apps/api-extractor/CHANGELOG.json +++ b/apps/api-extractor/CHANGELOG.json @@ -1,6 +1,83 @@ { "name": "@microsoft/api-extractor", "entries": [ + { + "version": "7.55.0", + "tag": "@microsoft/api-extractor_v7.55.0", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "minor": [ + { + "comment": "Bump the `@microsoft/tsdoc` dependency to `~0.16.0`." + }, + { + "comment": "Bump the `@microsoft/tsdoc-config` dependency to `~0.18.0`." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor-model\" to `7.32.0`" + } + ] + } + }, + { + "version": "7.54.0", + "tag": "@microsoft/api-extractor_v7.54.0", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "minor": [ + { + "comment": "Add a new setting `IExtractorInvokeOptions.printApiReportDiff` that makes build logs easier to diagnose by printing a diff of any changes to API report files (*.api.md)." + }, + { + "comment": "Add a `--print-api-report-diff` CLI flag that causes a diff of any changes to API report files (*.api.md) to be printed." + } + ] + } + }, + { + "version": "7.53.3", + "tag": "@microsoft/api-extractor_v7.53.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor-model\" to `7.31.3`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.3`" + } + ] + } + }, + { + "version": "7.53.2", + "tag": "@microsoft/api-extractor_v7.53.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor-model\" to `7.31.2`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.2`" + } + ] + } + }, { "version": "7.53.1", "tag": "@microsoft/api-extractor_v7.53.1", diff --git a/apps/api-extractor/CHANGELOG.md b/apps/api-extractor/CHANGELOG.md index 531c3b942e5..11973d5d356 100644 --- a/apps/api-extractor/CHANGELOG.md +++ b/apps/api-extractor/CHANGELOG.md @@ -1,6 +1,32 @@ # Change Log - @microsoft/api-extractor -This log was last generated on Wed, 08 Oct 2025 00:13:28 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 7.55.0 +Wed, 12 Nov 2025 01:12:56 GMT + +### Minor changes + +- Bump the `@microsoft/tsdoc` dependency to `~0.16.0`. +- Bump the `@microsoft/tsdoc-config` dependency to `~0.18.0`. + +## 7.54.0 +Tue, 04 Nov 2025 08:15:14 GMT + +### Minor changes + +- Add a new setting `IExtractorInvokeOptions.printApiReportDiff` that makes build logs easier to diagnose by printing a diff of any changes to API report files (*.api.md). +- Add a `--print-api-report-diff` CLI flag that causes a diff of any changes to API report files (*.api.md) to be printed. + +## 7.53.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 7.53.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 7.53.1 Wed, 08 Oct 2025 00:13:28 GMT diff --git a/apps/api-extractor/config/heft.json b/apps/api-extractor/config/heft.json index 0b965cec36a..a36ac2cf4c0 100644 --- a/apps/api-extractor/config/heft.json +++ b/apps/api-extractor/config/heft.json @@ -29,6 +29,23 @@ ] } } + }, + + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/api-extractor/v7"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } } } } diff --git a/apps/api-extractor/package.json b/apps/api-extractor/package.json index 7fa5f96944c..4e39facfee8 100644 --- a/apps/api-extractor/package.json +++ b/apps/api-extractor/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/api-extractor", - "version": "7.53.1", + "version": "7.55.0", "description": "Analyze the exported API for a TypeScript library and generate reviews, documentation, and .d.ts rollups", "keywords": [ "typescript", @@ -38,12 +38,13 @@ }, "dependencies": { "@microsoft/api-extractor-model": "workspace:*", - "@microsoft/tsdoc-config": "~0.17.1", - "@microsoft/tsdoc": "~0.15.1", + "@microsoft/tsdoc-config": "~0.18.0", + "@microsoft/tsdoc": "~0.16.0", "@rushstack/node-core-library": "workspace:*", "@rushstack/rig-package": "workspace:*", "@rushstack/terminal": "workspace:*", "@rushstack/ts-command-line": "workspace:*", + "diff": "~8.0.2", "lodash": "~4.17.15", "minimatch": "10.0.3", "resolve": "~1.22.1", @@ -52,7 +53,7 @@ "typescript": "5.8.2" }, "devDependencies": { - "@rushstack/heft": "1.1.0", + "@rushstack/heft": "1.1.4", "@types/lodash": "4.14.116", "@types/resolve": "1.20.2", "@types/semver": "7.5.0", diff --git a/apps/api-extractor/src/api/ConsoleMessageId.ts b/apps/api-extractor/src/api/ConsoleMessageId.ts index 8fa2d53decc..5d1345a2093 100644 --- a/apps/api-extractor/src/api/ConsoleMessageId.ts +++ b/apps/api-extractor/src/api/ConsoleMessageId.ts @@ -61,6 +61,12 @@ export enum ConsoleMessageId { */ ApiReportNotCopied = 'console-api-report-not-copied', + /** + * Changes to the API report: + * ___ + */ + ApiReportDiff = 'console-api-report-diff', + /** * "You have changed the public API signature for this project. Updating ___" */ diff --git a/apps/api-extractor/src/api/Extractor.ts b/apps/api-extractor/src/api/Extractor.ts index 9b204b02054..b48a323b094 100644 --- a/apps/api-extractor/src/api/Extractor.ts +++ b/apps/api-extractor/src/api/Extractor.ts @@ -11,7 +11,7 @@ import type { ApiPackage } from '@microsoft/api-extractor-model'; import { TSDocConfigFile } from '@microsoft/tsdoc-config'; import { FileSystem, - type NewlineKind, + NewlineKind, PackageJsonLookup, type IPackageJson, type INodePackageJson, @@ -91,6 +91,15 @@ export interface IExtractorInvokeOptions { * the STDERR/STDOUT console. */ messageCallback?: (message: ExtractorMessage) => void; + + /** + * If true, then any differences between the actual and expected API reports will be + * printed on the console. + * + * @remarks + * The diff is not printed if the expected API report file has not been created yet. + */ + printApiReportDiff?: boolean; } /** @@ -192,36 +201,52 @@ export class Extractor { * Invoke API Extractor using an already prepared `ExtractorConfig` object. */ public static invoke(extractorConfig: ExtractorConfig, options?: IExtractorInvokeOptions): ExtractorResult { - if (!options) { - options = {}; - } - - const localBuild: boolean = options.localBuild || false; - - let compilerState: CompilerState | undefined; - if (options.compilerState) { - compilerState = options.compilerState; - } else { - compilerState = CompilerState.create(extractorConfig, options); - } + const { + packageFolder, + messages, + tsdocConfiguration, + tsdocConfigFile: { filePath: tsdocConfigFilePath, fileNotFound: tsdocConfigFileNotFound }, + apiJsonFilePath, + newlineKind, + reportTempFolder, + reportFolder, + apiReportEnabled, + reportConfigs, + testMode, + rollupEnabled, + publicTrimmedFilePath, + alphaTrimmedFilePath, + betaTrimmedFilePath, + untrimmedFilePath, + tsdocMetadataEnabled, + tsdocMetadataFilePath + } = extractorConfig; + const { + localBuild = false, + compilerState = CompilerState.create(extractorConfig, options), + messageCallback, + showVerboseMessages = false, + showDiagnostics = false, + printApiReportDiff = false + } = options ?? {}; const sourceMapper: SourceMapper = new SourceMapper(); const messageRouter: MessageRouter = new MessageRouter({ - workingPackageFolder: extractorConfig.packageFolder, - messageCallback: options.messageCallback, - messagesConfig: extractorConfig.messages || {}, - showVerboseMessages: !!options.showVerboseMessages, - showDiagnostics: !!options.showDiagnostics, - tsdocConfiguration: extractorConfig.tsdocConfiguration, + workingPackageFolder: packageFolder, + messageCallback, + messagesConfig: messages || {}, + showVerboseMessages, + showDiagnostics, + tsdocConfiguration, sourceMapper }); - if (extractorConfig.tsdocConfigFile.filePath && !extractorConfig.tsdocConfigFile.fileNotFound) { - if (!Path.isEqual(extractorConfig.tsdocConfigFile.filePath, ExtractorConfig._tsdocBaseFilePath)) { + if (tsdocConfigFilePath && !tsdocConfigFileNotFound) { + if (!Path.isEqual(tsdocConfigFilePath, ExtractorConfig._tsdocBaseFilePath)) { messageRouter.logVerbose( ConsoleMessageId.UsingCustomTSDocConfig, - 'Using custom TSDoc config from ' + extractorConfig.tsdocConfigFile.filePath + `Using custom TSDoc config from ${tsdocConfigFilePath}` ); } } @@ -243,9 +268,7 @@ export class Extractor { messageRouter.logDiagnosticHeader('TSDoc configuration'); // Convert the TSDocConfiguration into a tsdoc.json representation - const combinedConfigFile: TSDocConfigFile = TSDocConfigFile.loadFromParser( - extractorConfig.tsdocConfiguration - ); + const combinedConfigFile: TSDocConfigFile = TSDocConfigFile.loadFromParser(tsdocConfiguration); const serializedTSDocConfig: object = MessageRouter.buildJsonDumpObject( combinedConfigFile.saveToObject() ); @@ -273,17 +296,14 @@ export class Extractor { } if (modelBuilder.docModelEnabled) { - messageRouter.logVerbose( - ConsoleMessageId.WritingDocModelFile, - 'Writing: ' + extractorConfig.apiJsonFilePath - ); - apiPackage.saveToJsonFile(extractorConfig.apiJsonFilePath, { + messageRouter.logVerbose(ConsoleMessageId.WritingDocModelFile, `Writing: ${apiJsonFilePath}`); + apiPackage.saveToJsonFile(apiJsonFilePath, { toolPackage: Extractor.packageName, toolVersion: Extractor.version, - newlineConversion: extractorConfig.newlineKind, + newlineConversion: newlineKind, ensureFolderExists: true, - testMode: extractorConfig.testMode + testMode }); } @@ -292,53 +312,51 @@ export class Extractor { collector, extractorConfig, messageRouter, - extractorConfig.reportTempFolder, - extractorConfig.reportFolder, + reportTempFolder, + reportFolder, reportConfig, - localBuild + localBuild, + printApiReportDiff ); } let anyReportChanged: boolean = false; - if (extractorConfig.apiReportEnabled) { - for (const reportConfig of extractorConfig.reportConfigs) { + if (apiReportEnabled) { + for (const reportConfig of reportConfigs) { anyReportChanged = writeApiReport(reportConfig) || anyReportChanged; } } - if (extractorConfig.rollupEnabled) { + if (rollupEnabled) { Extractor._generateRollupDtsFile( collector, - extractorConfig.publicTrimmedFilePath, + publicTrimmedFilePath, DtsRollupKind.PublicRelease, - extractorConfig.newlineKind + newlineKind ); Extractor._generateRollupDtsFile( collector, - extractorConfig.alphaTrimmedFilePath, + alphaTrimmedFilePath, DtsRollupKind.AlphaRelease, - extractorConfig.newlineKind + newlineKind ); Extractor._generateRollupDtsFile( collector, - extractorConfig.betaTrimmedFilePath, + betaTrimmedFilePath, DtsRollupKind.BetaRelease, - extractorConfig.newlineKind + newlineKind ); Extractor._generateRollupDtsFile( collector, - extractorConfig.untrimmedFilePath, + untrimmedFilePath, DtsRollupKind.InternalRelease, - extractorConfig.newlineKind + newlineKind ); } - if (extractorConfig.tsdocMetadataEnabled) { + if (tsdocMetadataEnabled) { // Write the tsdoc-metadata.json file for this project - PackageMetadataManager.writeTsdocMetadataFile( - extractorConfig.tsdocMetadataFilePath, - extractorConfig.newlineKind - ); + PackageMetadataManager.writeTsdocMetadataFile(tsdocMetadataFilePath, newlineKind); } // Show all the messages that we collected during analysis @@ -373,6 +391,7 @@ export class Extractor { * @param reportDirectoryPath - The path to the directory under which the existing report file is located, and to * which the new report will be written post-comparison. * @param reportConfig - API report configuration, including its file name and {@link ApiReportVariant}. + * @param printApiReportDiff - {@link IExtractorInvokeOptions.printApiReportDiff} * * @returns Whether or not the newly generated report differs from the existing report (if one exists). */ @@ -383,7 +402,8 @@ export class Extractor { reportTempDirectoryPath: string, reportDirectoryPath: string, reportConfig: IExtractorConfigApiReport, - localBuild: boolean + localBuild: boolean, + printApiReportDiff: boolean ): boolean { let apiReportChanged: boolean = false; @@ -411,7 +431,9 @@ export class Extractor { // Compare it against the expected file if (FileSystem.exists(expectedApiReportPath)) { - const expectedApiReportContent: string = FileSystem.readFile(expectedApiReportPath); + const expectedApiReportContent: string = FileSystem.readFile(expectedApiReportPath, { + convertLineEndings: NewlineKind.Lf + }); if ( !ApiReportGenerator.areEquivalentApiFileContents(actualApiReportContent, expectedApiReportContent) @@ -439,6 +461,26 @@ export class Extractor { convertLineEndings: extractorConfig.newlineKind }); } + + if (messageRouter.showVerboseMessages || printApiReportDiff) { + const Diff: typeof import('diff') = require('diff'); + const patch: import('diff').StructuredPatch = Diff.structuredPatch( + expectedApiReportShortPath, + actualApiReportShortPath, + expectedApiReportContent, + actualApiReportContent + ); + const logFunction: + | (typeof MessageRouter.prototype)['logWarning'] + | (typeof MessageRouter.prototype)['logVerbose'] = printApiReportDiff + ? messageRouter.logWarning.bind(messageRouter) + : messageRouter.logVerbose.bind(messageRouter); + + logFunction( + ConsoleMessageId.ApiReportDiff, + 'Changes to the API report:\n\n' + Diff.formatPatch(patch) + ); + } } else { messageRouter.logVerbose( ConsoleMessageId.ApiReportUnchanged, diff --git a/apps/api-extractor/src/cli/RunAction.ts b/apps/api-extractor/src/cli/RunAction.ts index 6eeb0cb17ee..d0e60bb9326 100644 --- a/apps/api-extractor/src/cli/RunAction.ts +++ b/apps/api-extractor/src/cli/RunAction.ts @@ -24,10 +24,11 @@ import { ExtractorConfig, type IExtractorConfigPrepareOptions } from '../api/Ext export class RunAction extends CommandLineAction { private readonly _configFileParameter: CommandLineStringParameter; - private readonly _localParameter: CommandLineFlagParameter; - private readonly _verboseParameter: CommandLineFlagParameter; + private readonly _localFlag: CommandLineFlagParameter; + private readonly _verboseFlag: CommandLineFlagParameter; private readonly _diagnosticsParameter: CommandLineFlagParameter; - private readonly _typescriptCompilerFolder: CommandLineStringParameter; + private readonly _typescriptCompilerFolderParameter: CommandLineStringParameter; + private readonly _printApiReportDiffFlag: CommandLineFlagParameter; public constructor(parser: ApiExtractorCommandLine) { super({ @@ -43,7 +44,7 @@ export class RunAction extends CommandLineAction { description: `Use the specified ${ExtractorConfig.FILENAME} file path, rather than guessing its location` }); - this._localParameter = this.defineFlagParameter({ + this._localFlag = this.defineFlagParameter({ parameterLongName: '--local', parameterShortName: '-l', description: @@ -53,7 +54,7 @@ export class RunAction extends CommandLineAction { ' report file is automatically copied in a local build.' }); - this._verboseParameter = this.defineFlagParameter({ + this._verboseFlag = this.defineFlagParameter({ parameterLongName: '--verbose', parameterShortName: '-v', description: 'Show additional informational messages in the output.' @@ -66,7 +67,7 @@ export class RunAction extends CommandLineAction { ' This flag also enables the "--verbose" flag.' }); - this._typescriptCompilerFolder = this.defineStringParameter({ + this._typescriptCompilerFolderParameter = this.defineStringParameter({ parameterLongName: '--typescript-compiler-folder', argumentName: 'PATH', description: @@ -76,13 +77,21 @@ export class RunAction extends CommandLineAction { ' "--typescriptCompilerFolder" option to specify the folder path where you installed the TypeScript package,' + " and API Extractor's compiler will use those system typings instead." }); + + this._printApiReportDiffFlag = this.defineFlagParameter({ + parameterLongName: '--print-api-report-diff', + description: + 'If provided, then any differences between the actual and expected API reports will be ' + + 'printed on the console. Note that the diff is not printed if the expected API report file has not been ' + + 'created yet.' + }); } protected override async onExecuteAsync(): Promise { const lookup: PackageJsonLookup = new PackageJsonLookup(); let configFilename: string; - let typescriptCompilerFolder: string | undefined = this._typescriptCompilerFolder.value; + let typescriptCompilerFolder: string | undefined = this._typescriptCompilerFolderParameter.value; if (typescriptCompilerFolder) { typescriptCompilerFolder = path.normalize(typescriptCompilerFolder); @@ -93,17 +102,17 @@ export class RunAction extends CommandLineAction { : undefined; if (!typescriptCompilerPackageJson) { throw new Error( - `The path specified in the ${this._typescriptCompilerFolder.longName} parameter is not a package.` + `The path specified in the ${this._typescriptCompilerFolderParameter.longName} parameter is not a package.` ); } else if (typescriptCompilerPackageJson.name !== 'typescript') { throw new Error( - `The path specified in the ${this._typescriptCompilerFolder.longName} parameter is not a TypeScript` + + `The path specified in the ${this._typescriptCompilerFolderParameter.longName} parameter is not a TypeScript` + ' compiler package.' ); } } else { throw new Error( - `The path specified in the ${this._typescriptCompilerFolder.longName} parameter does not exist.` + `The path specified in the ${this._typescriptCompilerFolderParameter.longName} parameter does not exist.` ); } } @@ -136,10 +145,11 @@ export class RunAction extends CommandLineAction { } const extractorResult: ExtractorResult = Extractor.invoke(extractorConfig, { - localBuild: this._localParameter.value, - showVerboseMessages: this._verboseParameter.value, + localBuild: this._localFlag.value, + showVerboseMessages: this._verboseFlag.value, showDiagnostics: this._diagnosticsParameter.value, - typescriptCompilerFolder: typescriptCompilerFolder + typescriptCompilerFolder: typescriptCompilerFolder, + printApiReportDiff: this._printApiReportDiffFlag.value }); if (extractorResult.succeeded) { diff --git a/apps/api-extractor/src/collector/MessageRouter.ts b/apps/api-extractor/src/collector/MessageRouter.ts index d97742b4b06..bc09397c084 100644 --- a/apps/api-extractor/src/collector/MessageRouter.ts +++ b/apps/api-extractor/src/collector/MessageRouter.ts @@ -422,7 +422,7 @@ export class MessageRouter { /** * This returns all remaining messages that were flagged with `addToApiReportFile`, but which were not - * retreieved using `fetchAssociatedMessagesForReviewFile()`. + * retrieved using `fetchAssociatedMessagesForReviewFile()`. */ public fetchUnassociatedMessagesForReviewFile(): ExtractorMessage[] { const messagesForApiReportFile: ExtractorMessage[] = []; diff --git a/apps/cpu-profile-summarizer/CHANGELOG.json b/apps/cpu-profile-summarizer/CHANGELOG.json index 0cdbace8ace..31618b6dc54 100644 --- a/apps/cpu-profile-summarizer/CHANGELOG.json +++ b/apps/cpu-profile-summarizer/CHANGELOG.json @@ -1,6 +1,72 @@ { "name": "@rushstack/cpu-profile-summarizer", "entries": [ + { + "version": "0.1.34", + "tag": "@rushstack/cpu-profile-summarizer_v0.1.34", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/worker-pool\" to `0.6.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.1.33", + "tag": "@rushstack/cpu-profile-summarizer_v0.1.33", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/worker-pool\" to `0.6.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.1.32", + "tag": "@rushstack/cpu-profile-summarizer_v0.1.32", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/worker-pool\" to `0.6.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.1.31", + "tag": "@rushstack/cpu-profile-summarizer_v0.1.31", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/worker-pool\" to `0.6.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "0.1.30", "tag": "@rushstack/cpu-profile-summarizer_v0.1.30", diff --git a/apps/cpu-profile-summarizer/CHANGELOG.md b/apps/cpu-profile-summarizer/CHANGELOG.md index ee1b40d06ce..be4e972cba1 100644 --- a/apps/cpu-profile-summarizer/CHANGELOG.md +++ b/apps/cpu-profile-summarizer/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/cpu-profile-summarizer -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.1.34 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.1.33 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 0.1.32 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.1.31 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.1.30 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/apps/cpu-profile-summarizer/package.json b/apps/cpu-profile-summarizer/package.json index 5f80c315578..4bfc01c7de2 100644 --- a/apps/cpu-profile-summarizer/package.json +++ b/apps/cpu-profile-summarizer/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/cpu-profile-summarizer", - "version": "0.1.30", + "version": "0.1.34", "description": "CLI tool for running analytics on multiple V8 .cpuprofile files", "repository": { "type": "git", diff --git a/apps/heft/CHANGELOG.json b/apps/heft/CHANGELOG.json index aa528c52e04..6d1b793d72f 100644 --- a/apps/heft/CHANGELOG.json +++ b/apps/heft/CHANGELOG.json @@ -1,6 +1,84 @@ { "name": "@rushstack/heft", "entries": [ + { + "version": "1.1.5", + "tag": "@rushstack/heft_v1.1.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.55.0`" + } + ] + } + }, + { + "version": "1.1.4", + "tag": "@rushstack/heft_v1.1.4", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.54.0`" + } + ] + } + }, + { + "version": "1.1.3", + "tag": "@rushstack/heft_v1.1.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-config-file\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/operation-graph\" to `0.5.3`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.3`" + }, + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.53.3`" + } + ] + } + }, + { + "version": "1.1.2", + "tag": "@rushstack/heft_v1.1.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-config-file\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/operation-graph\" to `0.5.2`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.2`" + }, + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.53.2`" + } + ] + } + }, { "version": "1.1.1", "tag": "@rushstack/heft_v1.1.1", diff --git a/apps/heft/CHANGELOG.md b/apps/heft/CHANGELOG.md index 9242ae86e93..a1373d26a2f 100644 --- a/apps/heft/CHANGELOG.md +++ b/apps/heft/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/heft -This log was last generated on Wed, 08 Oct 2025 00:13:28 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.1.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.1.4 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 1.1.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.1.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 1.1.1 Wed, 08 Oct 2025 00:13:28 GMT diff --git a/apps/heft/config/heft.json b/apps/heft/config/heft.json new file mode 100644 index 00000000000..8d1359f022f --- /dev/null +++ b/apps/heft/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + "extends": "decoupled-local-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/heft/v1"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/apps/heft/package.json b/apps/heft/package.json index 4a6c6ff92bc..9dc63ada918 100644 --- a/apps/heft/package.json +++ b/apps/heft/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft", - "version": "1.1.1", + "version": "1.1.5", "description": "Build all your JavaScript projects the same way: A way that works.", "keywords": [ "toolchain", @@ -49,7 +49,7 @@ }, "devDependencies": { "@microsoft/api-extractor": "workspace:*", - "@rushstack/heft": "1.1.0", + "@rushstack/heft": "1.1.4", "@types/watchpack": "2.4.0", "decoupled-local-node-rig": "workspace:*", "eslint": "~9.37.0" diff --git a/apps/lockfile-explorer/CHANGELOG.json b/apps/lockfile-explorer/CHANGELOG.json index 8156d04f996..20d6e1a8a18 100644 --- a/apps/lockfile-explorer/CHANGELOG.json +++ b/apps/lockfile-explorer/CHANGELOG.json @@ -1,6 +1,72 @@ { "name": "@rushstack/lockfile-explorer", "entries": [ + { + "version": "2.0.6", + "tag": "@rushstack/lockfile-explorer_v2.0.6", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "2.0.5", + "tag": "@rushstack/lockfile-explorer_v2.0.5", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "2.0.4", + "tag": "@rushstack/lockfile-explorer_v2.0.4", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "2.0.3", + "tag": "@rushstack/lockfile-explorer_v2.0.3", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "2.0.2", "tag": "@rushstack/lockfile-explorer_v2.0.2", diff --git a/apps/lockfile-explorer/CHANGELOG.md b/apps/lockfile-explorer/CHANGELOG.md index c7ace8ca533..641ecf9cfd5 100644 --- a/apps/lockfile-explorer/CHANGELOG.md +++ b/apps/lockfile-explorer/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/lockfile-explorer -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 2.0.6 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 2.0.5 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 2.0.4 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 2.0.3 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 2.0.2 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/apps/lockfile-explorer/config/heft.json b/apps/lockfile-explorer/config/heft.json index 6664d95480c..ca7a8305599 100644 --- a/apps/lockfile-explorer/config/heft.json +++ b/apps/lockfile-explorer/config/heft.json @@ -58,9 +58,27 @@ } } }, + "typescript": { // The "typescript" task should not run until after "pre-compile-copy" completes. "taskDependencies": ["pre-compile-copy"] + }, + + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/lockfile-explorer"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } } } } diff --git a/apps/lockfile-explorer/package.json b/apps/lockfile-explorer/package.json index 6002f83274b..888054177e2 100644 --- a/apps/lockfile-explorer/package.json +++ b/apps/lockfile-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/lockfile-explorer", - "version": "2.0.2", + "version": "2.0.6", "description": "Rush Lockfile Explorer: The UI for solving version conflicts quickly in a large monorepo", "keywords": [ "conflict", diff --git a/apps/rundown/CHANGELOG.json b/apps/rundown/CHANGELOG.json index cb8d97ef2fa..7c6d0d14943 100644 --- a/apps/rundown/CHANGELOG.json +++ b/apps/rundown/CHANGELOG.json @@ -1,6 +1,66 @@ { "name": "@rushstack/rundown", "entries": [ + { + "version": "1.2.5", + "tag": "@rushstack/rundown_v1.2.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "1.2.4", + "tag": "@rushstack/rundown_v1.2.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "1.2.3", + "tag": "@rushstack/rundown_v1.2.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "1.2.2", + "tag": "@rushstack/rundown_v1.2.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "1.2.1", "tag": "@rushstack/rundown_v1.2.1", diff --git a/apps/rundown/CHANGELOG.md b/apps/rundown/CHANGELOG.md index 3c2ce1e6489..c6dc13fb836 100644 --- a/apps/rundown/CHANGELOG.md +++ b/apps/rundown/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/rundown -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.2.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.2.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 1.2.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.2.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 1.2.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/apps/rundown/package.json b/apps/rundown/package.json index 7f2e807c159..c69de225287 100644 --- a/apps/rundown/package.json +++ b/apps/rundown/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/rundown", - "version": "1.2.1", + "version": "1.2.5", "description": "Detect load time regressions by running an app, tracing require() calls, and generating a deterministic report", "repository": { "type": "git", diff --git a/apps/rush-mcp-server/CHANGELOG.json b/apps/rush-mcp-server/CHANGELOG.json index c8386507fdb..0c2a05438f3 100644 --- a/apps/rush-mcp-server/CHANGELOG.json +++ b/apps/rush-mcp-server/CHANGELOG.json @@ -1,6 +1,72 @@ { "name": "@rushstack/mcp-server", "entries": [ + { + "version": "0.3.5", + "tag": "@rushstack/mcp-server_v0.3.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.3.4", + "tag": "@rushstack/mcp-server_v0.3.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.3.3", + "tag": "@rushstack/mcp-server_v0.3.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.3.2", + "tag": "@rushstack/mcp-server_v0.3.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "0.3.1", "tag": "@rushstack/mcp-server_v0.3.1", diff --git a/apps/rush-mcp-server/CHANGELOG.md b/apps/rush-mcp-server/CHANGELOG.md index f91f15162b6..4b22a099e48 100644 --- a/apps/rush-mcp-server/CHANGELOG.md +++ b/apps/rush-mcp-server/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/mcp-server -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.3.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.3.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.3.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.3.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.3.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/apps/rush-mcp-server/package.json b/apps/rush-mcp-server/package.json index 79dc6231783..3df82b36013 100644 --- a/apps/rush-mcp-server/package.json +++ b/apps/rush-mcp-server/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/mcp-server", - "version": "0.3.1", + "version": "0.3.5", "description": "A Model Context Protocol server implementation for Rush", "keywords": [ "rush", diff --git a/apps/rush-mcp-server/src/utilities/common.ts b/apps/rush-mcp-server/src/utilities/common.ts index 7709416d1c9..7478d6a5281 100644 --- a/apps/rush-mcp-server/src/utilities/common.ts +++ b/apps/rush-mcp-server/src/utilities/common.ts @@ -1,13 +1,12 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -import type * as RushLib from '@rushstack/rush-sdk'; import type { RushConfiguration } from '@rushstack/rush-sdk'; export const getRushConfiguration = async (): Promise => { // Since the MCP server is not always started from the directory of the Rush monorepo, // it’s necessary to use dynamic import to load the Rush SDK. - const Rush: typeof RushLib = await import('@rushstack/rush-sdk'); + const Rush: typeof import('@rushstack/rush-sdk') = await import('@rushstack/rush-sdk'); const rushConfiguration: RushConfiguration = Rush.RushConfiguration.loadFromDefaultLocation(); return rushConfiguration; }; diff --git a/apps/rush/CHANGELOG.json b/apps/rush/CHANGELOG.json index 089a99b5da1..55918b54a88 100644 --- a/apps/rush/CHANGELOG.json +++ b/apps/rush/CHANGELOG.json @@ -1,6 +1,42 @@ { "name": "@microsoft/rush", "entries": [ + { + "version": "5.162.0", + "tag": "@microsoft/rush_v5.162.0", + "date": "Sat, 18 Oct 2025 00:06:36 GMT", + "comments": { + "none": [ + { + "comment": "Fork npm-check to address npm audit CVE" + } + ] + } + }, + { + "version": "5.161.0", + "tag": "@microsoft/rush_v5.161.0", + "date": "Fri, 17 Oct 2025 23:22:50 GMT", + "comments": { + "none": [ + { + "comment": "Add an `allowOversubscription` option to the command definitions in `common/config/rush/command-line.json` to prevent running tasks from exceeding concurrency." + }, + { + "comment": "Add support for PNPM's minimumReleaseAge setting to help mitigate supply chain attacks" + }, + { + "comment": "Enable prerelease version matching in bridge-package command" + }, + { + "comment": "Fix an issue where `rush add --make-consistent ...` may drop the `implicitlyPreferredVersions` and `ensureConsistentVersions` properties from `common/config/rush/common-versions.json`." + }, + { + "comment": "Treat intermittent ignored redis errors as warnings and allow build to continue." + } + ] + } + }, { "version": "5.160.1", "tag": "@microsoft/rush_v5.160.1", diff --git a/apps/rush/CHANGELOG.md b/apps/rush/CHANGELOG.md index 102c5798979..f53899a0b45 100644 --- a/apps/rush/CHANGELOG.md +++ b/apps/rush/CHANGELOG.md @@ -1,6 +1,24 @@ # Change Log - @microsoft/rush -This log was last generated on Fri, 03 Oct 2025 22:25:25 GMT and should not be manually modified. +This log was last generated on Sat, 18 Oct 2025 00:06:36 GMT and should not be manually modified. + +## 5.162.0 +Sat, 18 Oct 2025 00:06:36 GMT + +### Updates + +- Fork npm-check to address npm audit CVE + +## 5.161.0 +Fri, 17 Oct 2025 23:22:50 GMT + +### Updates + +- Add an `allowOversubscription` option to the command definitions in `common/config/rush/command-line.json` to prevent running tasks from exceeding concurrency. +- Add support for PNPM's minimumReleaseAge setting to help mitigate supply chain attacks +- Enable prerelease version matching in bridge-package command +- Fix an issue where `rush add --make-consistent ...` may drop the `implicitlyPreferredVersions` and `ensureConsistentVersions` properties from `common/config/rush/common-versions.json`. +- Treat intermittent ignored redis errors as warnings and allow build to continue. ## 5.160.1 Fri, 03 Oct 2025 22:25:25 GMT diff --git a/apps/rush/package.json b/apps/rush/package.json index 5d3bdc218c7..efd2457e389 100644 --- a/apps/rush/package.json +++ b/apps/rush/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/rush", - "version": "5.160.1", + "version": "5.162.0", "description": "A professional solution for consolidating all your JavaScript projects in one Git repo", "keywords": [ "install", diff --git a/apps/trace-import/CHANGELOG.json b/apps/trace-import/CHANGELOG.json index 24b427f3f25..634e8ee0333 100644 --- a/apps/trace-import/CHANGELOG.json +++ b/apps/trace-import/CHANGELOG.json @@ -1,6 +1,72 @@ { "name": "@rushstack/trace-import", "entries": [ + { + "version": "0.6.5", + "tag": "@rushstack/trace-import_v0.6.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.6.4", + "tag": "@rushstack/trace-import_v0.6.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.6.3", + "tag": "@rushstack/trace-import_v0.6.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.6.2", + "tag": "@rushstack/trace-import_v0.6.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "0.6.1", "tag": "@rushstack/trace-import_v0.6.1", diff --git a/apps/trace-import/CHANGELOG.md b/apps/trace-import/CHANGELOG.md index 60753a84d1e..e32eb1f9e8e 100644 --- a/apps/trace-import/CHANGELOG.md +++ b/apps/trace-import/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/trace-import -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.6.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.6.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.6.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.6.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.6.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/apps/trace-import/package.json b/apps/trace-import/package.json index 0e8144c59f6..225de69a6e6 100644 --- a/apps/trace-import/package.json +++ b/apps/trace-import/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/trace-import", - "version": "0.6.1", + "version": "0.6.5", "description": "CLI tool for understanding how require() and \"import\" statements get resolved", "repository": { "type": "git", diff --git a/apps/zipsync/CHANGELOG.json b/apps/zipsync/CHANGELOG.json index b6922002f8b..fa2130f0f13 100644 --- a/apps/zipsync/CHANGELOG.json +++ b/apps/zipsync/CHANGELOG.json @@ -1,6 +1,78 @@ { "name": "@rushstack/zipsync", "entries": [ + { + "version": "0.2.5", + "tag": "@rushstack/zipsync_v0.2.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/lookup-by-path\" to `0.8.7`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.2.4", + "tag": "@rushstack/zipsync_v0.2.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/lookup-by-path\" to `0.8.6`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.2.3", + "tag": "@rushstack/zipsync_v0.2.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/lookup-by-path\" to `0.8.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.2.2", + "tag": "@rushstack/zipsync_v0.2.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/lookup-by-path\" to `0.8.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "0.2.1", "tag": "@rushstack/zipsync_v0.2.1", diff --git a/apps/zipsync/CHANGELOG.md b/apps/zipsync/CHANGELOG.md index 616d10d8371..b23c06808e8 100644 --- a/apps/zipsync/CHANGELOG.md +++ b/apps/zipsync/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/zipsync -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.2.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.2.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.2.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.2.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.2.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/apps/zipsync/package.json b/apps/zipsync/package.json index b3a305f53d1..668645b4bf3 100644 --- a/apps/zipsync/package.json +++ b/apps/zipsync/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/zipsync", - "version": "0.2.1", + "version": "0.2.5", "description": "CLI tool for creating and extracting ZIP archives with intelligent filesystem synchronization", "repository": { "type": "git", diff --git a/build-tests-samples/heft-storybook-react-tutorial/webpack.config.js b/build-tests-samples/heft-storybook-react-tutorial/webpack.config.js index 74788cd1048..e509592fe18 100644 --- a/build-tests-samples/heft-storybook-react-tutorial/webpack.config.js +++ b/build-tests-samples/heft-storybook-react-tutorial/webpack.config.js @@ -13,7 +13,7 @@ function createWebpackConfig({ production }) { // Documentation: https://webpack.js.org/configuration/mode/ mode: production ? 'production' : 'development', resolve: { - extensions: ['.js', '.jsx', '.json'] + extensions: ['.js', '.json'] }, module: { rules: [ diff --git a/build-tests-samples/heft-webpack-basic-tutorial/webpack.config.js b/build-tests-samples/heft-webpack-basic-tutorial/webpack.config.js index c6a4c30ea7d..683afc0cc96 100644 --- a/build-tests-samples/heft-webpack-basic-tutorial/webpack.config.js +++ b/build-tests-samples/heft-webpack-basic-tutorial/webpack.config.js @@ -12,7 +12,7 @@ function createWebpackConfig({ production }) { // Documentation: https://webpack.js.org/configuration/mode/ mode: production ? 'production' : 'development', resolve: { - extensions: ['.js', '.jsx', '.json'] + extensions: ['.js', '.json'] }, module: { rules: [ diff --git a/build-tests/api-documenter-scenarios/etc/inheritedMembers/api-documenter-scenarios.api.json b/build-tests/api-documenter-scenarios/etc/inheritedMembers/api-documenter-scenarios.api.json index 372fac3f034..58f0d98c22b 100644 --- a/build-tests/api-documenter-scenarios/etc/inheritedMembers/api-documenter-scenarios.api.json +++ b/build-tests/api-documenter-scenarios/etc/inheritedMembers/api-documenter-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/ambientNameConflict/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/ambientNameConflict/api-extractor-scenarios.api.json index 0697715d9d5..174025c1db3 100644 --- a/build-tests/api-extractor-scenarios/etc/ambientNameConflict/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/ambientNameConflict/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/ambientNameConflict2/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/ambientNameConflict2/api-extractor-scenarios.api.json index d0e3d0c7980..d949bb58ab1 100644 --- a/build-tests/api-extractor-scenarios/etc/ambientNameConflict2/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/ambientNameConflict2/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/ancillaryDeclarations/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/ancillaryDeclarations/api-extractor-scenarios.api.json index 8eda7baa8a6..6d63ae3142c 100644 --- a/build-tests/api-extractor-scenarios/etc/ancillaryDeclarations/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/ancillaryDeclarations/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/apiItemKinds/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/apiItemKinds/api-extractor-scenarios.api.json index 64b88b41b1e..c22e4d5b525 100644 --- a/build-tests/api-extractor-scenarios/etc/apiItemKinds/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/apiItemKinds/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/bundledPackages/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/bundledPackages/api-extractor-scenarios.api.json index 142710c8ef2..89ee7044200 100644 --- a/build-tests/api-extractor-scenarios/etc/bundledPackages/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/bundledPackages/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/bundlerModuleResolution/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/bundlerModuleResolution/api-extractor-scenarios.api.json index 792380c3cb6..440de9656ff 100644 --- a/build-tests/api-extractor-scenarios/etc/bundlerModuleResolution/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/bundlerModuleResolution/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/circularImport/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/circularImport/api-extractor-scenarios.api.json index d4f99324946..11072d35f10 100644 --- a/build-tests/api-extractor-scenarios/etc/circularImport/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/circularImport/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/circularImport2/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/circularImport2/api-extractor-scenarios.api.json index 2af5ea9bb31..4b4d33f465e 100644 --- a/build-tests/api-extractor-scenarios/etc/circularImport2/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/circularImport2/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/defaultExportOfEntryPoint/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/defaultExportOfEntryPoint/api-extractor-scenarios.api.json index ddc7e3f6556..c3376538caa 100644 --- a/build-tests/api-extractor-scenarios/etc/defaultExportOfEntryPoint/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/defaultExportOfEntryPoint/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/defaultExportOfEntryPoint2/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/defaultExportOfEntryPoint2/api-extractor-scenarios.api.json index b09660a4142..f6652971c0a 100644 --- a/build-tests/api-extractor-scenarios/etc/defaultExportOfEntryPoint2/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/defaultExportOfEntryPoint2/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/defaultExportOfEntryPoint3/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/defaultExportOfEntryPoint3/api-extractor-scenarios.api.json index 35ffd2ab980..7ca2d175a65 100644 --- a/build-tests/api-extractor-scenarios/etc/defaultExportOfEntryPoint3/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/defaultExportOfEntryPoint3/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/defaultExportOfEntryPoint4/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/defaultExportOfEntryPoint4/api-extractor-scenarios.api.json index 5cdb5ae7e93..be718ee63d0 100644 --- a/build-tests/api-extractor-scenarios/etc/defaultExportOfEntryPoint4/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/defaultExportOfEntryPoint4/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/docReferences/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/docReferences/api-extractor-scenarios.api.json index fa4fdb7faba..5f21c8220c2 100644 --- a/build-tests/api-extractor-scenarios/etc/docReferences/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/docReferences/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/docReferences2/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/docReferences2/api-extractor-scenarios.api.json index 89801701c03..1e5b18c2e4a 100644 --- a/build-tests/api-extractor-scenarios/etc/docReferences2/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/docReferences2/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/docReferences3/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/docReferences3/api-extractor-scenarios.api.json index f6bdf6840ed..132c1188dc0 100644 --- a/build-tests/api-extractor-scenarios/etc/docReferences3/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/docReferences3/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/docReferencesAlias/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/docReferencesAlias/api-extractor-scenarios.api.json index 0e10f085184..9c65d23e2d6 100644 --- a/build-tests/api-extractor-scenarios/etc/docReferencesAlias/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/docReferencesAlias/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/docReferencesNamespaceAlias/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/docReferencesNamespaceAlias/api-extractor-scenarios.api.json index 4bf60a5d307..aa38a67cebf 100644 --- a/build-tests/api-extractor-scenarios/etc/docReferencesNamespaceAlias/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/docReferencesNamespaceAlias/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/dynamicImportType/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/dynamicImportType/api-extractor-scenarios.api.json index 3a7783606e3..f9ae5ecf136 100644 --- a/build-tests/api-extractor-scenarios/etc/dynamicImportType/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/dynamicImportType/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/dynamicImportType2/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/dynamicImportType2/api-extractor-scenarios.api.json index b7a2b150998..206970f232e 100644 --- a/build-tests/api-extractor-scenarios/etc/dynamicImportType2/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/dynamicImportType2/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/dynamicImportType3/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/dynamicImportType3/api-extractor-scenarios.api.json index 45d2df5805b..08d82bdea53 100644 --- a/build-tests/api-extractor-scenarios/etc/dynamicImportType3/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/dynamicImportType3/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/ecmaScriptPrivateFields/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/ecmaScriptPrivateFields/api-extractor-scenarios.api.json index 623949f6883..7c85d11223b 100644 --- a/build-tests/api-extractor-scenarios/etc/ecmaScriptPrivateFields/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/ecmaScriptPrivateFields/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/enumSorting/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/enumSorting/api-extractor-scenarios.api.json index e5c18346cba..021c6a99b03 100644 --- a/build-tests/api-extractor-scenarios/etc/enumSorting/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/enumSorting/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/excerptTokens/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/excerptTokens/api-extractor-scenarios.api.json index a79d24c516d..7a086bfd599 100644 --- a/build-tests/api-extractor-scenarios/etc/excerptTokens/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/excerptTokens/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/exportDuplicate/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/exportDuplicate/api-extractor-scenarios.api.json index f4ca40c849b..af560e6437e 100644 --- a/build-tests/api-extractor-scenarios/etc/exportDuplicate/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/exportDuplicate/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/exportEquals/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/exportEquals/api-extractor-scenarios.api.json index 14e0e241335..2af67bcc3e2 100644 --- a/build-tests/api-extractor-scenarios/etc/exportEquals/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/exportEquals/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/exportImportStarAs/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/exportImportStarAs/api-extractor-scenarios.api.json index 65254a86a60..d36f5836527 100644 --- a/build-tests/api-extractor-scenarios/etc/exportImportStarAs/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/exportImportStarAs/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/exportImportStarAs2/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/exportImportStarAs2/api-extractor-scenarios.api.json index 569dc468334..3fcbf300fb2 100644 --- a/build-tests/api-extractor-scenarios/etc/exportImportStarAs2/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/exportImportStarAs2/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/exportImportStarAs3/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/exportImportStarAs3/api-extractor-scenarios.api.json index 7d32f70cb39..e4d22195cde 100644 --- a/build-tests/api-extractor-scenarios/etc/exportImportStarAs3/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/exportImportStarAs3/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/exportImportedExternal/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/exportImportedExternal/api-extractor-scenarios.api.json index 895ed82382e..f2997df1bb1 100644 --- a/build-tests/api-extractor-scenarios/etc/exportImportedExternal/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/exportImportedExternal/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/exportImportedExternal2/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/exportImportedExternal2/api-extractor-scenarios.api.json index 895ed82382e..f2997df1bb1 100644 --- a/build-tests/api-extractor-scenarios/etc/exportImportedExternal2/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/exportImportedExternal2/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/exportImportedExternalDefault/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/exportImportedExternalDefault/api-extractor-scenarios.api.json index e38f2eb3fbc..771b403636c 100644 --- a/build-tests/api-extractor-scenarios/etc/exportImportedExternalDefault/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/exportImportedExternalDefault/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/exportStar/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/exportStar/api-extractor-scenarios.api.json index 034087c4404..e720c20a841 100644 --- a/build-tests/api-extractor-scenarios/etc/exportStar/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/exportStar/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/exportStar2/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/exportStar2/api-extractor-scenarios.api.json index 89196c9883e..d199190991d 100644 --- a/build-tests/api-extractor-scenarios/etc/exportStar2/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/exportStar2/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/exportStar3/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/exportStar3/api-extractor-scenarios.api.json index 978e79dd798..324740f7367 100644 --- a/build-tests/api-extractor-scenarios/etc/exportStar3/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/exportStar3/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/exportStarAs/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/exportStarAs/api-extractor-scenarios.api.json index a2e1279b6cc..cd930436f06 100644 --- a/build-tests/api-extractor-scenarios/etc/exportStarAs/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/exportStarAs/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/exportStarAs2/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/exportStarAs2/api-extractor-scenarios.api.json index 3d6aed02798..291bb916343 100644 --- a/build-tests/api-extractor-scenarios/etc/exportStarAs2/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/exportStarAs2/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/exportStarAs3/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/exportStarAs3/api-extractor-scenarios.api.json index 751c1c67a97..0c043e9368a 100644 --- a/build-tests/api-extractor-scenarios/etc/exportStarAs3/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/exportStarAs3/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/functionOverload/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/functionOverload/api-extractor-scenarios.api.json index 6e3d5159e7c..1b4335b21d6 100644 --- a/build-tests/api-extractor-scenarios/etc/functionOverload/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/functionOverload/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/importEquals/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/importEquals/api-extractor-scenarios.api.json index 1e8595978bb..c1eb4247d74 100644 --- a/build-tests/api-extractor-scenarios/etc/importEquals/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/importEquals/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/importType/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/importType/api-extractor-scenarios.api.json index 9b7a0ba9812..b46345fa992 100644 --- a/build-tests/api-extractor-scenarios/etc/importType/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/importType/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/includeForgottenExports/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/includeForgottenExports/api-extractor-scenarios.api.json index 9a755f8d5cf..c7fccc789df 100644 --- a/build-tests/api-extractor-scenarios/etc/includeForgottenExports/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/includeForgottenExports/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/inconsistentReleaseTags/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/inconsistentReleaseTags/api-extractor-scenarios.api.json index 861ce9c38f4..53b805d5e00 100644 --- a/build-tests/api-extractor-scenarios/etc/inconsistentReleaseTags/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/inconsistentReleaseTags/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/inheritDoc/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/inheritDoc/api-extractor-scenarios.api.json index a41c28b9b10..c69fe4339a2 100644 --- a/build-tests/api-extractor-scenarios/etc/inheritDoc/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/inheritDoc/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/internationalCharacters/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/internationalCharacters/api-extractor-scenarios.api.json index 5c99dc8cdb7..e52b79b4c90 100644 --- a/build-tests/api-extractor-scenarios/etc/internationalCharacters/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/internationalCharacters/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/mergedDeclarations/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/mergedDeclarations/api-extractor-scenarios.api.json index 41bf7a4b7cd..ce3f72c1a0b 100644 --- a/build-tests/api-extractor-scenarios/etc/mergedDeclarations/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/mergedDeclarations/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/mixinPattern/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/mixinPattern/api-extractor-scenarios.api.json index 133cb558f57..48db87ac527 100644 --- a/build-tests/api-extractor-scenarios/etc/mixinPattern/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/mixinPattern/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/namedDefaultImport/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/namedDefaultImport/api-extractor-scenarios.api.json index e4a6ab82c27..6dc01c4631a 100644 --- a/build-tests/api-extractor-scenarios/etc/namedDefaultImport/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/namedDefaultImport/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/namespaceImports/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/namespaceImports/api-extractor-scenarios.api.json index 7c915e7984a..c5bc0066f09 100644 --- a/build-tests/api-extractor-scenarios/etc/namespaceImports/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/namespaceImports/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/namespaceImports2/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/namespaceImports2/api-extractor-scenarios.api.json index f40d2e64608..ebe57a27586 100644 --- a/build-tests/api-extractor-scenarios/etc/namespaceImports2/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/namespaceImports2/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/preapproved/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/preapproved/api-extractor-scenarios.api.json index 895ed82382e..f2997df1bb1 100644 --- a/build-tests/api-extractor-scenarios/etc/preapproved/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/preapproved/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/projectFolderUrl/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/projectFolderUrl/api-extractor-scenarios.api.json index bb32a39af82..87512f5600a 100644 --- a/build-tests/api-extractor-scenarios/etc/projectFolderUrl/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/projectFolderUrl/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/readonlyDeclarations/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/readonlyDeclarations/api-extractor-scenarios.api.json index c0ed696410b..c365d60a23a 100644 --- a/build-tests/api-extractor-scenarios/etc/readonlyDeclarations/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/readonlyDeclarations/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/referenceTokens/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/referenceTokens/api-extractor-scenarios.api.json index f2a4b14d4cc..a25d98c8424 100644 --- a/build-tests/api-extractor-scenarios/etc/referenceTokens/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/referenceTokens/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/spanSorting/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/spanSorting/api-extractor-scenarios.api.json index 6b0f70e844d..a6a20a02af3 100644 --- a/build-tests/api-extractor-scenarios/etc/spanSorting/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/spanSorting/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/typeLiterals/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/typeLiterals/api-extractor-scenarios.api.json index 9e76ccb3d77..4af8707d08d 100644 --- a/build-tests/api-extractor-scenarios/etc/typeLiterals/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/typeLiterals/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/typeOf/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/typeOf/api-extractor-scenarios.api.json index 52ea964fd3c..febcf6ccf7c 100644 --- a/build-tests/api-extractor-scenarios/etc/typeOf/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/typeOf/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/typeOf2/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/typeOf2/api-extractor-scenarios.api.json index bd0a1edd8c6..ba35fe47ce2 100644 --- a/build-tests/api-extractor-scenarios/etc/typeOf2/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/typeOf2/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/typeOf3/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/typeOf3/api-extractor-scenarios.api.json index 36f784c17cc..d592718a445 100644 --- a/build-tests/api-extractor-scenarios/etc/typeOf3/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/typeOf3/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-scenarios/etc/typeParameters/api-extractor-scenarios.api.json b/build-tests/api-extractor-scenarios/etc/typeParameters/api-extractor-scenarios.api.json index e4a3a2edda9..ed2b317d221 100644 --- a/build-tests/api-extractor-scenarios/etc/typeParameters/api-extractor-scenarios.api.json +++ b/build-tests/api-extractor-scenarios/etc/typeParameters/api-extractor-scenarios.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-test-05/dist/api-extractor-test-05.api.json b/build-tests/api-extractor-test-05/dist/api-extractor-test-05.api.json index 17fa372ffb3..3184c889da4 100644 --- a/build-tests/api-extractor-test-05/dist/api-extractor-test-05.api.json +++ b/build-tests/api-extractor-test-05/dist/api-extractor-test-05.api.json @@ -114,6 +114,22 @@ "tagName": "@virtual", "syntaxKind": "modifier" }, + { + "tagName": "@jsx", + "syntaxKind": "block" + }, + { + "tagName": "@jsxRuntime", + "syntaxKind": "block" + }, + { + "tagName": "@jsxFrag", + "syntaxKind": "block" + }, + { + "tagName": "@jsxImportSource", + "syntaxKind": "block" + }, { "tagName": "@betaDocumentation", "syntaxKind": "modifier" diff --git a/build-tests/api-extractor-test-05/dist/tsdoc-metadata.json b/build-tests/api-extractor-test-05/dist/tsdoc-metadata.json index c7877dbdce7..7690bff4320 100644 --- a/build-tests/api-extractor-test-05/dist/tsdoc-metadata.json +++ b/build-tests/api-extractor-test-05/dist/tsdoc-metadata.json @@ -5,7 +5,7 @@ "toolPackages": [ { "packageName": "@microsoft/api-extractor", - "packageVersion": "7.53.1" + "packageVersion": "7.54.0" } ] } diff --git a/build-tests/eslint-7-11-test/config/heft.json b/build-tests/eslint-7-11-test/config/heft.json new file mode 100644 index 00000000000..e7cc05b1da4 --- /dev/null +++ b/build-tests/eslint-7-11-test/config/heft.json @@ -0,0 +1,16 @@ +{ + "extends": "local-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "lint": { + "taskPlugin": { + // Clear the SARIF emitter + "options": null + } + } + } + } + } +} diff --git a/build-tests/eslint-7-7-test/config/heft.json b/build-tests/eslint-7-7-test/config/heft.json new file mode 100644 index 00000000000..e7cc05b1da4 --- /dev/null +++ b/build-tests/eslint-7-7-test/config/heft.json @@ -0,0 +1,16 @@ +{ + "extends": "local-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "lint": { + "taskPlugin": { + // Clear the SARIF emitter + "options": null + } + } + } + } + } +} diff --git a/build-tests/eslint-9-test/.eslint-bulk-suppressions.json b/build-tests/eslint-9-test/.eslint-bulk-suppressions.json new file mode 100644 index 00000000000..961e6033858 --- /dev/null +++ b/build-tests/eslint-9-test/.eslint-bulk-suppressions.json @@ -0,0 +1,9 @@ +{ + "suppressions": [ + { + "file": "src/index.ts", + "scopeId": ".", + "rule": "@typescript-eslint/naming-convention" + } + ] +} diff --git a/build-tests/eslint-9-test/eslint.config.js b/build-tests/eslint-9-test/eslint.config.js index d86d5e04d6c..75eb0c727fc 100644 --- a/build-tests/eslint-9-test/eslint.config.js +++ b/build-tests/eslint-9-test/eslint.config.js @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. +require('local-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions'); const typescriptEslintParser = require('@typescript-eslint/parser'); const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); diff --git a/build-tests/eslint-9-test/package.json b/build-tests/eslint-9-test/package.json index f9ece522a2f..3a6a4b66879 100644 --- a/build-tests/eslint-9-test/package.json +++ b/build-tests/eslint-9-test/package.json @@ -7,7 +7,8 @@ "license": "MIT", "scripts": { "build": "heft build --clean", - "_phase:build": "heft run --only build -- --clean" + "_phase:build": "heft run --only build -- --clean", + "_phase:test": "heft run --only test -- --clean" }, "devDependencies": { "@rushstack/heft": "workspace:*", diff --git a/build-tests/eslint-9-test/src/__snapshots__/sarif.test.ts.snap b/build-tests/eslint-9-test/src/__snapshots__/sarif.test.ts.snap new file mode 100644 index 00000000000..4dd9678af58 --- /dev/null +++ b/build-tests/eslint-9-test/src/__snapshots__/sarif.test.ts.snap @@ -0,0 +1,111 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Sarif Logs has the expected content 1`] = ` +Object { + "$schema": "http://json.schemastore.org/sarif-2.1.0-rtm.5", + "runs": Array [ + Object { + "artifacts": Array [ + Object { + "location": Object { + "uri": "src/index.ts", + }, + }, + Object { + "location": Object { + "uri": "src/sarif.test.ts", + }, + }, + ], + "results": Array [ + Object { + "level": "warning", + "locations": Array [ + Object { + "physicalLocation": Object { + "artifactLocation": Object { + "index": 0, + "uri": "src/index.ts", + }, + "region": Object { + "endColumn": 24, + "endLine": 6, + "startColumn": 3, + "startLine": 6, + }, + }, + }, + ], + "message": Object { + "text": "Expected _bar to have a type annotation.", + }, + "ruleId": "@typescript-eslint/typedef", + "ruleIndex": 0, + "suppressions": Array [ + Object { + "justification": "", + "kind": "inSource", + }, + ], + }, + Object { + "level": "warning", + "locations": Array [ + Object { + "physicalLocation": Object { + "artifactLocation": Object { + "index": 0, + "uri": "src/index.ts", + }, + "region": Object { + "endColumn": 30, + "endLine": 10, + "startColumn": 14, + "startLine": 10, + }, + }, + }, + ], + "message": Object { + "text": "Variable name \`Bad_Name\` must match one of the following formats: camelCase, UPPER_CASE, PascalCase", + }, + "ruleId": "@typescript-eslint/naming-convention", + "ruleIndex": 1, + "suppressions": Array [ + Object { + "justification": "", + "kind": "external", + }, + ], + }, + ], + "tool": Object { + "driver": Object { + "informationUri": "https://eslint.org", + "name": "ESLint", + "rules": Array [ + Object { + "helpUri": "https://typescript-eslint.io/rules/typedef", + "id": "@typescript-eslint/typedef", + "properties": Object {}, + "shortDescription": Object { + "text": "Require type annotations in certain places", + }, + }, + Object { + "helpUri": "https://typescript-eslint.io/rules/naming-convention", + "id": "@typescript-eslint/naming-convention", + "properties": Object {}, + "shortDescription": Object { + "text": "Enforce naming conventions for everything across a codebase", + }, + }, + ], + "version": "9.37.0", + }, + }, + }, + ], + "version": "2.1.0", +} +`; diff --git a/build-tests/eslint-9-test/src/index.ts b/build-tests/eslint-9-test/src/index.ts index 428f8caba4f..549373093be 100644 --- a/build-tests/eslint-9-test/src/index.ts +++ b/build-tests/eslint-9-test/src/index.ts @@ -2,6 +2,9 @@ // See LICENSE in the project root for license information. export class Foo { - private _bar: string = 'bar'; + // eslint-disable-next-line @typescript-eslint/typedef + private _bar = 'bar'; public baz: string = this._bar; } + +export const Bad_Name: string = '37'; diff --git a/build-tests/eslint-9-test/src/sarif.test.ts b/build-tests/eslint-9-test/src/sarif.test.ts new file mode 100644 index 00000000000..b24c907090d --- /dev/null +++ b/build-tests/eslint-9-test/src/sarif.test.ts @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import * as fs from 'node:fs'; +import * as path from 'node:path'; + +const sarifLogPath: string = path.resolve(__dirname, '../temp/build/lint/lint.sarif'); + +describe('Sarif Logs', () => { + it('has the expected content', () => { + const logContent = fs.readFileSync(sarifLogPath, 'utf-8'); + const parsedLog = JSON.parse(logContent); + expect(parsedLog).toMatchSnapshot(); + }); +}); diff --git a/build-tests/eslint-9-test/tsconfig.json b/build-tests/eslint-9-test/tsconfig.json index 8a46ac2445e..65e0cf100f1 100644 --- a/build-tests/eslint-9-test/tsconfig.json +++ b/build-tests/eslint-9-test/tsconfig.json @@ -1,24 +1,5 @@ { "$schema": "http://json.schemastore.org/tsconfig", - "compilerOptions": { - "outDir": "lib", - "rootDir": "src", - - "forceConsistentCasingInFileNames": true, - "declaration": true, - "sourceMap": true, - "declarationMap": true, - "inlineSources": true, - "experimentalDecorators": true, - "strictNullChecks": true, - "noUnusedLocals": true, - - "module": "esnext", - "moduleResolution": "node", - "target": "es5", - "lib": ["es5"] - }, - "include": ["src/**/*.ts", "src/**/*.tsx"], - "exclude": ["node_modules", "lib"] + "extends": "./node_modules/local-node-rig/profiles/default/tsconfig-base.json" } diff --git a/build-tests/heft-rspack-everything-test/config/heft.json b/build-tests/heft-rspack-everything-test/config/heft.json new file mode 100644 index 00000000000..7d826b05556 --- /dev/null +++ b/build-tests/heft-rspack-everything-test/config/heft.json @@ -0,0 +1,66 @@ +/** + * Defines configuration used by core Heft. + */ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + + // TODO: Add comments + "phasesByName": { + "build": { + "cleanFiles": [{ "includeGlobs": ["dist", "lib", "lib-commonjs"] }], + + "tasksByName": { + "typescript": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft-typescript-plugin" + } + }, + "lint": { + "taskDependencies": ["typescript"], + "taskPlugin": { + "pluginPackage": "@rushstack/heft-lint-plugin" + } + }, + "rspack": { + "taskDependencies": ["typescript"], + "taskPlugin": { + "pluginPackage": "@rushstack/heft-rspack-plugin" + } + } + } + }, + + "test": { + "phaseDependencies": ["build"], + "tasksByName": { + "jest": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft-jest-plugin" + } + } + } + }, + + "trust-dev-cert": { + "tasksByName": { + "trust-dev-cert": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft-dev-cert-plugin", + "pluginName": "trust-dev-certificate-plugin" + } + } + } + }, + + "untrust-dev-cert": { + "tasksByName": { + "untrust-dev-cert": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft-dev-cert-plugin", + "pluginName": "untrust-dev-certificate-plugin" + } + } + } + } + } +} diff --git a/build-tests/heft-rspack-everything-test/config/jest.config.json b/build-tests/heft-rspack-everything-test/config/jest.config.json new file mode 100644 index 00000000000..f22bb14d6d1 --- /dev/null +++ b/build-tests/heft-rspack-everything-test/config/jest.config.json @@ -0,0 +1,12 @@ +{ + "extends": "@rushstack/heft-jest-plugin/includes/jest-web.config.json", + + // Enable code coverage for Jest + "collectCoverage": true, + "coverageDirectory": "/coverage", + "coverageReporters": ["cobertura", "html"], + + // Use v8 coverage provider to avoid Babel + "coverageProvider": "v8", + "resolver": "@rushstack/heft-jest-plugin/lib/exports/jest-node-modules-symlink-resolver" +} diff --git a/build-tests/heft-rspack-everything-test/config/rush-project.json b/build-tests/heft-rspack-everything-test/config/rush-project.json new file mode 100644 index 00000000000..030d8d0ff0e --- /dev/null +++ b/build-tests/heft-rspack-everything-test/config/rush-project.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json", + + "operationSettings": [ + { + "operationName": "_phase:build", + "outputFolderNames": ["lib", "dist"] + }, + { + "operationName": "_phase:test", + "outputFolderNames": ["coverage"] + } + ] +} diff --git a/build-tests/heft-rspack-everything-test/config/typescript.json b/build-tests/heft-rspack-everything-test/config/typescript.json new file mode 100644 index 00000000000..86a32ee3552 --- /dev/null +++ b/build-tests/heft-rspack-everything-test/config/typescript.json @@ -0,0 +1,55 @@ +/** + * Configures the TypeScript plugin for Heft. This plugin also manages linting. + */ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/typescript.schema.json", + + /** + * If provided, emit these module kinds in addition to the modules specified in the tsconfig. + * Note that this option only applies to the main tsconfig.json configuration. + */ + "additionalModuleKindsToEmit": [ + // { + // /** + // * (Required) Must be one of "commonjs", "amd", "umd", "system", "es2015", "esnext" + // */ + // "moduleKind": "amd", + // + // /** + // * (Required) The name of the folder where the output will be written. + // */ + // "outFolderName": "lib-amd" + // } + { + "moduleKind": "commonjs", + "outFolderName": "lib-commonjs" + } + ], + + /** + * Describes the way files should be statically coped from src to TS output folders + */ + "staticAssetsToCopy": { + /** + * File extensions that should be copied from the src folder to the destination folder(s). + */ + "fileExtensions": [".css", ".png"] + + /** + * Glob patterns that should be explicitly included. + */ + // "includeGlobs": [ + // "some/path/*.js" + // ], + + /** + * Glob patterns that should be explicitly excluded. This takes precedence over globs listed + * in "includeGlobs" and files that match the file extensions provided in "fileExtensions". + */ + // "excludeGlobs": [ + // "some/path/*.css" + // ] + }, + + "onlyResolveSymlinksInNodeModules": true +} diff --git a/build-tests/heft-rspack-everything-test/eslint.config.js b/build-tests/heft-rspack-everything-test/eslint.config.js new file mode 100644 index 00000000000..5a9df48909b --- /dev/null +++ b/build-tests/heft-rspack-everything-test/eslint.config.js @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); + +module.exports = [ + ...webAppProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/heft-rspack-everything-test/package.json b/build-tests/heft-rspack-everything-test/package.json new file mode 100644 index 00000000000..081fc7ac997 --- /dev/null +++ b/build-tests/heft-rspack-everything-test/package.json @@ -0,0 +1,29 @@ +{ + "name": "heft-rspack-everything-test", + "description": "Building this project tests every task and config file for Heft when targeting the web browser runtime using Rspack", + "version": "1.0.0", + "private": true, + "scripts": { + "build": "heft build --clean", + "start": "heft build-watch", + "serve": "heft build-watch --serve", + "_phase:build": "heft run --only build -- --clean", + "_phase:test": "heft run --only test -- --clean" + }, + "devDependencies": { + "@rushstack/heft-dev-cert-plugin": "workspace:*", + "@rushstack/heft-jest-plugin": "workspace:*", + "@rushstack/heft-lint-plugin": "workspace:*", + "@rushstack/heft-typescript-plugin": "workspace:*", + "@rushstack/heft-rspack-plugin": "workspace:*", + "@rushstack/heft": "workspace:*", + "@rushstack/node-core-library": "workspace:*", + "@rushstack/rush-sdk": "workspace:*", + "@types/heft-jest": "1.0.1", + "@types/node": "20.17.19", + "eslint": "~9.37.0", + "local-eslint-config": "workspace:*", + "typescript": "~5.8.2", + "@rspack/core": "~1.6.0-beta.0" + } +} diff --git a/build-tests/heft-rspack-everything-test/rspack.config.mjs b/build-tests/heft-rspack-everything-test/rspack.config.mjs new file mode 100644 index 00000000000..fa68d03598f --- /dev/null +++ b/build-tests/heft-rspack-everything-test/rspack.config.mjs @@ -0,0 +1,51 @@ +// @ts-check +/** @typedef {import('@rushstack/heft-rspack-plugin').IRspackConfiguration} IRspackConfiguration */ +'use strict'; + +import { dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { HtmlRspackPlugin, SwcJsMinimizerRspackPlugin } from '@rspack/core'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +/** @type {IRspackConfiguration} */ +const config = { + mode: 'production', + module: { + rules: [ + { + test: /\.png$/i, + type: 'asset/resource' + }, + { + test: /\.js$/, + enforce: 'pre' + // TODO: enable after rspack drops a new version with this commit https://github.com/web-infra-dev/rspack/commit/d31f2fa07179d72eee99b21db517946d08073767 + // extractSourceMap: true + } + ] + }, + target: ['web', 'es2020'], + resolve: { + extensions: ['.js', '.json'] + }, + entry: { + 'heft-test-A': resolve(__dirname, 'lib', 'indexA.js'), + 'heft-test-B': resolve(__dirname, 'lib', 'indexB.js') + }, + output: { + path: resolve(__dirname, 'dist'), + filename: '[name]_[contenthash].js', + chunkFilename: '[id].[name]_[contenthash].js', + assetModuleFilename: '[name]_[contenthash][ext][query]' + }, + devtool: 'source-map', + optimization: { + minimize: true, + minimizer: [new SwcJsMinimizerRspackPlugin({})] + }, + plugins: [new HtmlRspackPlugin()] +}; + +export default config; diff --git a/build-tests/heft-rspack-everything-test/rspack.dev.config.mjs b/build-tests/heft-rspack-everything-test/rspack.dev.config.mjs new file mode 100644 index 00000000000..3e0315a615d --- /dev/null +++ b/build-tests/heft-rspack-everything-test/rspack.dev.config.mjs @@ -0,0 +1,45 @@ +// @ts-check +/** @typedef {import('@rushstack/heft-rspack-plugin').IRspackConfiguration} IRspackConfiguration */ +'use strict'; + +import { dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { HtmlRspackPlugin } from '@rspack/core'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +/** @type {IRspackConfiguration} */ +const config = { + mode: 'none', + module: { + rules: [ + { + test: /\.png$/i, + type: 'asset/resource' + } + ] + }, + target: ['web', 'es2020'], + resolve: { + extensions: ['.js', '.json'] + }, + entry: { + 'heft-test-A': resolve(__dirname, 'lib', 'indexA.js'), + 'heft-test-B': resolve(__dirname, 'lib', 'indexB.js') + }, + output: { + path: resolve(__dirname, 'dist'), + filename: '[name]_[contenthash].js', + chunkFilename: '[id].[name]_[contenthash].js', + assetModuleFilename: '[name]_[contenthash][ext][query]' + }, + devtool: 'source-map', + optimization: { + minimize: false, + minimizer: [] + }, + plugins: [new HtmlRspackPlugin()] +}; + +export default config; diff --git a/build-tests/heft-rspack-everything-test/src/chunks/ChunkClass.ts b/build-tests/heft-rspack-everything-test/src/chunks/ChunkClass.ts new file mode 100644 index 00000000000..ddbf7d148c7 --- /dev/null +++ b/build-tests/heft-rspack-everything-test/src/chunks/ChunkClass.ts @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +export class ChunkClass { + public doStuff(): void { + // eslint-disable-next-line no-console + console.log('CHUNK'); + } + + public getImageUrl(): string { + // eslint-disable-next-line @typescript-eslint/no-require-imports + return require('./image.png'); + } +} diff --git a/build-tests/heft-rspack-everything-test/src/chunks/image.d.png.ts b/build-tests/heft-rspack-everything-test/src/chunks/image.d.png.ts new file mode 100644 index 00000000000..f38a285dfd9 --- /dev/null +++ b/build-tests/heft-rspack-everything-test/src/chunks/image.d.png.ts @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +declare const path: string; + +export default path; diff --git a/build-tests/heft-rspack-everything-test/src/chunks/image.png b/build-tests/heft-rspack-everything-test/src/chunks/image.png new file mode 100644 index 00000000000..a028cfeb69f Binary files /dev/null and b/build-tests/heft-rspack-everything-test/src/chunks/image.png differ diff --git a/build-tests/heft-rspack-everything-test/src/copiedAsset.css b/build-tests/heft-rspack-everything-test/src/copiedAsset.css new file mode 100644 index 00000000000..e9747e441d3 --- /dev/null +++ b/build-tests/heft-rspack-everything-test/src/copiedAsset.css @@ -0,0 +1 @@ +/* THIS FILE SHOULD GET COPIED TO THE "lib" FOLDER BECAUSE IT IS REFERENCED IN copy-static-assets.json */ diff --git a/build-tests/heft-rspack-everything-test/src/indexA.ts b/build-tests/heft-rspack-everything-test/src/indexA.ts new file mode 100644 index 00000000000..6b4db719843 --- /dev/null +++ b/build-tests/heft-rspack-everything-test/src/indexA.ts @@ -0,0 +1,10 @@ +/* eslint-disable */ +/* tslint:disable */ +import(/* webpackChunkName: 'chunk' */ './chunks/ChunkClass') + .then(({ ChunkClass }) => { + const chunk: any = new ChunkClass(); + chunk.doStuff(); + }) + .catch((e) => { + console.log('Error: ' + e.message); + }); diff --git a/build-tests/heft-rspack-everything-test/src/indexB.ts b/build-tests/heft-rspack-everything-test/src/indexB.ts new file mode 100644 index 00000000000..2bcd3820a4b --- /dev/null +++ b/build-tests/heft-rspack-everything-test/src/indexB.ts @@ -0,0 +1,5 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// eslint-disable-next-line no-console +console.log('dostuff'); diff --git a/build-tests/heft-rspack-everything-test/src/test/ExampleTest.test.ts b/build-tests/heft-rspack-everything-test/src/test/ExampleTest.test.ts new file mode 100644 index 00000000000..565432eacf5 --- /dev/null +++ b/build-tests/heft-rspack-everything-test/src/test/ExampleTest.test.ts @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import { ChunkClass } from '../chunks/ChunkClass'; + +describe('Example Test', () => { + it('Correctly tests stuff', () => { + expect(true).toBeTruthy(); + }); + + it('Correctly handles images', () => { + const chunkClass: ChunkClass = new ChunkClass(); + expect(() => chunkClass.getImageUrl()).not.toThrow(); + expect(typeof chunkClass.getImageUrl()).toBe('string'); + }); +}); diff --git a/build-tests/heft-rspack-everything-test/src/test/Image.test.ts b/build-tests/heft-rspack-everything-test/src/test/Image.test.ts new file mode 100644 index 00000000000..c336d269d60 --- /dev/null +++ b/build-tests/heft-rspack-everything-test/src/test/Image.test.ts @@ -0,0 +1,10 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import image from '../chunks/image.png'; + +describe('Image Test', () => { + it('correctly handles urls for images', () => { + expect(image).toBe('lib-commonjs/chunks/image.png'); + }); +}); diff --git a/build-tests/heft-rspack-everything-test/src/test/SourceMapTest.test.ts b/build-tests/heft-rspack-everything-test/src/test/SourceMapTest.test.ts new file mode 100644 index 00000000000..2c500cdd547 --- /dev/null +++ b/build-tests/heft-rspack-everything-test/src/test/SourceMapTest.test.ts @@ -0,0 +1,116 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import { FileSystem, PackageJsonLookup } from '@rushstack/node-core-library'; + +interface IMap { + sources?: string[]; + file?: string; + sourcesContent?: string[]; + names?: string[]; +} + +interface IMapValue { + mapFileName: string; + mapObject: IMap; +} + +interface IMapTestEntry { + name: string; + mapRegex: RegExp; + map: IMapValue | undefined; +} + +const mapTests: IMapTestEntry[] = [ + { + name: 'Test-A', + mapRegex: /^heft-test-A_[\w\d]*\.js.map$/, + map: undefined + }, + { + name: 'Test-B', + mapRegex: /^heft-test-B_[\w\d]*\.js.map$/, + map: undefined + }, + { + name: 'Chunk', + mapRegex: /^[\w\d\.]*chunk_[\w\d]*\.js.map$/, + map: undefined + } +]; + +const lookup: PackageJsonLookup = new PackageJsonLookup(); +lookup.tryGetPackageFolderFor(__dirname); +const thisProjectFolder: string | undefined = lookup.tryGetPackageFolderFor(__dirname); +if (!thisProjectFolder) { + throw new Error('Cannot find project folder'); +} +const distEntries: string[] = FileSystem.readFolderItemNames(thisProjectFolder + '/dist'); +for (const distEntry of distEntries) { + for (const test of mapTests) { + if (test.mapRegex.test(distEntry)) { + const mapText: string = FileSystem.readFile(`${thisProjectFolder}/dist/${distEntry}`); + const mapObject: IMap = JSON.parse(mapText); + test.map = { + mapFileName: distEntry, + mapObject + }; + } + } +} + +describe('Source Maps', () => { + for (const test of mapTests) { + mapValueCheck(test); + } +}); + +function mapValueCheck(entry: IMapTestEntry): void { + it(`${entry.name} has map value`, () => { + expect(entry.map).toBeTruthy(); + }); + + if (!entry.map) { + return; + } + + const map: IMapValue = entry.map; + + it(`${entry.name} has filename matching file attribute`, () => { + if (map.mapObject.file) { + expect(map.mapFileName).toMatch(`${map.mapObject.file}.map`); + } + }); + + const properties: (keyof IMap)[] = ['sources', 'file', 'sourcesContent', 'names']; + for (const property of properties) { + it(`${map.mapFileName} has ${property} property`, () => { + expect(map.mapObject[property]).toBeTruthy(); + }); + } + + it(`${entry.name} has sources and sourcesContent arrays of the same length`, () => { + if (map.mapObject.sourcesContent && map.mapObject.sources) { + let numSrcs: number = 0; + for (const source of map.mapObject.sources) { + if (source) { + numSrcs++; + } + } + + let numContents: number = 0; + for (const content of map.mapObject.sourcesContent) { + if (content) { + numContents++; + } + } + expect(numSrcs).toEqual(numContents); + } + }); + + it(`${entry.name} has a source that matches the sourceFileRegex`, () => { + if (map.mapObject.sources) { + expect(map.mapObject.sources).toMatchSnapshot(); + } + }); +} diff --git a/build-tests/heft-rspack-everything-test/src/test/__snapshots__/SourceMapTest.test.ts.snap b/build-tests/heft-rspack-everything-test/src/test/__snapshots__/SourceMapTest.test.ts.snap new file mode 100644 index 00000000000..23c890d36c4 --- /dev/null +++ b/build-tests/heft-rspack-everything-test/src/test/__snapshots__/SourceMapTest.test.ts.snap @@ -0,0 +1,31 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Source Maps Chunk has a source that matches the sourceFileRegex 1`] = ` +Array [ + "webpack://heft-rspack-everything-test/./lib/chunks/ChunkClass.js", +] +`; + +exports[`Source Maps Test-A has a source that matches the sourceFileRegex 1`] = ` +Array [ + "webpack://heft-rspack-everything-test/webpack/runtime/jsonp_chunk_loading", + "webpack://heft-rspack-everything-test/webpack/runtime/define_property_getters", + "webpack://heft-rspack-everything-test/webpack/runtime/ensure_chunk", + "webpack://heft-rspack-everything-test/webpack/runtime/get javascript chunk filename", + "webpack://heft-rspack-everything-test/webpack/runtime/global", + "webpack://heft-rspack-everything-test/webpack/runtime/has_own_property", + "webpack://heft-rspack-everything-test/webpack/runtime/load_script", + "webpack://heft-rspack-everything-test/webpack/runtime/rspack_version", + "webpack://heft-rspack-everything-test/webpack/runtime/auto_public_path", + "webpack://heft-rspack-everything-test/webpack/runtime/rspack_unique_id", + "webpack://heft-rspack-everything-test/./lib/indexA.js", +] +`; + +exports[`Source Maps Test-B has a source that matches the sourceFileRegex 1`] = ` +Array [ + "webpack://heft-rspack-everything-test/webpack/runtime/rspack_version", + "webpack://heft-rspack-everything-test/webpack/runtime/rspack_unique_id", + "webpack://heft-rspack-everything-test/./lib/indexB.js", +] +`; diff --git a/build-tests/heft-rspack-everything-test/tsconfig.json b/build-tests/heft-rspack-everything-test/tsconfig.json new file mode 100644 index 00000000000..1838fa44b78 --- /dev/null +++ b/build-tests/heft-rspack-everything-test/tsconfig.json @@ -0,0 +1,29 @@ +{ + "$schema": "http://json.schemastore.org/tsconfig", + + "compilerOptions": { + "outDir": "lib", + "rootDir": "src", + + "allowArbitraryExtensions": true, + "forceConsistentCasingInFileNames": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "jsx": "react", + "declaration": true, + "sourceMap": true, + "declarationMap": true, + "inlineSources": true, + "experimentalDecorators": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "types": ["heft-jest", "node"], + + "module": "esnext", + "moduleResolution": "node", + "target": "es5", + "lib": ["es5", "scripthost", "es2015.collection", "es2015.promise", "es2015.iterable", "dom"] + }, + "include": ["src/**/*.ts", "src/**/*.tsx"], + "exclude": ["node_modules", "lib"] +} diff --git a/build-tests/heft-typescript-v4-test/package.json b/build-tests/heft-typescript-v4-test/package.json index d2b3203a78a..e510684b98e 100644 --- a/build-tests/heft-typescript-v4-test/package.json +++ b/build-tests/heft-typescript-v4-test/package.json @@ -12,7 +12,7 @@ }, "devDependencies": { "@microsoft/api-extractor": "workspace:*", - "@rushstack/eslint-config": "4.4.1", + "@rushstack/eslint-config": "4.5.3", "@rushstack/eslint-patch": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/heft-api-extractor-plugin": "workspace:*", diff --git a/build-tests/heft-webpack4-everything-test/webpack.config.js b/build-tests/heft-webpack4-everything-test/webpack.config.js index a6aa6151bdb..c4be9e959c4 100644 --- a/build-tests/heft-webpack4-everything-test/webpack.config.js +++ b/build-tests/heft-webpack4-everything-test/webpack.config.js @@ -24,7 +24,7 @@ module.exports = { ] }, resolve: { - extensions: ['.js', '.jsx', '.json'] + extensions: ['.js', '.json'] }, entry: { 'heft-test-A': path.join(__dirname, 'lib', 'indexA.js'), diff --git a/build-tests/heft-webpack5-everything-test/webpack.config.js b/build-tests/heft-webpack5-everything-test/webpack.config.js index 68ab9d96538..25edbf94925 100644 --- a/build-tests/heft-webpack5-everything-test/webpack.config.js +++ b/build-tests/heft-webpack5-everything-test/webpack.config.js @@ -22,7 +22,7 @@ module.exports = { }, target: ['web', 'es2020'], resolve: { - extensions: ['.js', '.jsx', '.json'] + extensions: ['.js', '.json'] }, entry: { 'heft-test-A': path.join(__dirname, 'lib', 'indexA.js'), diff --git a/build-tests/heft-webpack5-everything-test/webpack.dev.config.js b/build-tests/heft-webpack5-everything-test/webpack.dev.config.js index 25459e25909..504bdc6e13c 100644 --- a/build-tests/heft-webpack5-everything-test/webpack.dev.config.js +++ b/build-tests/heft-webpack5-everything-test/webpack.dev.config.js @@ -15,7 +15,7 @@ module.exports = { }, target: ['web', 'es2020'], resolve: { - extensions: ['.js', '.jsx', '.json'] + extensions: ['.js', '.json'] }, entry: { 'heft-test-A': path.join(__dirname, 'lib', 'indexA.js'), diff --git a/build-tests/localization-plugin-test-03/webpack.config.js b/build-tests/localization-plugin-test-03/webpack.config.js index 80b0f933a4f..56d3cf532e8 100644 --- a/build-tests/localization-plugin-test-03/webpack.config.js +++ b/build-tests/localization-plugin-test-03/webpack.config.js @@ -51,7 +51,7 @@ function generateConfiguration(mode, outputFolderName, webpack) { ] }, resolve: { - extensions: ['.js', '.jsx', '.json', '.ts', '.tsx'] + extensions: ['.js', '.json', '.ts', '.tsx'] }, entry: { 'localization-test-A': `${__dirname}/src/indexA.ts`, diff --git a/common/changes/@microsoft/api-documenter/bump-eslint_2025-10-07-19-34.json b/common/changes/@microsoft/api-documenter/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 0be303649c0..00000000000 --- a/common/changes/@microsoft/api-documenter/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@microsoft/api-documenter", - "comment": "", - "type": "none" - } - ], - "packageName": "@microsoft/api-documenter" -} \ No newline at end of file diff --git a/common/changes/@microsoft/api-extractor-model/bump-eslint_2025-10-07-19-34.json b/common/changes/@microsoft/api-extractor-model/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 52e967a8e74..00000000000 --- a/common/changes/@microsoft/api-extractor-model/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@microsoft/api-extractor-model", - "comment": "", - "type": "none" - } - ], - "packageName": "@microsoft/api-extractor-model" -} \ No newline at end of file diff --git a/common/changes/@microsoft/api-extractor/bump-eslint_2025-10-07-19-34.json b/common/changes/@microsoft/api-extractor/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 752ad7dd46f..00000000000 --- a/common/changes/@microsoft/api-extractor/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@microsoft/api-extractor", - "comment": "", - "type": "none" - } - ], - "packageName": "@microsoft/api-extractor" -} \ No newline at end of file diff --git a/common/changes/@microsoft/load-themed-styles/bump-eslint_2025-10-07-19-34.json b/common/changes/@microsoft/load-themed-styles/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 3456eae9593..00000000000 --- a/common/changes/@microsoft/load-themed-styles/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@microsoft/load-themed-styles", - "comment": "", - "type": "none" - } - ], - "packageName": "@microsoft/load-themed-styles" -} \ No newline at end of file diff --git a/common/changes/@microsoft/loader-load-themed-styles/bump-eslint_2025-10-07-19-34.json b/common/changes/@microsoft/loader-load-themed-styles/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 23bb9c24d0b..00000000000 --- a/common/changes/@microsoft/loader-load-themed-styles/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@microsoft/loader-load-themed-styles", - "comment": "", - "type": "none" - } - ], - "packageName": "@microsoft/loader-load-themed-styles" -} \ No newline at end of file diff --git a/common/changes/@microsoft/rush/copilot-add-path-project-selector-parser_2025-11-17-22-30.json b/common/changes/@microsoft/rush/copilot-add-path-project-selector-parser_2025-11-17-22-30.json new file mode 100644 index 00000000000..78ce57f1a7c --- /dev/null +++ b/common/changes/@microsoft/rush/copilot-add-path-project-selector-parser_2025-11-17-22-30.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Added the ability to select projects via path, e.g. `rush build --to path:./my-project` or `rush build --only path:/some/absolute/path`", + "type": "minor", + "packageName": "@microsoft/rush" + } + ], + "packageName": "@microsoft/rush", + "email": "198982749+Copilot@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@microsoft/rush/copilot-add-project-level-parameter-ignoring_2025-11-13-00-17.json b/common/changes/@microsoft/rush/copilot-add-project-level-parameter-ignoring_2025-11-13-00-17.json new file mode 100644 index 00000000000..977b38c66c7 --- /dev/null +++ b/common/changes/@microsoft/rush/copilot-add-project-level-parameter-ignoring_2025-11-13-00-17.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Add project-level parameter ignoring to prevent unnecessary cache invalidation. Projects can now use \"parameterNamesToIgnore\" in \"rush-project.json\" to exclude custom command-line parameters that don't affect their operations.", + "type": "minor", + "packageName": "@microsoft/rush" + } + ], + "packageName": "@microsoft/rush", + "email": "198982749+Copilot@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@microsoft/rush/feature-add-minimum-release-age-support_2025-10-07-10-49.json b/common/changes/@microsoft/rush/copilot-sub-pr-5413_2025-11-19-00-01.json similarity index 55% rename from common/changes/@microsoft/rush/feature-add-minimum-release-age-support_2025-10-07-10-49.json rename to common/changes/@microsoft/rush/copilot-sub-pr-5413_2025-11-19-00-01.json index addb3ae3ac1..01d01db0a92 100644 --- a/common/changes/@microsoft/rush/feature-add-minimum-release-age-support_2025-10-07-10-49.json +++ b/common/changes/@microsoft/rush/copilot-sub-pr-5413_2025-11-19-00-01.json @@ -2,7 +2,7 @@ "changes": [ { "packageName": "@microsoft/rush", - "comment": "Add support for PNPM's minimumReleaseAge setting to help mitigate supply chain attacks", + "comment": "Update test dependency", "type": "none" } ], diff --git a/common/changes/@microsoft/rush/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json b/common/changes/@microsoft/rush/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json new file mode 100644 index 00000000000..68f87a1f804 --- /dev/null +++ b/common/changes/@microsoft/rush/copilot-validate-parameter-names-to-ignore_2025-11-13-23-26.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@microsoft/rush" + } + ], + "packageName": "@microsoft/rush", + "email": "198982749+Copilot@users.noreply.github.com" +} diff --git a/common/changes/@microsoft/rush/bump-eslint_2025-10-07-19-34.json b/common/changes/@microsoft/rush/drop-stdout-and-stderr-from-waitForExitAsync_2025-10-21-21-52.json similarity index 100% rename from common/changes/@microsoft/rush/bump-eslint_2025-10-07-19-34.json rename to common/changes/@microsoft/rush/drop-stdout-and-stderr-from-waitForExitAsync_2025-10-21-21-52.json diff --git a/common/changes/@microsoft/rush/eb-concurrency-bug-fix_2025-09-16-19-06.json b/common/changes/@microsoft/rush/eb-concurrency-bug-fix_2025-09-16-19-06.json deleted file mode 100644 index 12fe1d7e9c5..00000000000 --- a/common/changes/@microsoft/rush/eb-concurrency-bug-fix_2025-09-16-19-06.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@microsoft/rush", - "comment": "Add an `allowOversubscription` option to the command definitions in `common/config/rush/command-line.json` to prevent running tasks from exceeding concurrency.", - "type": "none" - } - ], - "packageName": "@microsoft/rush" -} \ No newline at end of file diff --git a/common/changes/@microsoft/rush/extract-credential-cache_2025-10-22-01-44.json b/common/changes/@microsoft/rush/extract-credential-cache_2025-10-22-01-44.json new file mode 100644 index 00000000000..dc9077e574f --- /dev/null +++ b/common/changes/@microsoft/rush/extract-credential-cache_2025-10-22-01-44.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/rush", + "comment": "Extract CredentialCache API out into \"@rushstack/credential-cache\". Reference directly in plugins to avoid pulling in all of \"@rushstack/rush-sdk\" unless necessary.", + "type": "none" + } + ], + "packageName": "@microsoft/rush" +} \ No newline at end of file diff --git a/common/changes/@microsoft/rush/iclanton-fix-make-consistent_2025-10-07-18-30.json b/common/changes/@microsoft/rush/iclanton-fix-make-consistent_2025-10-07-18-30.json deleted file mode 100644 index a6f23c8db6a..00000000000 --- a/common/changes/@microsoft/rush/iclanton-fix-make-consistent_2025-10-07-18-30.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@microsoft/rush", - "comment": "Fix an issue where `rush add --make-consistent ...` may drop the `implicitlyPreferredVersions` and `ensureConsistentVersions` properties from `common/config/rush/common-versions.json`.", - "type": "none" - } - ], - "packageName": "@microsoft/rush" -} \ No newline at end of file diff --git a/common/changes/@microsoft/rush/json-schemas-artifact_2025-11-04-02-46.json b/common/changes/@microsoft/rush/json-schemas-artifact_2025-11-04-02-46.json new file mode 100644 index 00000000000..efcd84c45fb --- /dev/null +++ b/common/changes/@microsoft/rush/json-schemas-artifact_2025-11-04-02-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@microsoft/rush" + } + ], + "packageName": "@microsoft/rush", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@microsoft/rush/sennyeya-fix-redis-error_2025-08-26-23-37.json b/common/changes/@microsoft/rush/sennyeya-fix-redis-error_2025-08-26-23-37.json deleted file mode 100644 index 16ad45039d3..00000000000 --- a/common/changes/@microsoft/rush/sennyeya-fix-redis-error_2025-08-26-23-37.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Treat intermittent ignored redis errors as warnings and allow build to continue.", - "type": "none", - "packageName": "@microsoft/rush" - } - ], - "packageName": "@microsoft/rush", - "email": "aramissennyeydd@users.noreply.github.com" -} \ No newline at end of file diff --git a/common/changes/@microsoft/webpack5-load-themed-styles-loader/bump-eslint_2025-10-07-19-34.json b/common/changes/@microsoft/webpack5-load-themed-styles-loader/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index bbed8f9189c..00000000000 --- a/common/changes/@microsoft/webpack5-load-themed-styles-loader/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@microsoft/webpack5-load-themed-styles-loader", - "comment": "", - "type": "none" - } - ], - "packageName": "@microsoft/webpack5-load-themed-styles-loader" -} \ No newline at end of file diff --git a/common/changes/@rushstack/cpu-profile-summarizer/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/cpu-profile-summarizer/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 1b90c04c1b4..00000000000 --- a/common/changes/@rushstack/cpu-profile-summarizer/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/cpu-profile-summarizer", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/cpu-profile-summarizer" -} \ No newline at end of file diff --git a/common/changes/@rushstack/debug-certificate-manager/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/debug-certificate-manager/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index bdf32c7b09d..00000000000 --- a/common/changes/@rushstack/debug-certificate-manager/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/debug-certificate-manager", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/debug-certificate-manager" -} \ No newline at end of file diff --git a/common/changes/@rushstack/eslint-bulk/import-coalescence_2025-10-07-18-03.json b/common/changes/@rushstack/eslint-bulk/import-coalescence_2025-10-07-18-03.json deleted file mode 100644 index 89ac4fbfb14..00000000000 --- a/common/changes/@rushstack/eslint-bulk/import-coalescence_2025-10-07-18-03.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`.", - "type": "minor", - "packageName": "@rushstack/eslint-bulk" - } - ], - "packageName": "@rushstack/eslint-bulk", - "email": "iclanton@users.noreply.github.com" -} \ No newline at end of file diff --git a/common/changes/@rushstack/eslint-config/import-coalescence_2025-10-07-18-03.json b/common/changes/@rushstack/eslint-config/import-coalescence_2025-10-07-18-03.json deleted file mode 100644 index 20c2e2ec629..00000000000 --- a/common/changes/@rushstack/eslint-config/import-coalescence_2025-10-07-18-03.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`.", - "type": "minor", - "packageName": "@rushstack/eslint-config" - } - ], - "packageName": "@rushstack/eslint-config", - "email": "iclanton@users.noreply.github.com" -} \ No newline at end of file diff --git a/common/changes/@rushstack/eslint-patch/import-coalescence_2025-10-07-18-03.json b/common/changes/@rushstack/eslint-patch/import-coalescence_2025-10-07-18-03.json deleted file mode 100644 index 675f0f1187d..00000000000 --- a/common/changes/@rushstack/eslint-patch/import-coalescence_2025-10-07-18-03.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`.", - "type": "minor", - "packageName": "@rushstack/eslint-patch" - } - ], - "packageName": "@rushstack/eslint-patch", - "email": "iclanton@users.noreply.github.com" -} \ No newline at end of file diff --git a/common/changes/@rushstack/eslint-plugin-packlets/import-coalescence_2025-10-07-18-03.json b/common/changes/@rushstack/eslint-plugin-packlets/2025-11-11-01-31.json similarity index 60% rename from common/changes/@rushstack/eslint-plugin-packlets/import-coalescence_2025-10-07-18-03.json rename to common/changes/@rushstack/eslint-plugin-packlets/2025-11-11-01-31.json index f89ad03e722..a04cd0021ef 100644 --- a/common/changes/@rushstack/eslint-plugin-packlets/import-coalescence_2025-10-07-18-03.json +++ b/common/changes/@rushstack/eslint-plugin-packlets/2025-11-11-01-31.json @@ -1,8 +1,8 @@ { "changes": [ { - "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`.", - "type": "minor", + "comment": "", + "type": "none", "packageName": "@rushstack/eslint-plugin-packlets" } ], diff --git a/common/changes/@rushstack/eslint-plugin-packlets/bump-cyclics_2025-10-24-22-51.json b/common/changes/@rushstack/eslint-plugin-packlets/bump-cyclics_2025-10-24-22-51.json new file mode 100644 index 00000000000..a04cd0021ef --- /dev/null +++ b/common/changes/@rushstack/eslint-plugin-packlets/bump-cyclics_2025-10-24-22-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/eslint-plugin-packlets" + } + ], + "packageName": "@rushstack/eslint-plugin-packlets", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/eslint-plugin-packlets/main_2025-10-14-22-16.json b/common/changes/@rushstack/eslint-plugin-packlets/main_2025-10-14-22-16.json new file mode 100644 index 00000000000..a04cd0021ef --- /dev/null +++ b/common/changes/@rushstack/eslint-plugin-packlets/main_2025-10-14-22-16.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/eslint-plugin-packlets" + } + ], + "packageName": "@rushstack/eslint-plugin-packlets", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/eslint-plugin-security/import-coalescence_2025-10-07-18-03.json b/common/changes/@rushstack/eslint-plugin-security/2025-11-11-01-31.json similarity index 60% rename from common/changes/@rushstack/eslint-plugin-security/import-coalescence_2025-10-07-18-03.json rename to common/changes/@rushstack/eslint-plugin-security/2025-11-11-01-31.json index d50c08266ad..e8c34c96411 100644 --- a/common/changes/@rushstack/eslint-plugin-security/import-coalescence_2025-10-07-18-03.json +++ b/common/changes/@rushstack/eslint-plugin-security/2025-11-11-01-31.json @@ -1,8 +1,8 @@ { "changes": [ { - "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`.", - "type": "minor", + "comment": "", + "type": "none", "packageName": "@rushstack/eslint-plugin-security" } ], diff --git a/common/changes/@rushstack/eslint-plugin-security/bump-cyclics_2025-10-24-22-51.json b/common/changes/@rushstack/eslint-plugin-security/bump-cyclics_2025-10-24-22-51.json new file mode 100644 index 00000000000..e8c34c96411 --- /dev/null +++ b/common/changes/@rushstack/eslint-plugin-security/bump-cyclics_2025-10-24-22-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/eslint-plugin-security" + } + ], + "packageName": "@rushstack/eslint-plugin-security", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/eslint-plugin-security/main_2025-10-14-22-16.json b/common/changes/@rushstack/eslint-plugin-security/main_2025-10-14-22-16.json new file mode 100644 index 00000000000..e8c34c96411 --- /dev/null +++ b/common/changes/@rushstack/eslint-plugin-security/main_2025-10-14-22-16.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/eslint-plugin-security" + } + ], + "packageName": "@rushstack/eslint-plugin-security", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/eslint-plugin/import-coalescence_2025-10-07-18-03.json b/common/changes/@rushstack/eslint-plugin/2025-11-11-01-31.json similarity index 58% rename from common/changes/@rushstack/eslint-plugin/import-coalescence_2025-10-07-18-03.json rename to common/changes/@rushstack/eslint-plugin/2025-11-11-01-31.json index 8cd3acedcd7..5669a1df6aa 100644 --- a/common/changes/@rushstack/eslint-plugin/import-coalescence_2025-10-07-18-03.json +++ b/common/changes/@rushstack/eslint-plugin/2025-11-11-01-31.json @@ -1,8 +1,8 @@ { "changes": [ { - "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`.", - "type": "minor", + "comment": "", + "type": "none", "packageName": "@rushstack/eslint-plugin" } ], diff --git a/common/changes/@rushstack/hashed-folder-copy-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/hashed-folder-copy-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index e8c42a34e96..00000000000 --- a/common/changes/@rushstack/hashed-folder-copy-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/hashed-folder-copy-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/hashed-folder-copy-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-api-extractor-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/heft-api-extractor-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 95128aed453..00000000000 --- a/common/changes/@rushstack/heft-api-extractor-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/heft-api-extractor-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/heft-api-extractor-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-config-file/2025-11-11-01-31.json b/common/changes/@rushstack/heft-config-file/2025-11-11-01-31.json new file mode 100644 index 00000000000..ebc8dd79c07 --- /dev/null +++ b/common/changes/@rushstack/heft-config-file/2025-11-11-01-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/heft-config-file" + } + ], + "packageName": "@rushstack/heft-config-file", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-config-file/bump-cyclics_2025-10-24-22-51.json b/common/changes/@rushstack/heft-config-file/bump-cyclics_2025-10-24-22-51.json new file mode 100644 index 00000000000..ebc8dd79c07 --- /dev/null +++ b/common/changes/@rushstack/heft-config-file/bump-cyclics_2025-10-24-22-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/heft-config-file" + } + ], + "packageName": "@rushstack/heft-config-file", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-config-file/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/heft-config-file/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 9b24a4fdcca..00000000000 --- a/common/changes/@rushstack/heft-config-file/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/heft-config-file", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/heft-config-file" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-dev-cert-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/heft-dev-cert-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index f7935d46bb6..00000000000 --- a/common/changes/@rushstack/heft-dev-cert-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/heft-dev-cert-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/heft-dev-cert-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-isolated-typescript-transpile-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/heft-isolated-typescript-transpile-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index fbd4c12b6b9..00000000000 --- a/common/changes/@rushstack/heft-isolated-typescript-transpile-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/heft-isolated-typescript-transpile-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/heft-isolated-typescript-transpile-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-jest-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/heft-jest-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 8453696f39b..00000000000 --- a/common/changes/@rushstack/heft-jest-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/heft-jest-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/heft-jest-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-json-schema-typings-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/heft-json-schema-typings-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 2f43b097961..00000000000 --- a/common/changes/@rushstack/heft-json-schema-typings-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/heft-json-schema-typings-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/heft-json-schema-typings-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-lint-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/heft-lint-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index a259901b76f..00000000000 --- a/common/changes/@rushstack/heft-lint-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/heft-lint-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/heft-lint-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-localization-typings-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/heft-localization-typings-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index e3dd3971b44..00000000000 --- a/common/changes/@rushstack/heft-localization-typings-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/heft-localization-typings-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/heft-localization-typings-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-node-rig/import-coalescence_2025-10-07-18-03.json b/common/changes/@rushstack/heft-node-rig/import-coalescence_2025-10-07-18-03.json deleted file mode 100644 index 8f947644d90..00000000000 --- a/common/changes/@rushstack/heft-node-rig/import-coalescence_2025-10-07-18-03.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`.", - "type": "minor", - "packageName": "@rushstack/heft-node-rig" - } - ], - "packageName": "@rushstack/heft-node-rig", - "email": "iclanton@users.noreply.github.com" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-sass-load-themed-styles-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/heft-sass-load-themed-styles-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index d07b9f31fb1..00000000000 --- a/common/changes/@rushstack/heft-sass-load-themed-styles-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/heft-sass-load-themed-styles-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/heft-sass-load-themed-styles-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-sass-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/heft-sass-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 501a07dfec7..00000000000 --- a/common/changes/@rushstack/heft-sass-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/heft-sass-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/heft-sass-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-serverless-stack-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/heft-serverless-stack-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index c5594c67a8a..00000000000 --- a/common/changes/@rushstack/heft-serverless-stack-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/heft-serverless-stack-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/heft-serverless-stack-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-storybook-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/heft-storybook-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index a46619d0a73..00000000000 --- a/common/changes/@rushstack/heft-storybook-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/heft-storybook-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/heft-storybook-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-typescript-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/heft-typescript-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index cb6f98ca14f..00000000000 --- a/common/changes/@rushstack/heft-typescript-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/heft-typescript-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/heft-typescript-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-vscode-extension-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/heft-vscode-extension-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index d41b913ed50..00000000000 --- a/common/changes/@rushstack/heft-vscode-extension-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/heft-vscode-extension-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/heft-vscode-extension-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-vscode-extension-rig/import-coalescence_2025-10-07-18-03.json b/common/changes/@rushstack/heft-vscode-extension-rig/import-coalescence_2025-10-07-18-03.json deleted file mode 100644 index 565a73e49b3..00000000000 --- a/common/changes/@rushstack/heft-vscode-extension-rig/import-coalescence_2025-10-07-18-03.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`.", - "type": "minor", - "packageName": "@rushstack/heft-vscode-extension-rig" - } - ], - "packageName": "@rushstack/heft-vscode-extension-rig", - "email": "iclanton@users.noreply.github.com" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-web-rig/import-coalescence_2025-10-07-18-03.json b/common/changes/@rushstack/heft-web-rig/import-coalescence_2025-10-07-18-03.json deleted file mode 100644 index 63eb99ada8d..00000000000 --- a/common/changes/@rushstack/heft-web-rig/import-coalescence_2025-10-07-18-03.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "changes": [ - { - "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`.", - "type": "minor", - "packageName": "@rushstack/heft-web-rig" - } - ], - "packageName": "@rushstack/heft-web-rig", - "email": "iclanton@users.noreply.github.com" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-webpack4-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/heft-webpack4-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index e6a91323381..00000000000 --- a/common/changes/@rushstack/heft-webpack4-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/heft-webpack4-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/heft-webpack4-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-webpack5-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/heft-webpack5-plugin/copilot-sub-pr-5413_2025-11-19-00-01.json similarity index 66% rename from common/changes/@rushstack/heft-webpack5-plugin/bump-eslint_2025-10-07-19-34.json rename to common/changes/@rushstack/heft-webpack5-plugin/copilot-sub-pr-5413_2025-11-19-00-01.json index e62ded6bf1b..8df9ecc43a7 100644 --- a/common/changes/@rushstack/heft-webpack5-plugin/bump-eslint_2025-10-07-19-34.json +++ b/common/changes/@rushstack/heft-webpack5-plugin/copilot-sub-pr-5413_2025-11-19-00-01.json @@ -2,8 +2,8 @@ "changes": [ { "packageName": "@rushstack/heft-webpack5-plugin", - "comment": "", - "type": "none" + "comment": "Update webpack peer dependency", + "type": "patch" } ], "packageName": "@rushstack/heft-webpack5-plugin" diff --git a/common/changes/@rushstack/heft/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/heft/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 4da3f257a2d..00000000000 --- a/common/changes/@rushstack/heft/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/heft", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/heft" -} \ No newline at end of file diff --git a/common/changes/@rushstack/loader-raw-script/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/loader-raw-script/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index fa3b1d6ee40..00000000000 --- a/common/changes/@rushstack/loader-raw-script/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/loader-raw-script", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/loader-raw-script" -} \ No newline at end of file diff --git a/common/changes/@rushstack/localization-utilities/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/localization-utilities/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 3830d7f42e0..00000000000 --- a/common/changes/@rushstack/localization-utilities/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/localization-utilities", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/localization-utilities" -} \ No newline at end of file diff --git a/common/changes/@rushstack/lockfile-explorer/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/lockfile-explorer/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 22d17643a68..00000000000 --- a/common/changes/@rushstack/lockfile-explorer/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/lockfile-explorer", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/lockfile-explorer" -} \ No newline at end of file diff --git a/common/changes/@rushstack/lookup-by-path/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/lookup-by-path/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 2c66824cd90..00000000000 --- a/common/changes/@rushstack/lookup-by-path/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/lookup-by-path", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/lookup-by-path" -} \ No newline at end of file diff --git a/common/changes/@rushstack/mcp-server/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/mcp-server/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 827fb92cfee..00000000000 --- a/common/changes/@rushstack/mcp-server/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/mcp-server", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/mcp-server" -} \ No newline at end of file diff --git a/common/changes/@rushstack/module-minifier/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/module-minifier/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index f0a60db970f..00000000000 --- a/common/changes/@rushstack/module-minifier/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/module-minifier", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/module-minifier" -} \ No newline at end of file diff --git a/common/changes/@rushstack/node-core-library/2025-11-11-01-31.json b/common/changes/@rushstack/node-core-library/2025-11-11-01-31.json new file mode 100644 index 00000000000..db57b2feb86 --- /dev/null +++ b/common/changes/@rushstack/node-core-library/2025-11-11-01-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/node-core-library" + } + ], + "packageName": "@rushstack/node-core-library", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/node-core-library/bump-cyclics_2025-10-24-22-51.json b/common/changes/@rushstack/node-core-library/bump-cyclics_2025-10-24-22-51.json new file mode 100644 index 00000000000..db57b2feb86 --- /dev/null +++ b/common/changes/@rushstack/node-core-library/bump-cyclics_2025-10-24-22-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/node-core-library" + } + ], + "packageName": "@rushstack/node-core-library", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/node-core-library/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/node-core-library/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index d702845598d..00000000000 --- a/common/changes/@rushstack/node-core-library/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/node-core-library", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/node-core-library" -} \ No newline at end of file diff --git a/common/changes/@rushstack/operation-graph/2025-11-11-01-31.json b/common/changes/@rushstack/operation-graph/2025-11-11-01-31.json new file mode 100644 index 00000000000..ccb47662fbf --- /dev/null +++ b/common/changes/@rushstack/operation-graph/2025-11-11-01-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/operation-graph" + } + ], + "packageName": "@rushstack/operation-graph", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/operation-graph/bump-cyclics_2025-10-24-22-51.json b/common/changes/@rushstack/operation-graph/bump-cyclics_2025-10-24-22-51.json new file mode 100644 index 00000000000..ccb47662fbf --- /dev/null +++ b/common/changes/@rushstack/operation-graph/bump-cyclics_2025-10-24-22-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/operation-graph" + } + ], + "packageName": "@rushstack/operation-graph", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/operation-graph/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/operation-graph/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index eabefe94ed8..00000000000 --- a/common/changes/@rushstack/operation-graph/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/operation-graph", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/operation-graph" -} \ No newline at end of file diff --git a/common/changes/@rushstack/package-deps-hash/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/package-deps-hash/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 11a344e6c99..00000000000 --- a/common/changes/@rushstack/package-deps-hash/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/package-deps-hash", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/package-deps-hash" -} \ No newline at end of file diff --git a/common/changes/@rushstack/package-extractor/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/package-extractor/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 672fa0fcb35..00000000000 --- a/common/changes/@rushstack/package-extractor/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/package-extractor", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/package-extractor" -} \ No newline at end of file diff --git a/common/changes/@rushstack/problem-matcher/2025-11-11-01-31.json b/common/changes/@rushstack/problem-matcher/2025-11-11-01-31.json new file mode 100644 index 00000000000..a8d616334fa --- /dev/null +++ b/common/changes/@rushstack/problem-matcher/2025-11-11-01-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/problem-matcher" + } + ], + "packageName": "@rushstack/problem-matcher", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/problem-matcher/bump-cyclics_2025-10-24-22-51.json b/common/changes/@rushstack/problem-matcher/bump-cyclics_2025-10-24-22-51.json new file mode 100644 index 00000000000..a8d616334fa --- /dev/null +++ b/common/changes/@rushstack/problem-matcher/bump-cyclics_2025-10-24-22-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/problem-matcher" + } + ], + "packageName": "@rushstack/problem-matcher", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/problem-matcher/main_2025-10-14-22-16.json b/common/changes/@rushstack/problem-matcher/main_2025-10-14-22-16.json new file mode 100644 index 00000000000..a8d616334fa --- /dev/null +++ b/common/changes/@rushstack/problem-matcher/main_2025-10-14-22-16.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/problem-matcher" + } + ], + "packageName": "@rushstack/problem-matcher", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/rig-package/2025-11-11-01-31.json b/common/changes/@rushstack/rig-package/2025-11-11-01-31.json new file mode 100644 index 00000000000..c66505525a1 --- /dev/null +++ b/common/changes/@rushstack/rig-package/2025-11-11-01-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/rig-package" + } + ], + "packageName": "@rushstack/rig-package", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/rig-package/bump-cyclics_2025-10-24-22-51.json b/common/changes/@rushstack/rig-package/bump-cyclics_2025-10-24-22-51.json new file mode 100644 index 00000000000..c66505525a1 --- /dev/null +++ b/common/changes/@rushstack/rig-package/bump-cyclics_2025-10-24-22-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/rig-package" + } + ], + "packageName": "@rushstack/rig-package", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/rig-package/json-schemas-artifact_2025-11-04-02-46.json b/common/changes/@rushstack/rig-package/json-schemas-artifact_2025-11-04-02-46.json new file mode 100644 index 00000000000..c66505525a1 --- /dev/null +++ b/common/changes/@rushstack/rig-package/json-schemas-artifact_2025-11-04-02-46.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/rig-package" + } + ], + "packageName": "@rushstack/rig-package", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/rig-package/main_2025-10-14-22-16.json b/common/changes/@rushstack/rig-package/main_2025-10-14-22-16.json new file mode 100644 index 00000000000..c66505525a1 --- /dev/null +++ b/common/changes/@rushstack/rig-package/main_2025-10-14-22-16.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/rig-package" + } + ], + "packageName": "@rushstack/rig-package", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/rundown/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/rundown/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index d9288bd4be0..00000000000 --- a/common/changes/@rushstack/rundown/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/rundown", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/rundown" -} \ No newline at end of file diff --git a/common/changes/@rushstack/rush-mcp-docs-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/rush-mcp-docs-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index a6cef2ff676..00000000000 --- a/common/changes/@rushstack/rush-mcp-docs-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/rush-mcp-docs-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/rush-mcp-docs-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/set-webpack-public-path-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/set-webpack-public-path-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index c20361cc891..00000000000 --- a/common/changes/@rushstack/set-webpack-public-path-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/set-webpack-public-path-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/set-webpack-public-path-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/stream-collator/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/stream-collator/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 28cdccee576..00000000000 --- a/common/changes/@rushstack/stream-collator/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/stream-collator", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/stream-collator" -} \ No newline at end of file diff --git a/common/changes/@rushstack/terminal/2025-11-11-01-31.json b/common/changes/@rushstack/terminal/2025-11-11-01-31.json new file mode 100644 index 00000000000..13894830365 --- /dev/null +++ b/common/changes/@rushstack/terminal/2025-11-11-01-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/terminal" + } + ], + "packageName": "@rushstack/terminal", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/terminal/bump-cyclics_2025-10-24-22-51.json b/common/changes/@rushstack/terminal/bump-cyclics_2025-10-24-22-51.json new file mode 100644 index 00000000000..13894830365 --- /dev/null +++ b/common/changes/@rushstack/terminal/bump-cyclics_2025-10-24-22-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/terminal" + } + ], + "packageName": "@rushstack/terminal", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/terminal/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/terminal/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 72b4a6eb492..00000000000 --- a/common/changes/@rushstack/terminal/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/terminal", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/terminal" -} \ No newline at end of file diff --git a/common/changes/@rushstack/trace-import/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/trace-import/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 2309cf5a036..00000000000 --- a/common/changes/@rushstack/trace-import/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/trace-import", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/trace-import" -} \ No newline at end of file diff --git a/common/changes/@rushstack/tree-pattern/2025-11-11-01-31.json b/common/changes/@rushstack/tree-pattern/2025-11-11-01-31.json new file mode 100644 index 00000000000..619a10c75e3 --- /dev/null +++ b/common/changes/@rushstack/tree-pattern/2025-11-11-01-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/tree-pattern" + } + ], + "packageName": "@rushstack/tree-pattern", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/tree-pattern/bump-cyclics_2025-10-24-22-51.json b/common/changes/@rushstack/tree-pattern/bump-cyclics_2025-10-24-22-51.json new file mode 100644 index 00000000000..619a10c75e3 --- /dev/null +++ b/common/changes/@rushstack/tree-pattern/bump-cyclics_2025-10-24-22-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/tree-pattern" + } + ], + "packageName": "@rushstack/tree-pattern", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/tree-pattern/main_2025-10-14-22-16.json b/common/changes/@rushstack/tree-pattern/main_2025-10-14-22-16.json new file mode 100644 index 00000000000..619a10c75e3 --- /dev/null +++ b/common/changes/@rushstack/tree-pattern/main_2025-10-14-22-16.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/tree-pattern" + } + ], + "packageName": "@rushstack/tree-pattern", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/ts-command-line/2025-11-11-01-31.json b/common/changes/@rushstack/ts-command-line/2025-11-11-01-31.json new file mode 100644 index 00000000000..1f3658b8dc4 --- /dev/null +++ b/common/changes/@rushstack/ts-command-line/2025-11-11-01-31.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/ts-command-line" + } + ], + "packageName": "@rushstack/ts-command-line", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/ts-command-line/bump-cyclics_2025-10-24-22-51.json b/common/changes/@rushstack/ts-command-line/bump-cyclics_2025-10-24-22-51.json new file mode 100644 index 00000000000..1f3658b8dc4 --- /dev/null +++ b/common/changes/@rushstack/ts-command-line/bump-cyclics_2025-10-24-22-51.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "", + "type": "none", + "packageName": "@rushstack/ts-command-line" + } + ], + "packageName": "@rushstack/ts-command-line", + "email": "iclanton@users.noreply.github.com" +} \ No newline at end of file diff --git a/common/changes/@rushstack/ts-command-line/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/ts-command-line/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index a03064b455f..00000000000 --- a/common/changes/@rushstack/ts-command-line/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/ts-command-line", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/ts-command-line" -} \ No newline at end of file diff --git a/common/changes/@rushstack/typings-generator/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/typings-generator/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 8f04a7afc26..00000000000 --- a/common/changes/@rushstack/typings-generator/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/typings-generator", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/typings-generator" -} \ No newline at end of file diff --git a/common/changes/@rushstack/webpack-embedded-dependencies-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/webpack-embedded-dependencies-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 0faabd97885..00000000000 --- a/common/changes/@rushstack/webpack-embedded-dependencies-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/webpack-embedded-dependencies-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/webpack-embedded-dependencies-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/webpack-plugin-utilities/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/webpack-plugin-utilities/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index d21d57bcf4b..00000000000 --- a/common/changes/@rushstack/webpack-plugin-utilities/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/webpack-plugin-utilities", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/webpack-plugin-utilities" -} \ No newline at end of file diff --git a/common/changes/@rushstack/webpack-preserve-dynamic-require-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/webpack-preserve-dynamic-require-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index c5e4ec7c3bd..00000000000 --- a/common/changes/@rushstack/webpack-preserve-dynamic-require-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/webpack-preserve-dynamic-require-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/webpack-preserve-dynamic-require-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/webpack-workspace-resolve-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/webpack-workspace-resolve-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index a7f61b90429..00000000000 --- a/common/changes/@rushstack/webpack-workspace-resolve-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/webpack-workspace-resolve-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/webpack-workspace-resolve-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/webpack4-localization-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/webpack4-localization-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index c14ade57098..00000000000 --- a/common/changes/@rushstack/webpack4-localization-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/webpack4-localization-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/webpack4-localization-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/webpack4-module-minifier-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/webpack4-module-minifier-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 27770560564..00000000000 --- a/common/changes/@rushstack/webpack4-module-minifier-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/webpack4-module-minifier-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/webpack4-module-minifier-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/webpack5-localization-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/webpack5-localization-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 4d848c3d7d8..00000000000 --- a/common/changes/@rushstack/webpack5-localization-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/webpack5-localization-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/webpack5-localization-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/webpack5-module-minifier-plugin/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/webpack5-module-minifier-plugin/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 6b6bb2f7f49..00000000000 --- a/common/changes/@rushstack/webpack5-module-minifier-plugin/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/webpack5-module-minifier-plugin", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/webpack5-module-minifier-plugin" -} \ No newline at end of file diff --git a/common/changes/@rushstack/worker-pool/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/worker-pool/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index fa7e5515dd6..00000000000 --- a/common/changes/@rushstack/worker-pool/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/worker-pool", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/worker-pool" -} \ No newline at end of file diff --git a/common/changes/@rushstack/zipsync/bump-eslint_2025-10-07-19-34.json b/common/changes/@rushstack/zipsync/bump-eslint_2025-10-07-19-34.json deleted file mode 100644 index 56706305c1e..00000000000 --- a/common/changes/@rushstack/zipsync/bump-eslint_2025-10-07-19-34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@rushstack/zipsync", - "comment": "", - "type": "none" - } - ], - "packageName": "@rushstack/zipsync" -} \ No newline at end of file diff --git a/common/config/azure-pipelines/npm-publish-rush.yaml b/common/config/azure-pipelines/npm-publish-rush.yaml index 4ac6559321a..2502d76dbd5 100644 --- a/common/config/azure-pipelines/npm-publish-rush.yaml +++ b/common/config/azure-pipelines/npm-publish-rush.yaml @@ -29,6 +29,9 @@ extends: - output: pipelineArtifact targetPath: $(Build.ArtifactStagingDirectory)/published-versions artifactName: published-versions + - output: pipelineArtifact + targetPath: $(Build.ArtifactStagingDirectory)/json-schemas + artifactName: json-schemas steps: - checkout: self persistCredentials: true @@ -60,4 +63,4 @@ extends: VersionPolicyName: rush BranchName: $(SourceBranch) - - template: /common/config/azure-pipelines/templates/record-published-versions.yaml@self + - template: /common/config/azure-pipelines/templates/post-publish.yaml@self diff --git a/common/config/azure-pipelines/npm-publish.yaml b/common/config/azure-pipelines/npm-publish.yaml index e71295fae66..86f88fa8040 100644 --- a/common/config/azure-pipelines/npm-publish.yaml +++ b/common/config/azure-pipelines/npm-publish.yaml @@ -29,6 +29,9 @@ extends: - output: pipelineArtifact targetPath: $(Build.ArtifactStagingDirectory)/published-versions artifactName: published-versions + - output: pipelineArtifact + targetPath: $(Build.ArtifactStagingDirectory)/json-schemas + artifactName: json-schemas steps: - checkout: self persistCredentials: true @@ -50,4 +53,4 @@ extends: VersionPolicyName: noRush BranchName: $(SourceBranch) - - template: /common/config/azure-pipelines/templates/record-published-versions.yaml@self + - template: /common/config/azure-pipelines/templates/post-publish.yaml@self diff --git a/common/config/azure-pipelines/templates/record-published-versions.yaml b/common/config/azure-pipelines/templates/post-publish.yaml similarity index 51% rename from common/config/azure-pipelines/templates/record-published-versions.yaml rename to common/config/azure-pipelines/templates/post-publish.yaml index 9f234db9f8b..ecf0da731d2 100644 --- a/common/config/azure-pipelines/templates/record-published-versions.yaml +++ b/common/config/azure-pipelines/templates/post-publish.yaml @@ -1,7 +1,5 @@ -steps: - - script: 'node repo-scripts/repo-toolbox/lib/start.js record-versions --out-file $(Build.ArtifactStagingDirectory)/published-versions/published-versions.json' - displayName: 'Record Published Versions' - # Published by the 1ES template - # - publish: $(Build.ArtifactStagingDirectory)/published-versions - # artifact: published-versions - # displayName: 'Publish Artifact: published-versions' +steps: + - script: 'node repo-scripts/repo-toolbox/lib/start.js record-versions --out-file $(Build.ArtifactStagingDirectory)/published-versions/published-versions.json' + displayName: 'Record Published Versions' + - script: 'node repo-scripts/repo-toolbox/lib/start.js collect-json-schemas --output-path $(Build.ArtifactStagingDirectory)/json-schemas' + displayName: 'Collect JSON Schemas' diff --git a/common/config/rush/nonbrowser-approved-packages.json b/common/config/rush/nonbrowser-approved-packages.json index 164d3881b80..161327d854d 100644 --- a/common/config/rush/nonbrowser-approved-packages.json +++ b/common/config/rush/nonbrowser-approved-packages.json @@ -122,6 +122,18 @@ "name": "@redis/client", "allowedCategories": [ "libraries" ] }, + { + "name": "@rspack/core", + "allowedCategories": [ "libraries", "tests" ] + }, + { + "name": "@rspack/dev-server", + "allowedCategories": [ "libraries" ] + }, + { + "name": "@rushstack/credential-cache", + "allowedCategories": [ "libraries" ] + }, { "name": "@rushstack/debug-certificate-manager", "allowedCategories": [ "libraries", "vscode-extensions" ] @@ -194,6 +206,10 @@ "name": "@rushstack/heft-node-rig", "allowedCategories": [ "libraries", "tests", "vscode-extensions" ] }, + { + "name": "@rushstack/heft-rspack-plugin", + "allowedCategories": [ "tests" ] + }, { "name": "@rushstack/heft-sass-load-themed-styles-plugin", "allowedCategories": [ "tests" ] @@ -258,6 +274,10 @@ "name": "@rushstack/node-core-library", "allowedCategories": [ "libraries", "tests", "vscode-extensions" ] }, + { + "name": "@rushstack/npm-check-fork", + "allowedCategories": [ "libraries" ] + }, { "name": "@rushstack/operation-graph", "allowedCategories": [ "libraries" ] @@ -646,6 +666,10 @@ "name": "git-repo-info", "allowedCategories": [ "libraries" ] }, + { + "name": "giturl", + "allowedCategories": [ "libraries" ] + }, { "name": "glob", "allowedCategories": [ "libraries", "vscode-extensions" ] @@ -862,6 +886,10 @@ "name": "package-extractor-test-03", "allowedCategories": [ "tests" ] }, + { + "name": "package-json", + "allowedCategories": [ "libraries" ] + }, { "name": "pnpm-sync-lib", "allowedCategories": [ "libraries" ] @@ -974,6 +1002,10 @@ "name": "terser-webpack-plugin", "allowedCategories": [ "libraries", "tests" ] }, + { + "name": "throat", + "allowedCategories": [ "libraries" ] + }, { "name": "timsort", "allowedCategories": [ "libraries" ] diff --git a/common/config/rush/version-policies.json b/common/config/rush/version-policies.json index c594b13092c..3ea93736d4c 100644 --- a/common/config/rush/version-policies.json +++ b/common/config/rush/version-policies.json @@ -102,7 +102,7 @@ { "policyName": "rush", "definitionName": "lockStepVersion", - "version": "5.160.1", + "version": "5.162.0", "nextBump": "minor", "mainProject": "@microsoft/rush" } diff --git a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml index 9fe7a740ba7..0a08c742bfd 100644 --- a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml +++ b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml @@ -111,10 +111,10 @@ importers: version: file:../../../apps/heft(@types/node@20.17.19) '@rushstack/heft-lint-plugin': specifier: file:../../heft-plugins/heft-lint-plugin - version: file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@1.1.1)(@types/node@20.17.19) + version: file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@1.1.5)(@types/node@20.17.19) '@rushstack/heft-typescript-plugin': specifier: file:../../heft-plugins/heft-typescript-plugin - version: file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@1.1.1)(@types/node@20.17.19) + version: file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@1.1.5)(@types/node@20.17.19) eslint: specifier: ~9.25.1 version: 9.25.1 @@ -994,17 +994,17 @@ packages: dependencies: jsep: 1.4.0 - /@microsoft/tsdoc-config@0.17.1: - resolution: {integrity: sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==} + /@microsoft/tsdoc-config@0.18.0: + resolution: {integrity: sha512-8N/vClYyfOH+l4fLkkr9+myAoR6M7akc8ntBJ4DJdWH2b09uVfr71+LTMpNyG19fNqWDg8KEDZhx5wxuqHyGjw==} dependencies: - '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc': 0.16.0 ajv: 8.12.0 jju: 1.4.0 resolve: 1.22.8 dev: true - /@microsoft/tsdoc@0.15.1: - resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} + /@microsoft/tsdoc@0.16.0: + resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==} dev: true /@nodelib/fs.scandir@2.1.5: @@ -2840,6 +2840,11 @@ packages: engines: {node: '>=0.3.1'} dev: true + /diff@8.0.2: + resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} + engines: {node: '>=0.3.1'} + dev: true + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -3415,11 +3420,28 @@ packages: string.prototype.repeat: 1.0.0 dev: true - /eslint-plugin-tsdoc@0.4.0: - resolution: {integrity: sha512-MT/8b4aKLdDClnS8mP3R/JNjg29i0Oyqd/0ym6NnQf+gfKbJJ4ZcSh2Bs1H0YiUMTBwww5JwXGTWot/RwyJ7aQ==} + /eslint-plugin-tsdoc@0.5.0(eslint@9.25.1)(typescript@4.9.5): + resolution: {integrity: sha512-ush8ehCwub2rgE16OIgQPFyj/o0k3T8kL++9IrAI4knsmupNo8gvfO2ERgDHWWgTC5MglbwLVRswU93HyXqNpw==} dependencies: - '@microsoft/tsdoc': 0.15.1 - '@microsoft/tsdoc-config': 0.17.1 + '@microsoft/tsdoc': 0.16.0 + '@microsoft/tsdoc-config': 0.18.0 + '@typescript-eslint/utils': 8.46.0(eslint@9.25.1)(typescript@4.9.5) + transitivePeerDependencies: + - eslint + - supports-color + - typescript + dev: true + + /eslint-plugin-tsdoc@0.5.0(eslint@9.37.0)(typescript@5.8.2): + resolution: {integrity: sha512-ush8ehCwub2rgE16OIgQPFyj/o0k3T8kL++9IrAI4knsmupNo8gvfO2ERgDHWWgTC5MglbwLVRswU93HyXqNpw==} + dependencies: + '@microsoft/tsdoc': 0.16.0 + '@microsoft/tsdoc-config': 0.18.0 + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0)(typescript@5.8.2) + transitivePeerDependencies: + - eslint + - supports-color + - typescript dev: true /eslint-scope@5.1.1: @@ -3907,6 +3929,10 @@ packages: resolution: {integrity: sha512-qVDEXufVtYUzYqI5hoDUONh9GCEPi0n+e35KNDafdsNt9fPxB0nvFW/kFiw7W42wkg8TUyhBqb+t24yyaoc87A==} engines: {node: '>= 0.10.0'} + /giturl@2.0.0: + resolution: {integrity: sha512-FB0MmghWLcqsyrBZyqsLCNeS2kIzYymT34t/6BxM5R0/9Pxvj0K1eK25SBbwRHMjKMLgQ7nYqBSduF6XyfkgFg==} + engines: {node: '>= 14.17.0'} + /glob-escape@0.0.2: resolution: {integrity: sha512-L/cXYz8x7qer1HAyUQ+mbjcUsJVdpRxpAf7CwqHoNBs9vTpABlGfNN4tzkDxt+u3Z7ZncVyKlCNPtzb0R/7WbA==} engines: {node: '>= 0.10'} @@ -7577,12 +7603,13 @@ packages: hasBin: true dependencies: '@microsoft/api-extractor-model': file:../../../libraries/api-extractor-model(@types/node@20.17.19) - '@microsoft/tsdoc': 0.15.1 - '@microsoft/tsdoc-config': 0.17.1 + '@microsoft/tsdoc': 0.16.0 + '@microsoft/tsdoc-config': 0.18.0 '@rushstack/node-core-library': file:../../../libraries/node-core-library(@types/node@20.17.19) '@rushstack/rig-package': file:../../../libraries/rig-package '@rushstack/terminal': file:../../../libraries/terminal(@types/node@20.17.19) '@rushstack/ts-command-line': file:../../../libraries/ts-command-line(@types/node@20.17.19) + diff: 8.0.2 lodash: 4.17.21 minimatch: 10.0.3 resolve: 1.22.8 @@ -7650,7 +7677,7 @@ packages: eslint: 9.25.1 eslint-plugin-promise: 7.2.1(eslint@9.25.1) eslint-plugin-react: 7.37.5(eslint@9.25.1) - eslint-plugin-tsdoc: 0.4.0 + eslint-plugin-tsdoc: 0.5.0(eslint@9.25.1)(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color @@ -7675,7 +7702,7 @@ packages: eslint: 9.37.0 eslint-plugin-promise: 7.2.1(eslint@9.37.0) eslint-plugin-react: 7.37.5(eslint@9.37.0) - eslint-plugin-tsdoc: 0.4.0 + eslint-plugin-tsdoc: 0.5.0(eslint@9.37.0)(typescript@5.8.2) typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -7801,7 +7828,7 @@ packages: - supports-color dev: true - file:../../../heft-plugins/heft-api-extractor-plugin(@rushstack/heft@1.1.1)(@types/node@20.17.19): + file:../../../heft-plugins/heft-api-extractor-plugin(@rushstack/heft@1.1.5)(@types/node@20.17.19): resolution: {directory: ../../../heft-plugins/heft-api-extractor-plugin, type: directory} id: file:../../../heft-plugins/heft-api-extractor-plugin name: '@rushstack/heft-api-extractor-plugin' @@ -7815,7 +7842,7 @@ packages: - '@types/node' dev: true - file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@1.1.1)(@types/node@20.17.19)(jest-environment-node@29.5.0): + file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@1.1.5)(@types/node@20.17.19)(jest-environment-node@29.5.0): resolution: {directory: ../../../heft-plugins/heft-jest-plugin, type: directory} id: file:../../../heft-plugins/heft-jest-plugin name: '@rushstack/heft-jest-plugin' @@ -7850,7 +7877,7 @@ packages: - ts-node dev: true - file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@1.1.1)(@types/node@20.17.19): + file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@1.1.5)(@types/node@20.17.19): resolution: {directory: ../../../heft-plugins/heft-lint-plugin, type: directory} id: file:../../../heft-plugins/heft-lint-plugin name: '@rushstack/heft-lint-plugin' @@ -7865,7 +7892,7 @@ packages: - '@types/node' dev: true - file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@1.1.1)(@types/node@20.17.19): + file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@1.1.5)(@types/node@20.17.19): resolution: {directory: ../../../heft-plugins/heft-typescript-plugin, type: directory} id: file:../../../heft-plugins/heft-typescript-plugin name: '@rushstack/heft-typescript-plugin' @@ -7887,13 +7914,22 @@ packages: id: file:../../../libraries/api-extractor-model name: '@microsoft/api-extractor-model' dependencies: - '@microsoft/tsdoc': 0.15.1 - '@microsoft/tsdoc-config': 0.17.1 + '@microsoft/tsdoc': 0.16.0 + '@microsoft/tsdoc-config': 0.18.0 '@rushstack/node-core-library': file:../../../libraries/node-core-library(@types/node@20.17.19) transitivePeerDependencies: - '@types/node' dev: true + file:../../../libraries/credential-cache(@types/node@20.17.19): + resolution: {directory: ../../../libraries/credential-cache, type: directory} + id: file:../../../libraries/credential-cache + name: '@rushstack/credential-cache' + dependencies: + '@rushstack/node-core-library': file:../../../libraries/node-core-library(@types/node@20.17.19) + transitivePeerDependencies: + - '@types/node' + file:../../../libraries/heft-config-file(@types/node@20.17.19): resolution: {directory: ../../../libraries/heft-config-file, type: directory} id: file:../../../libraries/heft-config-file @@ -7941,6 +7977,16 @@ packages: resolve: 1.22.8 semver: 7.5.4 + file:../../../libraries/npm-check-fork: + resolution: {directory: ../../../libraries/npm-check-fork, type: directory} + name: '@rushstack/npm-check-fork' + dependencies: + giturl: 2.0.0 + lodash: 4.17.21 + package-json: 7.0.0 + semver: 7.5.4 + throat: 6.0.2 + file:../../../libraries/operation-graph(@types/node@20.17.19): resolution: {directory: ../../../libraries/operation-graph, type: directory} id: file:../../../libraries/operation-graph @@ -8011,9 +8057,11 @@ packages: '@pnpm/dependency-path-lockfile-pre-v10': /@pnpm/dependency-path@5.1.7 '@pnpm/dependency-path-lockfile-pre-v9': /@pnpm/dependency-path@2.1.8 '@pnpm/link-bins': 5.3.25 + '@rushstack/credential-cache': file:../../../libraries/credential-cache(@types/node@20.17.19) '@rushstack/heft-config-file': file:../../../libraries/heft-config-file(@types/node@20.17.19) '@rushstack/lookup-by-path': file:../../../libraries/lookup-by-path(@types/node@20.17.19) '@rushstack/node-core-library': file:../../../libraries/node-core-library(@types/node@20.17.19) + '@rushstack/npm-check-fork': file:../../../libraries/npm-check-fork '@rushstack/package-deps-hash': file:../../../libraries/package-deps-hash(@types/node@20.17.19) '@rushstack/package-extractor': file:../../../libraries/package-extractor(@types/node@20.17.19) '@rushstack/rig-package': file:../../../libraries/rig-package @@ -8057,6 +8105,7 @@ packages: name: '@rushstack/rush-sdk' dependencies: '@pnpm/lockfile.types': 1.0.3 + '@rushstack/credential-cache': file:../../../libraries/credential-cache(@types/node@20.17.19) '@rushstack/lookup-by-path': file:../../../libraries/lookup-by-path(@types/node@20.17.19) '@rushstack/node-core-library': file:../../../libraries/node-core-library(@types/node@20.17.19) '@rushstack/package-deps-hash': file:../../../libraries/package-deps-hash(@types/node@20.17.19) @@ -8108,7 +8157,7 @@ packages: transitivePeerDependencies: - '@types/node' - file:../../../rigs/heft-node-rig(@rushstack/heft@1.1.1)(@types/node@20.17.19): + file:../../../rigs/heft-node-rig(@rushstack/heft@1.1.5)(@types/node@20.17.19): resolution: {directory: ../../../rigs/heft-node-rig, type: directory} id: file:../../../rigs/heft-node-rig name: '@rushstack/heft-node-rig' @@ -8118,10 +8167,10 @@ packages: '@microsoft/api-extractor': file:../../../apps/api-extractor(@types/node@20.17.19) '@rushstack/eslint-config': file:../../../eslint/eslint-config(eslint@9.37.0)(typescript@5.8.2) '@rushstack/heft': file:../../../apps/heft(@types/node@20.17.19) - '@rushstack/heft-api-extractor-plugin': file:../../../heft-plugins/heft-api-extractor-plugin(@rushstack/heft@1.1.1)(@types/node@20.17.19) - '@rushstack/heft-jest-plugin': file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@1.1.1)(@types/node@20.17.19)(jest-environment-node@29.5.0) - '@rushstack/heft-lint-plugin': file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@1.1.1)(@types/node@20.17.19) - '@rushstack/heft-typescript-plugin': file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@1.1.1)(@types/node@20.17.19) + '@rushstack/heft-api-extractor-plugin': file:../../../heft-plugins/heft-api-extractor-plugin(@rushstack/heft@1.1.5)(@types/node@20.17.19) + '@rushstack/heft-jest-plugin': file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@1.1.5)(@types/node@20.17.19)(jest-environment-node@29.5.0) + '@rushstack/heft-lint-plugin': file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@1.1.5)(@types/node@20.17.19) + '@rushstack/heft-typescript-plugin': file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@1.1.5)(@types/node@20.17.19) '@types/heft-jest': 1.0.1 eslint: 9.37.0 jest-environment-node: 29.5.0 @@ -8143,7 +8192,7 @@ packages: '@microsoft/api-extractor': file:../../../apps/api-extractor(@types/node@20.17.19) '@rushstack/eslint-patch': file:../../../eslint/eslint-patch '@rushstack/heft': file:../../../apps/heft(@types/node@20.17.19) - '@rushstack/heft-node-rig': file:../../../rigs/heft-node-rig(@rushstack/heft@1.1.1)(@types/node@20.17.19) + '@rushstack/heft-node-rig': file:../../../rigs/heft-node-rig(@rushstack/heft@1.1.5)(@types/node@20.17.19) '@types/heft-jest': 1.0.1 '@types/node': 20.17.19 eslint: 9.37.0 diff --git a/common/config/subspaces/build-tests-subspace/repo-state.json b/common/config/subspaces/build-tests-subspace/repo-state.json index 3f43909a56d..7fd7090266b 100644 --- a/common/config/subspaces/build-tests-subspace/repo-state.json +++ b/common/config/subspaces/build-tests-subspace/repo-state.json @@ -1,6 +1,6 @@ // DO NOT MODIFY THIS FILE MANUALLY BUT DO COMMIT IT. It is generated and used by Rush. { - "pnpmShrinkwrapHash": "4974365253de0aef83d715d9aa98de2f42bb1681", + "pnpmShrinkwrapHash": "9513fcd009b36a86677db5d68010dee15a526294", "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9", - "packageJsonInjectedDependenciesHash": "8876e70179cb857fd009abbd92788f02f5d9e7b0" + "packageJsonInjectedDependenciesHash": "10959d629cddc9df960467f98e5cf3982e69f38d" } diff --git a/common/config/subspaces/default/common-versions.json b/common/config/subspaces/default/common-versions.json index 67948f39642..bcaa4198eb5 100644 --- a/common/config/subspaces/default/common-versions.json +++ b/common/config/subspaces/default/common-versions.json @@ -143,6 +143,10 @@ "@rushstack/eslint-config": [ // This is used by the ESLint 7 build tests "3.7.1" + ], + "@rushstack/set-webpack-public-path-plugin": [ + // This is used by the webpack 4 localization plugin tests + "^4.1.16" ] } } diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index 9275d8778bc..efe863b0bed 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -25,8 +25,8 @@ importers: specifier: workspace:* version: link:../../libraries/api-extractor-model '@microsoft/tsdoc': - specifier: ~0.15.1 - version: 0.15.1 + specifier: ~0.16.0 + version: 0.16.0 '@rushstack/node-core-library': specifier: workspace:* version: link:../../libraries/node-core-library @@ -65,11 +65,11 @@ importers: specifier: workspace:* version: link:../../libraries/api-extractor-model '@microsoft/tsdoc': - specifier: ~0.15.1 - version: 0.15.1 + specifier: ~0.16.0 + version: 0.16.0 '@microsoft/tsdoc-config': - specifier: ~0.17.1 - version: 0.17.1 + specifier: ~0.18.0 + version: 0.18.0 '@rushstack/node-core-library': specifier: workspace:* version: link:../../libraries/node-core-library @@ -82,6 +82,9 @@ importers: '@rushstack/ts-command-line': specifier: workspace:* version: link:../../libraries/ts-command-line + diff: + specifier: ~8.0.2 + version: 8.0.2 lodash: specifier: ~4.17.15 version: 4.17.21 @@ -102,8 +105,8 @@ importers: version: 5.8.2 devDependencies: '@rushstack/heft': - specifier: 1.1.0 - version: 1.1.0(@types/node@20.17.19) + specifier: 1.1.4 + version: 1.1.4(@types/node@20.17.19) '@types/lodash': specifier: 4.14.116 version: 4.14.116 @@ -185,8 +188,8 @@ importers: specifier: workspace:* version: link:../api-extractor '@rushstack/heft': - specifier: 1.1.0 - version: 1.1.0(@types/node@20.17.19) + specifier: 1.1.4 + version: 1.1.4(@types/node@20.17.19) '@types/watchpack': specifier: 2.4.0 version: 2.4.0 @@ -1817,6 +1820,51 @@ importers: specifier: ~5.8.2 version: 5.8.2 + ../../../build-tests/heft-rspack-everything-test: + devDependencies: + '@rspack/core': + specifier: ~1.6.0-beta.0 + version: 1.6.0-beta.0 + '@rushstack/heft': + specifier: workspace:* + version: link:../../apps/heft + '@rushstack/heft-dev-cert-plugin': + specifier: workspace:* + version: link:../../heft-plugins/heft-dev-cert-plugin + '@rushstack/heft-jest-plugin': + specifier: workspace:* + version: link:../../heft-plugins/heft-jest-plugin + '@rushstack/heft-lint-plugin': + specifier: workspace:* + version: link:../../heft-plugins/heft-lint-plugin + '@rushstack/heft-rspack-plugin': + specifier: workspace:* + version: link:../../heft-plugins/heft-rspack-plugin + '@rushstack/heft-typescript-plugin': + specifier: workspace:* + version: link:../../heft-plugins/heft-typescript-plugin + '@rushstack/node-core-library': + specifier: workspace:* + version: link:../../libraries/node-core-library + '@rushstack/rush-sdk': + specifier: workspace:* + version: link:../../libraries/rush-sdk + '@types/heft-jest': + specifier: 1.0.1 + version: 1.0.1 + '@types/node': + specifier: 20.17.19 + version: 20.17.19 + eslint: + specifier: ~9.37.0 + version: 9.37.0(supports-color@8.1.1) + local-eslint-config: + specifier: workspace:* + version: link:../../eslint/local-eslint-config + typescript: + specifier: ~5.8.2 + version: 5.8.2 + ../../../build-tests/heft-sass-test: dependencies: buttono: @@ -2040,8 +2088,8 @@ importers: specifier: workspace:* version: link:../../apps/api-extractor '@rushstack/eslint-config': - specifier: 4.4.1 - version: 4.4.1(eslint@8.57.0)(typescript@4.9.5) + specifier: 4.5.3 + version: 4.5.3(eslint@8.57.0)(typescript@4.9.5) '@rushstack/eslint-patch': specifier: workspace:* version: link:../../eslint/eslint-patch @@ -2611,8 +2659,8 @@ importers: specifier: ~7.37.5 version: 7.37.5(eslint@9.37.0) eslint-plugin-tsdoc: - specifier: ~0.4.0 - version: 0.4.0 + specifier: ~0.5.0 + version: 0.5.0(eslint@9.37.0)(typescript@5.8.2) devDependencies: eslint: specifier: ~9.37.0 @@ -2624,8 +2672,8 @@ importers: ../../../eslint/eslint-patch: devDependencies: '@rushstack/heft': - specifier: 1.1.0 - version: 1.1.0(@types/node@20.17.19) + specifier: 1.1.4 + version: 1.1.4(@types/node@20.17.19) '@types/eslint-8': specifier: npm:@types/eslint@8.56.10 version: /@types/eslint@8.56.10 @@ -2661,8 +2709,8 @@ importers: version: 8.46.0(eslint@9.37.0)(typescript@5.8.2) devDependencies: '@rushstack/heft': - specifier: 1.1.0 - version: 1.1.0(@types/node@20.17.19) + specifier: 1.1.4 + version: 1.1.4(@types/node@20.17.19) '@typescript-eslint/parser': specifier: ~8.46.0 version: 8.46.0(eslint@9.37.0)(typescript@5.8.2) @@ -2692,8 +2740,8 @@ importers: version: 8.46.0(eslint@9.37.0)(typescript@5.8.2) devDependencies: '@rushstack/heft': - specifier: 1.1.0 - version: 1.1.0(@types/node@20.17.19) + specifier: 1.1.4 + version: 1.1.4(@types/node@20.17.19) '@typescript-eslint/parser': specifier: ~8.46.0 version: 8.46.0(eslint@9.37.0)(typescript@5.8.2) @@ -2717,8 +2765,8 @@ importers: version: 8.46.0(eslint@9.37.0)(typescript@5.8.2) devDependencies: '@rushstack/heft': - specifier: 1.1.0 - version: 1.1.0(@types/node@20.17.19) + specifier: 1.1.4 + version: 1.1.4(@types/node@20.17.19) '@typescript-eslint/parser': specifier: ~8.46.0 version: 8.46.0(eslint@9.37.0)(typescript@5.8.2) @@ -2775,8 +2823,8 @@ importers: version: 5.2.0(eslint@9.37.0) devDependencies: '@rushstack/heft': - specifier: 1.1.0 - version: 1.1.0(@types/node@20.17.19) + specifier: 1.1.4 + version: 1.1.4(@types/node@20.17.19) decoupled-local-node-rig: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig @@ -3019,6 +3067,40 @@ importers: specifier: workspace:* version: link:../../rigs/local-node-rig + ../../../heft-plugins/heft-rspack-plugin: + dependencies: + '@rspack/dev-server': + specifier: ^1.1.4 + version: 1.1.4(@rspack/core@1.6.0-beta.0)(webpack@5.98.0) + '@rushstack/debug-certificate-manager': + specifier: workspace:* + version: link:../../libraries/debug-certificate-manager + '@rushstack/node-core-library': + specifier: workspace:* + version: link:../../libraries/node-core-library + tapable: + specifier: 2.3.0 + version: 2.3.0 + webpack: + specifier: ~5.98.0 + version: 5.98.0 + devDependencies: + '@rspack/core': + specifier: ~1.6.0-beta.0 + version: 1.6.0-beta.0 + '@rushstack/heft': + specifier: workspace:* + version: link:../../apps/heft + '@rushstack/terminal': + specifier: workspace:* + version: link:../../libraries/terminal + eslint: + specifier: ~9.37.0 + version: 9.37.0(supports-color@8.1.1) + local-node-rig: + specifier: workspace:* + version: link:../../rigs/local-node-rig + ../../../heft-plugins/heft-sass-load-themed-styles-plugin: dependencies: '@microsoft/load-themed-styles': @@ -3267,18 +3349,18 @@ importers: ../../../libraries/api-extractor-model: dependencies: '@microsoft/tsdoc': - specifier: ~0.15.1 - version: 0.15.1 + specifier: ~0.16.0 + version: 0.16.0 '@microsoft/tsdoc-config': - specifier: ~0.17.1 - version: 0.17.1 + specifier: ~0.18.0 + version: 0.18.0 '@rushstack/node-core-library': specifier: workspace:* version: link:../node-core-library devDependencies: '@rushstack/heft': - specifier: 1.1.0 - version: 1.1.0(@types/node@20.17.19) + specifier: 1.1.4 + version: 1.1.4(@types/node@20.17.19) decoupled-local-node-rig: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig @@ -3286,6 +3368,22 @@ importers: specifier: ~9.37.0 version: 9.37.0(supports-color@8.1.1) + ../../../libraries/credential-cache: + dependencies: + '@rushstack/node-core-library': + specifier: workspace:* + version: link:../node-core-library + devDependencies: + '@rushstack/heft': + specifier: workspace:* + version: link:../../apps/heft + eslint: + specifier: ~9.37.0 + version: 9.37.0(supports-color@8.1.1) + local-node-rig: + specifier: workspace:* + version: link:../../rigs/local-node-rig + ../../../libraries/debug-certificate-manager: dependencies: '@rushstack/node-core-library': @@ -3330,8 +3428,8 @@ importers: version: 10.3.0 devDependencies: '@rushstack/heft': - specifier: 1.1.0 - version: 1.1.0(@types/node@20.17.19) + specifier: 1.1.4 + version: 1.1.4(@types/node@20.17.19) '@types/ungap__structured-clone': specifier: ~1.2.0 version: 1.2.0 @@ -3456,8 +3554,8 @@ importers: version: 7.5.4 devDependencies: '@rushstack/heft': - specifier: 1.1.0 - version: 1.1.0(@types/node@20.17.19) + specifier: 1.1.4 + version: 1.1.4(@types/node@20.17.19) '@rushstack/problem-matcher': specifier: workspace:* version: link:../problem-matcher @@ -3480,6 +3578,40 @@ importers: specifier: ~9.37.0 version: 9.37.0(supports-color@8.1.1) + ../../../libraries/npm-check-fork: + dependencies: + giturl: + specifier: ^2.0.0 + version: 2.0.0 + lodash: + specifier: ~4.17.15 + version: 4.17.21 + package-json: + specifier: ^7 + version: 7.0.0 + semver: + specifier: ~7.5.4 + version: 7.5.4 + throat: + specifier: ^6.0.2 + version: 6.0.2 + devDependencies: + '@rushstack/heft': + specifier: workspace:* + version: link:../../apps/heft + '@types/lodash': + specifier: 4.14.116 + version: 4.14.116 + '@types/semver': + specifier: 7.5.0 + version: 7.5.0 + eslint: + specifier: ~9.37.0 + version: 9.37.0(supports-color@8.1.1) + local-node-rig: + specifier: workspace:* + version: link:../../rigs/local-node-rig + ../../../libraries/operation-graph: dependencies: '@rushstack/node-core-library': @@ -3490,8 +3622,8 @@ importers: version: link:../terminal devDependencies: '@rushstack/heft': - specifier: 1.1.0 - version: 1.1.0(@types/node@20.17.19) + specifier: 1.1.4 + version: 1.1.4(@types/node@20.17.19) decoupled-local-node-rig: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig @@ -3576,8 +3708,8 @@ importers: ../../../libraries/problem-matcher: devDependencies: '@rushstack/heft': - specifier: 1.1.0 - version: 1.1.0(@types/node@20.17.19) + specifier: 1.1.4 + version: 1.1.4(@types/node@20.17.19) decoupled-local-node-rig: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig @@ -3595,8 +3727,8 @@ importers: version: 3.1.1 devDependencies: '@rushstack/heft': - specifier: 1.1.0 - version: 1.1.0(@types/node@20.17.19) + specifier: 1.1.4 + version: 1.1.4(@types/node@20.17.19) '@types/resolve': specifier: 1.20.2 version: 1.20.2 @@ -3624,6 +3756,9 @@ importers: '@pnpm/link-bins': specifier: ~5.3.7 version: 5.3.25 + '@rushstack/credential-cache': + specifier: workspace:* + version: link:../credential-cache '@rushstack/heft-config-file': specifier: workspace:* version: link:../heft-config-file @@ -3633,6 +3768,9 @@ importers: '@rushstack/node-core-library': specifier: workspace:* version: link:../node-core-library + '@rushstack/npm-check-fork': + specifier: workspace:* + version: link:../npm-check-fork '@rushstack/package-deps-hash': specifier: workspace:* version: link:../package-deps-hash @@ -3690,9 +3828,6 @@ importers: js-yaml: specifier: ~4.1.0 version: 4.1.0 - npm-check: - specifier: ~6.0.1 - version: 6.0.1 npm-package-arg: specifier: ~6.1.0 version: 6.1.1 @@ -3796,6 +3931,9 @@ importers: '@pnpm/lockfile.types': specifier: ~1.0.3 version: 1.0.3 + '@rushstack/credential-cache': + specifier: workspace:* + version: link:../credential-cache '@rushstack/lookup-by-path': specifier: workspace:* version: link:../lookup-by-path @@ -3934,8 +4072,8 @@ importers: version: 8.1.1 devDependencies: '@rushstack/heft': - specifier: 1.1.0 - version: 1.1.0(@types/node@20.17.19) + specifier: 1.1.4 + version: 1.1.4(@types/node@20.17.19) '@types/supports-color': specifier: 8.1.3 version: 8.1.3 @@ -3949,8 +4087,8 @@ importers: ../../../libraries/tree-pattern: devDependencies: '@rushstack/heft': - specifier: 1.1.0 - version: 1.1.0(@types/node@20.17.19) + specifier: 1.1.4 + version: 1.1.4(@types/node@20.17.19) decoupled-local-node-rig: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig @@ -3974,8 +4112,8 @@ importers: version: 0.3.2 devDependencies: '@rushstack/heft': - specifier: 1.1.0 - version: 1.1.0(@types/node@20.17.19) + specifier: 1.1.4 + version: 1.1.4(@types/node@20.17.19) '@rushstack/node-core-library': specifier: workspace:* version: link:../node-core-library @@ -4032,8 +4170,8 @@ importers: specifier: workspace:* version: link:../../libraries/api-extractor-model '@microsoft/tsdoc': - specifier: ~0.15.1 - version: 0.15.1 + specifier: ~0.16.0 + version: 0.16.0 '@rushstack/node-core-library': specifier: workspace:* version: link:../../libraries/node-core-library @@ -4078,15 +4216,12 @@ importers: specifier: workspace:* version: link:../../libraries/ts-command-line diff: - specifier: ~5.0.0 - version: 5.0.0 + specifier: ~8.0.2 + version: 8.0.2 devDependencies: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft - '@types/diff': - specifier: 5.0.1 - version: 5.0.1 eslint: specifier: ~9.37.0 version: 9.37.0(supports-color@8.1.1) @@ -4097,23 +4232,23 @@ importers: ../../../rigs/decoupled-local-node-rig: dependencies: '@microsoft/api-extractor': - specifier: 7.53.0 - version: 7.53.0(@types/node@20.17.19) + specifier: 7.54.0 + version: 7.54.0(@types/node@20.17.19) '@rushstack/eslint-config': - specifier: 4.4.1 - version: 4.4.1(eslint@9.37.0)(typescript@5.8.2) + specifier: 4.5.3 + version: 4.5.3(eslint@9.37.0)(typescript@5.8.2) '@rushstack/eslint-patch': - specifier: 1.13.0 - version: 1.13.0 + specifier: 1.14.1 + version: 1.14.1 '@rushstack/eslint-plugin': - specifier: 0.20.0 - version: 0.20.0(eslint@9.37.0)(typescript@5.8.2) + specifier: 0.22.0 + version: 0.22.0(eslint@9.37.0)(typescript@5.8.2) '@rushstack/heft': - specifier: 1.1.0 - version: 1.1.0(@types/node@20.17.19) + specifier: 1.1.4 + version: 1.1.4(@types/node@20.17.19) '@rushstack/heft-node-rig': - specifier: 2.10.1 - version: 2.10.1(@rushstack/heft@1.1.0)(@types/node@20.17.19) + specifier: 2.11.6 + version: 2.11.6(@rushstack/heft@1.1.4)(@types/node@20.17.19) '@types/heft-jest': specifier: 1.0.1 version: 1.0.1 @@ -4384,6 +4519,9 @@ importers: ../../../rush-plugins/rush-amazon-s3-build-cache-plugin: dependencies: + '@rushstack/credential-cache': + specifier: workspace:* + version: link:../../libraries/credential-cache '@rushstack/node-core-library': specifier: workspace:* version: link:../../libraries/node-core-library @@ -4418,6 +4556,9 @@ importers: '@azure/storage-blob': specifier: ~12.26.0 version: 12.26.0 + '@rushstack/credential-cache': + specifier: workspace:* + version: link:../../libraries/credential-cache '@rushstack/node-core-library': specifier: workspace:* version: link:../../libraries/node-core-library @@ -4496,6 +4637,9 @@ importers: ../../../rush-plugins/rush-http-build-cache-plugin: dependencies: + '@rushstack/credential-cache': + specifier: workspace:* + version: link:../../libraries/credential-cache '@rushstack/node-core-library': specifier: workspace:* version: link:../../libraries/node-core-library @@ -7628,17 +7772,33 @@ packages: dev: true optional: true - /@devexpress/error-stack-parser@2.0.6: - resolution: {integrity: sha512-fneVypElGUH6Be39mlRZeAu00pccTlf4oVuzf9xPJD1cdEqI8NyAiQua/EW7lZdrbMUbgyXcJmfKPefhYius3A==} - dependencies: - stackframe: 1.3.4 - dev: false - /@discoveryjs/json-ext@0.5.7: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} dev: true + /@emnapi/core@1.5.0: + resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} + requiresBuild: true + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + optional: true + + /@emnapi/runtime@1.5.0: + resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} + requiresBuild: true + dependencies: + tslib: 2.8.1 + optional: true + + /@emnapi/wasi-threads@1.1.0: + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + requiresBuild: true + dependencies: + tslib: 2.8.1 + optional: true + /@emotion/cache@10.0.29: resolution: {integrity: sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==} dependencies: @@ -10335,27 +10495,28 @@ packages: resolution: {integrity: sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==} dev: true - /@microsoft/api-extractor-model@7.31.0(@types/node@20.17.19): - resolution: {integrity: sha512-DqbB4G33bYTsS8hxdmyjpLXjQTjf/05Jsk82d4ldb5UaYi5kt7imJDcSJh5K+bgJXLBn63MAPAJTUNVXsniFCQ==} + /@microsoft/api-extractor-model@7.31.3(@types/node@20.17.19): + resolution: {integrity: sha512-dv4quQI46p0U03TCEpasUf6JrJL3qjMN7JUAobsPElxBv4xayYYvWW9aPpfYV+Jx6hqUcVaLVOeV7+5hxsyoFQ==} dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.16.0(@types/node@20.17.19) + '@rushstack/node-core-library': 5.18.0(@types/node@20.17.19) transitivePeerDependencies: - '@types/node' dev: false - /@microsoft/api-extractor@7.53.0(@types/node@20.17.19): - resolution: {integrity: sha512-gbeBZm5ni4VIo7oUIq0u2UpIJsayBzxxsqE6dk1G/lrjef4OuuCJh09BakPH348JhD0ZIa3M+c0wGphLkYohTA==} + /@microsoft/api-extractor@7.54.0(@types/node@20.17.19): + resolution: {integrity: sha512-t0SEcbVUPy4yAVykPafTNWktBg728X6p9t8qCuGDsYr1/lz2VQFihYDP2CnBFSArP5vwJPcvxktoKVSqH326cA==} hasBin: true dependencies: - '@microsoft/api-extractor-model': 7.31.0(@types/node@20.17.19) + '@microsoft/api-extractor-model': 7.31.3(@types/node@20.17.19) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.16.0(@types/node@20.17.19) + '@rushstack/node-core-library': 5.18.0(@types/node@20.17.19) '@rushstack/rig-package': 0.6.0 - '@rushstack/terminal': 0.19.0(@types/node@20.17.19) - '@rushstack/ts-command-line': 5.1.0(@types/node@20.17.19) + '@rushstack/terminal': 0.19.3(@types/node@20.17.19) + '@rushstack/ts-command-line': 5.1.3(@types/node@20.17.19) + diff: 8.0.2 lodash: 4.17.21 minimatch: 10.0.3 resolve: 1.22.8 @@ -10391,6 +10552,15 @@ packages: jju: 1.4.0 resolve: 1.22.8 + /@microsoft/tsdoc-config@0.18.0: + resolution: {integrity: sha512-8N/vClYyfOH+l4fLkkr9+myAoR6M7akc8ntBJ4DJdWH2b09uVfr71+LTMpNyG19fNqWDg8KEDZhx5wxuqHyGjw==} + dependencies: + '@microsoft/tsdoc': 0.16.0 + ajv: 8.12.0 + jju: 1.4.0 + resolve: 1.22.8 + dev: false + /@microsoft/tsdoc@0.15.0: resolution: {integrity: sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==} dev: true @@ -10398,6 +10568,10 @@ packages: /@microsoft/tsdoc@0.15.1: resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} + /@microsoft/tsdoc@0.16.0: + resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==} + dev: false + /@modelcontextprotocol/sdk@1.10.2: resolution: {integrity: sha512-rb6AMp2DR4SN+kc6L1ta2NCpApyA9WYNx3CrTSZvGxq9wH71bRur+zRqPfg0vQ9mjywR7qZdX2RGHOPq3ss+tA==} engines: {node: '>=18'} @@ -10416,6 +10590,37 @@ packages: - supports-color dev: false + /@module-federation/error-codes@0.20.0: + resolution: {integrity: sha512-pwKqIFXHG72AaXjtptZb+l5VOO3O7JQMVZ4txFhBH4H/BMu7o1LRBONllTisVmojLHOC/RQpBrxXSGrC64LC4w==} + + /@module-federation/runtime-core@0.20.0: + resolution: {integrity: sha512-M/0F/Ed6o1eCC5gKW3V3QtbxeNZ1w0Y7r6NKNacnwKKC12Nn7Ty9Rg1Kjw2B13EUqP8Qs2Y2IwmBEApy7cFLMw==} + dependencies: + '@module-federation/error-codes': 0.20.0 + '@module-federation/sdk': 0.20.0 + + /@module-federation/runtime-tools@0.20.0: + resolution: {integrity: sha512-5NimrYQyYr8hBl48YVU+w6bzl9uWDKNq3IEqYDgYljTYlupbVqsH2MJTf2A+c95nuCycjHS0vp5B3rnJ3Kdotg==} + dependencies: + '@module-federation/runtime': 0.20.0 + '@module-federation/webpack-bundler-runtime': 0.20.0 + + /@module-federation/runtime@0.20.0: + resolution: {integrity: sha512-9vHE27aLCWbvzUfYWCTCsNbx4IQ5MtK3f340s4swQofTKj0Qv5dJ6gRIwmHk3DqvH5/1FZoQi3FYMCmrThiGrg==} + dependencies: + '@module-federation/error-codes': 0.20.0 + '@module-federation/runtime-core': 0.20.0 + '@module-federation/sdk': 0.20.0 + + /@module-federation/sdk@0.20.0: + resolution: {integrity: sha512-bBFGA07PpfioJLY0DITVe+szGwLtFad+8R4rb5bPFKCZPZsKqLKwMB9tSsdHeieFPSc+1v20s6wq+R1DiWe56Q==} + + /@module-federation/webpack-bundler-runtime@0.20.0: + resolution: {integrity: sha512-TB0v5FRjfpL5fR8O5L4L3FTKJsb4EsflK8aNkdrJ46Tm/MR+PvL4SEx/AXpnsY+g/zkGRkiz10vwF0/RgMh6fQ==} + dependencies: + '@module-federation/runtime': 0.20.0 + '@module-federation/sdk': 0.20.0 + /@mrmlnc/readdir-enhanced@2.2.1: resolution: {integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==} engines: {node: '>=4'} @@ -10424,6 +10629,15 @@ packages: glob-to-regexp: 0.3.0 dev: true + /@napi-rs/wasm-runtime@1.0.7: + resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} + requiresBuild: true + dependencies: + '@emnapi/core': 1.5.0 + '@emnapi/runtime': 1.5.0 + '@tybys/wasm-util': 0.10.1 + optional: true + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -11147,6 +11361,130 @@ packages: engines: {node: '>=14.0.0'} dev: true + /@rspack/binding-darwin-arm64@1.6.0-beta.0: + resolution: {integrity: sha512-iRza6XmLT0obDwlaFvZ/LUJ3FqbcZnwA48C1bwCUlDnM+9uVFInCrcHkOjKuXnNcWBBJvNmLDWA5XYWzjtbXsw==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optional: true + + /@rspack/binding-darwin-x64@1.6.0-beta.0: + resolution: {integrity: sha512-4rHw6IHpWO04C22lEQK34vk6H+CtBkVQK9pEoA4gr+zMX8H+Bfl8liVQgeaAgwRqD7ipDo3jXGLaakVGktDexw==} + cpu: [x64] + os: [darwin] + requiresBuild: true + optional: true + + /@rspack/binding-linux-arm64-gnu@1.6.0-beta.0: + resolution: {integrity: sha512-ww45NhAOreOYRFpjf1TYRvNQYLOMr/LodFZA1yI5MLRCSYMgvWuv6B1WIY7o3pLaGWeY/H+zf89JTpR2rNn25g==} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@rspack/binding-linux-arm64-musl@1.6.0-beta.0: + resolution: {integrity: sha512-nxkqLF8vz62NR65wxxMpdRDXce6q36R3BHvibyXlElSbSPSPL0n7gsOW2yMeCB5q812DRkzm2c9RNkpQ8nfXwQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@rspack/binding-linux-x64-gnu@1.6.0-beta.0: + resolution: {integrity: sha512-xfOzI6+TeLZFJ8I1siOguIlyf5m0ABWPAStPY2Wm4EIEhJz+dr5PTWa5V6DlXZkUfV/6E5ZAQGZmgcgOR+DPHw==} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@rspack/binding-linux-x64-musl@1.6.0-beta.0: + resolution: {integrity: sha512-OauuEH2P4ZXQ6vCnNZZocmxUJCTdmyUyZYHBzd+cK62uGzXcGGBp+R74grfmwThL+b4rFI2IupxMCLcDOop0zg==} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@rspack/binding-wasm32-wasi@1.6.0-beta.0: + resolution: {integrity: sha512-0sSaIM39lSNthIvZsDA7WDnwdP4/4rRH4QyN4/DLUOCdci5xUSUSz/MsRXA+smI41qu4sh9yU/jRT8pq9bSWAQ==} + cpu: [wasm32] + requiresBuild: true + dependencies: + '@napi-rs/wasm-runtime': 1.0.7 + optional: true + + /@rspack/binding-win32-arm64-msvc@1.6.0-beta.0: + resolution: {integrity: sha512-QqtnwHhpst37I3eQtx1FqpWCQCkigg2M73QUDvjhCE+opb1X46XK+kZOyt5qO0fKRdOgtxTcTVLLzRUWuT4t4A==} + cpu: [arm64] + os: [win32] + requiresBuild: true + optional: true + + /@rspack/binding-win32-ia32-msvc@1.6.0-beta.0: + resolution: {integrity: sha512-Bi8fcihGY8QEgo+u8S3JeD41OLIs1/b4lYYAKOUVmpwJeN0lTlT7oMVikD2bLLpPs+gUkinTeeoUjwx0YWlGlA==} + cpu: [ia32] + os: [win32] + requiresBuild: true + optional: true + + /@rspack/binding-win32-x64-msvc@1.6.0-beta.0: + resolution: {integrity: sha512-h7EltjtoAI2ohKxurD09uoXoe94nHiqcozca4Z7sB+f1RaBnc9U3RmddCVkENGZ2YFDx77fC6bayu2WkdY2YIw==} + cpu: [x64] + os: [win32] + requiresBuild: true + optional: true + + /@rspack/binding@1.6.0-beta.0: + resolution: {integrity: sha512-8CoJCSkWhhgAcmymvkvXb6fHV1zfRnx68mW/tFD/pN2BzwLrAqzvq9PUhJw0MLq4Dg+RIYG6xjzDDp3fkt574Q==} + optionalDependencies: + '@rspack/binding-darwin-arm64': 1.6.0-beta.0 + '@rspack/binding-darwin-x64': 1.6.0-beta.0 + '@rspack/binding-linux-arm64-gnu': 1.6.0-beta.0 + '@rspack/binding-linux-arm64-musl': 1.6.0-beta.0 + '@rspack/binding-linux-x64-gnu': 1.6.0-beta.0 + '@rspack/binding-linux-x64-musl': 1.6.0-beta.0 + '@rspack/binding-wasm32-wasi': 1.6.0-beta.0 + '@rspack/binding-win32-arm64-msvc': 1.6.0-beta.0 + '@rspack/binding-win32-ia32-msvc': 1.6.0-beta.0 + '@rspack/binding-win32-x64-msvc': 1.6.0-beta.0 + + /@rspack/core@1.6.0-beta.0: + resolution: {integrity: sha512-wrGg90zjX5/cf2hKh2La0q3++twOBnk6z2WkWWcd1Jz5F9OcbHWyn+9yGHJI921A0AziC0pv7P1MmucmG3e7fA==} + engines: {node: '>=18.12.0'} + peerDependencies: + '@swc/helpers': '>=0.5.1' + peerDependenciesMeta: + '@swc/helpers': + optional: true + dependencies: + '@module-federation/runtime-tools': 0.20.0 + '@rspack/binding': 1.6.0-beta.0 + '@rspack/lite-tapable': 1.0.1 + + /@rspack/dev-server@1.1.4(@rspack/core@1.6.0-beta.0)(webpack@5.98.0): + resolution: {integrity: sha512-kGHYX2jYf3ZiHwVl0aUEPBOBEIG1aWleCDCAi+Jg32KUu3qr/zDUpCEd0wPuHfLEgk0X0xAEYCS6JMO7nBStNQ==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': '*' + dependencies: + '@rspack/core': 1.6.0-beta.0 + chokidar: 3.6.0 + http-proxy-middleware: 2.0.9 + p-retry: 6.2.0 + webpack-dev-server: 5.2.2(webpack@5.98.0) + ws: 8.18.0 + transitivePeerDependencies: + - '@types/webpack' + - bufferutil + - debug + - supports-color + - utf-8-validate + - webpack + - webpack-cli + dev: false + + /@rspack/lite-tapable@1.0.1: + resolution: {integrity: sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==} + engines: {node: '>=16.0.0'} + /@rtsao/scc@1.1.0: resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} dev: false @@ -11243,16 +11581,16 @@ packages: - supports-color dev: true - /@rushstack/eslint-config@4.4.1(eslint@8.57.0)(typescript@4.9.5): - resolution: {integrity: sha512-Fn1dLgDfGpfKSmn99wkCzfvXYv7rjwNPHoNTHwXnhrt2w0E2NrqWLjl9X67GMlQZOqCNGI7g7MtJ+0vSs5sNkw==} + /@rushstack/eslint-config@4.5.3(eslint@8.57.0)(typescript@4.9.5): + resolution: {integrity: sha512-pKcN99fZLhOgjYS6LAwUGlsUauUeaPS/4GHpkagvXO+iogz+ATL2CvfOt25hpI93YIxpU80YggmI1OFVd2iTiw==} peerDependencies: eslint: ^8.57.0 || ^9.25.1 typescript: '>=4.7.0' dependencies: - '@rushstack/eslint-patch': 1.13.0 - '@rushstack/eslint-plugin': 0.20.0(eslint@8.57.0)(typescript@4.9.5) - '@rushstack/eslint-plugin-packlets': 0.13.0(eslint@8.57.0)(typescript@4.9.5) - '@rushstack/eslint-plugin-security': 0.12.0(eslint@8.57.0)(typescript@4.9.5) + '@rushstack/eslint-patch': 1.14.1 + '@rushstack/eslint-plugin': 0.22.0(eslint@8.57.0)(typescript@4.9.5) + '@rushstack/eslint-plugin-packlets': 0.14.0(eslint@8.57.0)(typescript@4.9.5) + '@rushstack/eslint-plugin-security': 0.13.0(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/eslint-plugin': 8.46.0(@typescript-eslint/parser@8.46.0)(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/parser': 8.46.0(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/typescript-estree': 8.46.0(typescript@4.9.5) @@ -11266,16 +11604,16 @@ packages: - supports-color dev: true - /@rushstack/eslint-config@4.4.1(eslint@9.37.0)(typescript@5.8.2): - resolution: {integrity: sha512-Fn1dLgDfGpfKSmn99wkCzfvXYv7rjwNPHoNTHwXnhrt2w0E2NrqWLjl9X67GMlQZOqCNGI7g7MtJ+0vSs5sNkw==} + /@rushstack/eslint-config@4.5.3(eslint@9.37.0)(typescript@5.8.2): + resolution: {integrity: sha512-pKcN99fZLhOgjYS6LAwUGlsUauUeaPS/4GHpkagvXO+iogz+ATL2CvfOt25hpI93YIxpU80YggmI1OFVd2iTiw==} peerDependencies: eslint: ^8.57.0 || ^9.25.1 typescript: '>=4.7.0' dependencies: - '@rushstack/eslint-patch': 1.13.0 - '@rushstack/eslint-plugin': 0.20.0(eslint@9.37.0)(typescript@5.8.2) - '@rushstack/eslint-plugin-packlets': 0.13.0(eslint@9.37.0)(typescript@5.8.2) - '@rushstack/eslint-plugin-security': 0.12.0(eslint@9.37.0)(typescript@5.8.2) + '@rushstack/eslint-patch': 1.14.1 + '@rushstack/eslint-plugin': 0.22.0(eslint@9.37.0)(typescript@5.8.2) + '@rushstack/eslint-plugin-packlets': 0.14.0(eslint@9.37.0)(typescript@5.8.2) + '@rushstack/eslint-plugin-security': 0.13.0(eslint@9.37.0)(typescript@5.8.2) '@typescript-eslint/eslint-plugin': 8.46.0(@typescript-eslint/parser@8.46.0)(eslint@9.37.0)(typescript@5.8.2) '@typescript-eslint/parser': 8.46.0(eslint@9.37.0)(typescript@5.8.2) '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.8.2) @@ -11293,29 +11631,29 @@ packages: resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} dev: true - /@rushstack/eslint-patch@1.13.0: - resolution: {integrity: sha512-2ih5qGw5SZJ+2fLZxP6Lr6Na2NTIgPRL/7Kmyuw0uIyBQnuhQ8fi8fzUTd38eIQmqp+GYLC00cI6WgtqHxBwmw==} + /@rushstack/eslint-patch@1.14.1: + resolution: {integrity: sha512-jGTk8UD/RdjsNZW8qq10r0RBvxL8OWtoT+kImlzPDFilmozzM+9QmIJsmze9UiSBrFU45ZxhTYBypn9q9z/VfQ==} - /@rushstack/eslint-plugin-packlets@0.13.0(eslint@8.57.0)(typescript@4.9.5): - resolution: {integrity: sha512-wfgfN/wAbGHLWLymAWzJAujL6kVshWa5w6Q6KgzZC4PLObn8OCg+Hm3R656enHdtEmqpbQi4sCaE5McFt7Imuw==} + /@rushstack/eslint-plugin-packlets@0.14.0(eslint@8.57.0)(typescript@4.9.5): + resolution: {integrity: sha512-o1udsL8lPAVmNEfjUOAoBcOATVs9RpFY6D/Lv2jfQ3ZqpmuDiNb4mNdB9AkI8I/01viyrIWz/iq08p31q/EIZg==} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 8.31.0(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/utils': 8.46.0(eslint@8.57.0)(typescript@4.9.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@rushstack/eslint-plugin-packlets@0.13.0(eslint@9.37.0)(typescript@5.8.2): - resolution: {integrity: sha512-wfgfN/wAbGHLWLymAWzJAujL6kVshWa5w6Q6KgzZC4PLObn8OCg+Hm3R656enHdtEmqpbQi4sCaE5McFt7Imuw==} + /@rushstack/eslint-plugin-packlets@0.14.0(eslint@9.37.0)(typescript@5.8.2): + resolution: {integrity: sha512-o1udsL8lPAVmNEfjUOAoBcOATVs9RpFY6D/Lv2jfQ3ZqpmuDiNb4mNdB9AkI8I/01viyrIWz/iq08p31q/EIZg==} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 8.31.0(eslint@9.37.0)(typescript@5.8.2) + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0)(typescript@5.8.2) eslint: 9.37.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -11374,26 +11712,26 @@ packages: - typescript dev: true - /@rushstack/eslint-plugin-security@0.12.0(eslint@8.57.0)(typescript@4.9.5): - resolution: {integrity: sha512-qeDSvIJ+50raLZ/ItclZOjswQqb6HtFkpUIszxS9eXnxO2coBMu8ujmAYP6FeXiZuAX988fO9J38i4mrWije1w==} + /@rushstack/eslint-plugin-security@0.13.0(eslint@8.57.0)(typescript@4.9.5): + resolution: {integrity: sha512-0ixotA+4NSvmTN4dq8mEKInj6kYE5q6SvySbggvDPUtJWBjmTbt4bdh9thxvAqNZWoflAMdX4FV+ixJ3CEx/cQ==} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 8.31.0(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/utils': 8.46.0(eslint@8.57.0)(typescript@4.9.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@rushstack/eslint-plugin-security@0.12.0(eslint@9.37.0)(typescript@5.8.2): - resolution: {integrity: sha512-qeDSvIJ+50raLZ/ItclZOjswQqb6HtFkpUIszxS9eXnxO2coBMu8ujmAYP6FeXiZuAX988fO9J38i4mrWije1w==} + /@rushstack/eslint-plugin-security@0.13.0(eslint@9.37.0)(typescript@5.8.2): + resolution: {integrity: sha512-0ixotA+4NSvmTN4dq8mEKInj6kYE5q6SvySbggvDPUtJWBjmTbt4bdh9thxvAqNZWoflAMdX4FV+ixJ3CEx/cQ==} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 8.31.0(eslint@9.37.0)(typescript@5.8.2) + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0)(typescript@5.8.2) eslint: 9.37.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -11504,8 +11842,8 @@ packages: - typescript dev: true - /@rushstack/eslint-plugin@0.20.0(eslint@8.57.0)(typescript@4.9.5): - resolution: {integrity: sha512-SB+jROaDWfkSC+5nJU7CJ9QSD6mTkLSf1tz7Xl+9vOen/VqiQDoR2yPg0BTeaOaoRp1PFQG2w0uNsySHHp97rg==} + /@rushstack/eslint-plugin@0.22.0(eslint@8.57.0)(typescript@4.9.5): + resolution: {integrity: sha512-2x1fJQnV6H0O2kZho0/+miOQaYwGIG3yk+vS2EeUqii0OE4ZbEk9ad9ec6duDuxgx77V/nPHkrd4ftB4Twubmg==} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: @@ -11517,8 +11855,8 @@ packages: - typescript dev: true - /@rushstack/eslint-plugin@0.20.0(eslint@9.37.0)(typescript@5.8.2): - resolution: {integrity: sha512-SB+jROaDWfkSC+5nJU7CJ9QSD6mTkLSf1tz7Xl+9vOen/VqiQDoR2yPg0BTeaOaoRp1PFQG2w0uNsySHHp97rg==} + /@rushstack/eslint-plugin@0.22.0(eslint@9.37.0)(typescript@5.8.2): + resolution: {integrity: sha512-2x1fJQnV6H0O2kZho0/+miOQaYwGIG3yk+vS2EeUqii0OE4ZbEk9ad9ec6duDuxgx77V/nPHkrd4ftB4Twubmg==} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: @@ -11530,32 +11868,32 @@ packages: - typescript dev: false - /@rushstack/heft-api-extractor-plugin@1.1.0(@rushstack/heft@1.1.0)(@types/node@20.17.19): - resolution: {integrity: sha512-qWbn93G8CZN3JWjAYTYD5/bxqR6pCxwNipFXw36jOwMQwupv69inHEnx5MQQfssnzWc8LWERQIM/Kg8J23DoEw==} + /@rushstack/heft-api-extractor-plugin@1.2.0(@rushstack/heft@1.1.4)(@types/node@20.17.19): + resolution: {integrity: sha512-YqsWciAVb0XiliWWV1V9gQG6SQ/vpCqGRRmGyuuN9Rtf1To+WUxUaoHdZcDKQgAnBOKTYzm8WaUt/D9Cp9G0HA==} peerDependencies: '@rushstack/heft': '*' dependencies: - '@rushstack/heft': 1.1.0(@types/node@20.17.19) - '@rushstack/node-core-library': 5.16.0(@types/node@20.17.19) + '@rushstack/heft': 1.1.4(@types/node@20.17.19) + '@rushstack/node-core-library': 5.18.0(@types/node@20.17.19) semver: 7.5.4 transitivePeerDependencies: - '@types/node' dev: false - /@rushstack/heft-config-file@0.19.0(@types/node@20.17.19): - resolution: {integrity: sha512-74p2bhgG2hDbm/LlPQCEdiAEHStl+SiPdNWBYOGeMn9VaYhLyByd61yO9rGYMa1k0iAgRBT3+uQA4ZZkopp1lA==} + /@rushstack/heft-config-file@0.19.3(@types/node@20.17.19): + resolution: {integrity: sha512-jct1Y2JEvNlSYdxkjWQU5J3mbDIFUiMZabgJ4/2J7qA02ACz1Eozif8I1SosRXOKc7WRVs/2tCbI3eMwfPHIBA==} engines: {node: '>=10.13.0'} dependencies: - '@rushstack/node-core-library': 5.16.0(@types/node@20.17.19) + '@rushstack/node-core-library': 5.18.0(@types/node@20.17.19) '@rushstack/rig-package': 0.6.0 - '@rushstack/terminal': 0.19.0(@types/node@20.17.19) + '@rushstack/terminal': 0.19.3(@types/node@20.17.19) '@ungap/structured-clone': 1.3.0 jsonpath-plus: 10.3.0 transitivePeerDependencies: - '@types/node' - /@rushstack/heft-jest-plugin@1.1.0(@rushstack/heft@1.1.0)(@types/node@20.17.19)(jest-environment-node@29.5.0): - resolution: {integrity: sha512-RpFlkVpZ5sHe+DG9vTcvCXSr9WLXkFke4c7HID0atyvE8ciiMYnM6zwoCWTO0tNDfp2oEagls8YYAY/xsBeScQ==} + /@rushstack/heft-jest-plugin@1.1.4(@rushstack/heft@1.1.4)(@types/node@20.17.19)(jest-environment-node@29.5.0): + resolution: {integrity: sha512-dhzobYz2OhvNZuJDHFyqaKEuh2+dGyH2Z5Hy79qg7JPN/+1J3zepmbDLrbYNCWIv7o0qZPYHtfCYyOI9uHFHow==} peerDependencies: '@rushstack/heft': '*' jest-environment-jsdom: ^29.5.0 @@ -11569,10 +11907,10 @@ packages: '@jest/core': 29.5.0 '@jest/reporters': 29.5.0 '@jest/transform': 29.5.0 - '@rushstack/heft': 1.1.0(@types/node@20.17.19) - '@rushstack/heft-config-file': 0.19.0(@types/node@20.17.19) - '@rushstack/node-core-library': 5.16.0(@types/node@20.17.19) - '@rushstack/terminal': 0.19.0(@types/node@20.17.19) + '@rushstack/heft': 1.1.4(@types/node@20.17.19) + '@rushstack/heft-config-file': 0.19.3(@types/node@20.17.19) + '@rushstack/node-core-library': 5.18.0(@types/node@20.17.19) + '@rushstack/terminal': 0.19.3(@types/node@20.17.19) jest-config: 29.5.0(@types/node@20.17.19) jest-environment-node: 29.5.0 jest-resolve: 29.5.0 @@ -11587,31 +11925,31 @@ packages: - ts-node dev: false - /@rushstack/heft-lint-plugin@1.1.0(@rushstack/heft@1.1.0)(@types/node@20.17.19): - resolution: {integrity: sha512-4EhQNRELtIXwr4k2ze5xUh6LoeVpOkzFgLvdw7/GIX3DY13yNMMvQBlJwPFI3rrXE9UzaLNMgO47D8M8qPfmQw==} + /@rushstack/heft-lint-plugin@1.1.4(@rushstack/heft@1.1.4)(@types/node@20.17.19): + resolution: {integrity: sha512-Cg3gaXWMYYhpSAnvxArOi4ozZJhoGK0ftVxKKg3BL0XUKCEOddOhtWtddvmc6sYOkMxkowZpHKVyEfQnp1uoFA==} peerDependencies: '@rushstack/heft': '*' dependencies: - '@rushstack/heft': 1.1.0(@types/node@20.17.19) - '@rushstack/node-core-library': 5.16.0(@types/node@20.17.19) + '@rushstack/heft': 1.1.4(@types/node@20.17.19) + '@rushstack/node-core-library': 5.18.0(@types/node@20.17.19) json-stable-stringify-without-jsonify: 1.0.1 semver: 7.5.4 transitivePeerDependencies: - '@types/node' dev: false - /@rushstack/heft-node-rig@2.10.1(@rushstack/heft@1.1.0)(@types/node@20.17.19): - resolution: {integrity: sha512-Yq8SAITlSs3QEV8rKURa9ozrMIVJuaC1sl12nXOahk0hGeMnd+p00FvG3V2K9I7M2gKmJ5pAR02LxhqQWpLEPw==} + /@rushstack/heft-node-rig@2.11.6(@rushstack/heft@1.1.4)(@types/node@20.17.19): + resolution: {integrity: sha512-QdJvXJ3MAOgN6qzhWy+SJPlgYFISyht+etyErQfJ7mUvsZo5Gf3DWLl57rVC7UZO8ugXu2wwNemexFwY2PR+ng==} peerDependencies: '@rushstack/heft': '*' dependencies: - '@microsoft/api-extractor': 7.53.0(@types/node@20.17.19) - '@rushstack/eslint-config': 4.4.1(eslint@9.37.0)(typescript@5.8.2) - '@rushstack/heft': 1.1.0(@types/node@20.17.19) - '@rushstack/heft-api-extractor-plugin': 1.1.0(@rushstack/heft@1.1.0)(@types/node@20.17.19) - '@rushstack/heft-jest-plugin': 1.1.0(@rushstack/heft@1.1.0)(@types/node@20.17.19)(jest-environment-node@29.5.0) - '@rushstack/heft-lint-plugin': 1.1.0(@rushstack/heft@1.1.0)(@types/node@20.17.19) - '@rushstack/heft-typescript-plugin': 1.1.0(@rushstack/heft@1.1.0)(@types/node@20.17.19) + '@microsoft/api-extractor': 7.54.0(@types/node@20.17.19) + '@rushstack/eslint-config': 4.5.3(eslint@9.37.0)(typescript@5.8.2) + '@rushstack/heft': 1.1.4(@types/node@20.17.19) + '@rushstack/heft-api-extractor-plugin': 1.2.0(@rushstack/heft@1.1.4)(@types/node@20.17.19) + '@rushstack/heft-jest-plugin': 1.1.4(@rushstack/heft@1.1.4)(@types/node@20.17.19)(jest-environment-node@29.5.0) + '@rushstack/heft-lint-plugin': 1.1.4(@rushstack/heft@1.1.4)(@types/node@20.17.19) + '@rushstack/heft-typescript-plugin': 1.1.4(@rushstack/heft@1.1.4)(@types/node@20.17.19) '@types/heft-jest': 1.0.1 eslint: 9.37.0(supports-color@8.1.1) jest-environment-node: 29.5.0 @@ -11626,14 +11964,14 @@ packages: - ts-node dev: false - /@rushstack/heft-typescript-plugin@1.1.0(@rushstack/heft@1.1.0)(@types/node@20.17.19): - resolution: {integrity: sha512-4XSNramBxcMAIpUNUKE1wFuZQ0BLWm/AXSB89/pDvVgYft0o+0y8NvKK4+rFydFDz+otMEwXzuR10/b+kFTjsw==} + /@rushstack/heft-typescript-plugin@1.1.4(@rushstack/heft@1.1.4)(@types/node@20.17.19): + resolution: {integrity: sha512-nl/OyZRb3Y4lemdpWkYuDjlHv4PSGn75JIM794B8NxPGk5rYdocmc88cuChLtp1l/rwsZqUYJtXOpR77MHJ0EA==} peerDependencies: '@rushstack/heft': '*' dependencies: - '@rushstack/heft': 1.1.0(@types/node@20.17.19) - '@rushstack/heft-config-file': 0.19.0(@types/node@20.17.19) - '@rushstack/node-core-library': 5.16.0(@types/node@20.17.19) + '@rushstack/heft': 1.1.4(@types/node@20.17.19) + '@rushstack/heft-config-file': 0.19.3(@types/node@20.17.19) + '@rushstack/node-core-library': 5.18.0(@types/node@20.17.19) '@types/tapable': 1.0.6 semver: 7.5.4 tapable: 1.1.3 @@ -11641,17 +11979,17 @@ packages: - '@types/node' dev: false - /@rushstack/heft@1.1.0(@types/node@20.17.19): - resolution: {integrity: sha512-Yc4dbHjBexCpSUbjzmzODrK1vYMyUmitr84RRAOpvhUQm0PP2nKEr9jU5JgaB/tZ7ApodW0Xm8tnfOYVlvZLag==} + /@rushstack/heft@1.1.4(@types/node@20.17.19): + resolution: {integrity: sha512-W5p8tlwxVrcHi/hoiN/qabJOcV6xZFuheJUIbEXFS4N2m/WDxS2u6GZuyuDaDaa8Ch3kFW/MsnYbRrlh4C4FXw==} engines: {node: '>=10.13.0'} hasBin: true dependencies: - '@rushstack/heft-config-file': 0.19.0(@types/node@20.17.19) - '@rushstack/node-core-library': 5.16.0(@types/node@20.17.19) - '@rushstack/operation-graph': 0.5.0(@types/node@20.17.19) + '@rushstack/heft-config-file': 0.19.3(@types/node@20.17.19) + '@rushstack/node-core-library': 5.18.0(@types/node@20.17.19) + '@rushstack/operation-graph': 0.5.3(@types/node@20.17.19) '@rushstack/rig-package': 0.6.0 - '@rushstack/terminal': 0.19.0(@types/node@20.17.19) - '@rushstack/ts-command-line': 5.1.0(@types/node@20.17.19) + '@rushstack/terminal': 0.19.3(@types/node@20.17.19) + '@rushstack/ts-command-line': 5.1.3(@types/node@20.17.19) '@types/tapable': 1.0.6 fast-glob: 3.3.2 git-repo-info: 2.1.1 @@ -11678,8 +12016,8 @@ packages: semver: 7.5.4 z-schema: 5.0.6 - /@rushstack/node-core-library@5.16.0(@types/node@20.17.19): - resolution: {integrity: sha512-bO2LN3olkALZawMqPtBgRGtSzd9l306imZYE0kCiCHNvMEvCB40GqbNFZBds0RcQxx/Am2oohPSJA15UP/MrSA==} + /@rushstack/node-core-library@5.18.0(@types/node@20.17.19): + resolution: {integrity: sha512-XDebtBdw5S3SuZIt+Ra2NieT8kQ3D2Ow1HxhDQ/2soinswnOu9e7S69VSwTOLlQnx5mpWbONu+5JJjDxMAb6Fw==} peerDependencies: '@types/node': '*' peerDependenciesMeta: @@ -11696,16 +12034,16 @@ packages: resolve: 1.22.8 semver: 7.5.4 - /@rushstack/operation-graph@0.5.0(@types/node@20.17.19): - resolution: {integrity: sha512-AlsralQv26PJcG4NURLLB55TmbRp2LiujLzsZnXBG+Dj4q6wNZ9Td53xOc9sQsRwTXjewR8LEE0Bo3ajAZw2CQ==} + /@rushstack/operation-graph@0.5.3(@types/node@20.17.19): + resolution: {integrity: sha512-SET7T/lHo8DVmE7hqvgKq0pYxNU/lmAu24huIjAPkdH8dv8yy5NQYSBIXOeMxMZebRFMYiRJ6TniXWMan69lJw==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true dependencies: - '@rushstack/node-core-library': 5.16.0(@types/node@20.17.19) - '@rushstack/terminal': 0.19.0(@types/node@20.17.19) + '@rushstack/node-core-library': 5.18.0(@types/node@20.17.19) + '@rushstack/terminal': 0.19.3(@types/node@20.17.19) '@types/node': 20.17.19 /@rushstack/problem-matcher@0.1.1(@types/node@20.17.19): @@ -11739,15 +12077,15 @@ packages: - '@types/node' - webpack - /@rushstack/terminal@0.19.0(@types/node@20.17.19): - resolution: {integrity: sha512-Q0eHHuK3V4yLJ8mMuwal+YKhp1TcT0tW9Pr3xJDXyNGlpishp5M9qRTsLsk1d8GcIF15APV9vcKkFDtTvzFGHQ==} + /@rushstack/terminal@0.19.3(@types/node@20.17.19): + resolution: {integrity: sha512-0P8G18gK9STyO+CNBvkKPnWGMxESxecTYqOcikHOVIHXa9uAuTK+Fw8TJq2Gng1w7W6wTC9uPX6hGNvrMll2wA==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true dependencies: - '@rushstack/node-core-library': 5.16.0(@types/node@20.17.19) + '@rushstack/node-core-library': 5.18.0(@types/node@20.17.19) '@rushstack/problem-matcher': 0.1.1(@types/node@20.17.19) '@types/node': 20.17.19 supports-color: 8.1.1 @@ -11755,10 +12093,10 @@ packages: /@rushstack/tree-pattern@0.3.4: resolution: {integrity: sha512-9uROnkiHWsQqxW6HirXABfTRlgzhYp6tevbYIGkwKQ09VaayUBkvFvt/urDKMwlo+tGU0iQQLuVige6c48wTgw==} - /@rushstack/ts-command-line@5.1.0(@types/node@20.17.19): - resolution: {integrity: sha512-ncUEFDUU/RMwCmQpwy8fcA3CenEV0ZsNg8m1IJYGVUVzC5WdfeeoDEWhMjNqjq9DYcE4VXTXwQwyAeGo3ugSLg==} + /@rushstack/ts-command-line@5.1.3(@types/node@20.17.19): + resolution: {integrity: sha512-Kdv0k/BnnxIYFlMVC1IxrIS0oGQd4T4b7vKfx52Y2+wk2WZSDFIvedr7JrhenzSlm3ou5KwtoTGTGd5nbODRug==} dependencies: - '@rushstack/terminal': 0.19.0(@types/node@20.17.19) + '@rushstack/terminal': 0.19.3(@types/node@20.17.19) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -13770,6 +14108,13 @@ packages: engines: {node: '>=10.13.0'} dev: false + /@tybys/wasm-util@0.10.1: + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + requiresBuild: true + dependencies: + tslib: 2.8.1 + optional: true + /@types/argparse@1.0.38: resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} @@ -13866,10 +14211,6 @@ packages: '@types/node': 17.0.41 dev: true - /@types/diff@5.0.1: - resolution: {integrity: sha512-XIpxU6Qdvp1ZE6Kr3yrkv1qgUab0fyf4mHYvW8N3Bx3PCsbN6or1q9/q72cv5jIFWolaGH08U9XyYoLLIykyKQ==} - dev: true - /@types/eslint-scope@3.7.7: resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: @@ -14080,10 +14421,6 @@ packages: /@types/mime@3.0.4: resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} - /@types/minimatch@3.0.5: - resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} - dev: false - /@types/minimatch@6.0.0: resolution: {integrity: sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA==} deprecated: This is a stub types definition. minimatch provides its own type definitions, so you do not need this installed. @@ -14091,10 +14428,6 @@ packages: minimatch: 10.0.3 dev: true - /@types/minimist@1.2.5: - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - dev: false - /@types/mocha@10.0.6: resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==} dev: true @@ -14142,6 +14475,7 @@ packages: /@types/normalize-package-data@2.4.4: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + dev: true /@types/npm-package-arg@6.1.0: resolution: {integrity: sha512-vbt5fb0y1svMhu++1lwtKmZL76d0uPChFlw7kEzyUmTwfmpHRcFb8i0R8ElT69q/L+QLgK2hgECivIAvaEDwag==} @@ -14756,26 +15090,6 @@ packages: - typescript dev: true - /@typescript-eslint/scope-manager@8.31.0(typescript@4.9.5): - resolution: {integrity: sha512-knO8UyF78Nt8O/B64i7TlGXod69ko7z6vJD9uhSlm0qkAbGeRUSudcm0+K/4CrRjrpiHfBCjMWlc08Vav1xwcw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dependencies: - '@typescript-eslint/types': 8.31.0(typescript@4.9.5) - '@typescript-eslint/visitor-keys': 8.31.0(typescript@4.9.5) - transitivePeerDependencies: - - typescript - dev: true - - /@typescript-eslint/scope-manager@8.31.0(typescript@5.8.2): - resolution: {integrity: sha512-knO8UyF78Nt8O/B64i7TlGXod69ko7z6vJD9uhSlm0qkAbGeRUSudcm0+K/4CrRjrpiHfBCjMWlc08Vav1xwcw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dependencies: - '@typescript-eslint/types': 8.31.0(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 8.31.0(typescript@5.8.2) - transitivePeerDependencies: - - typescript - dev: false - /@typescript-eslint/scope-manager@8.46.0(typescript@4.9.5): resolution: {integrity: sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -14937,24 +15251,6 @@ packages: typescript: 5.8.2 dev: true - /@typescript-eslint/types@8.31.0(typescript@4.9.5): - resolution: {integrity: sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '*' - dependencies: - typescript: 4.9.5 - dev: true - - /@typescript-eslint/types@8.31.0(typescript@5.8.2): - resolution: {integrity: sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '*' - dependencies: - typescript: 5.8.2 - dev: false - /@typescript-eslint/types@8.46.0(typescript@4.9.5): resolution: {integrity: sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -14994,44 +15290,6 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@8.31.0(typescript@4.9.5): - resolution: {integrity: sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - dependencies: - '@typescript-eslint/types': 8.31.0(typescript@4.9.5) - '@typescript-eslint/visitor-keys': 8.31.0(typescript@4.9.5) - debug: 4.4.0(supports-color@8.1.1) - fast-glob: 3.3.2 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.0.1(typescript@4.9.5) - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/typescript-estree@8.31.0(typescript@5.8.2): - resolution: {integrity: sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - dependencies: - '@typescript-eslint/types': 8.31.0(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 8.31.0(typescript@5.8.2) - debug: 4.4.0(supports-color@8.1.1) - fast-glob: 3.3.2 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.0.1(typescript@5.8.2) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - dev: false - /@typescript-eslint/typescript-estree@8.46.0(typescript@4.9.5): resolution: {integrity: sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -15149,40 +15407,6 @@ packages: - typescript dev: true - /@typescript-eslint/utils@8.31.0(eslint@8.57.0)(typescript@4.9.5): - resolution: {integrity: sha512-qi6uPLt9cjTFxAb1zGNgTob4x9ur7xC6mHQJ8GwEzGMGE9tYniublmJaowOJ9V2jUzxrltTPfdG2nKlWsq0+Ww==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 8.31.0(typescript@4.9.5) - '@typescript-eslint/types': 8.31.0(typescript@4.9.5) - '@typescript-eslint/typescript-estree': 8.31.0(typescript@4.9.5) - eslint: 8.57.0 - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils@8.31.0(eslint@9.37.0)(typescript@5.8.2): - resolution: {integrity: sha512-qi6uPLt9cjTFxAb1zGNgTob4x9ur7xC6mHQJ8GwEzGMGE9tYniublmJaowOJ9V2jUzxrltTPfdG2nKlWsq0+Ww==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.37.0) - '@typescript-eslint/scope-manager': 8.31.0(typescript@5.8.2) - '@typescript-eslint/types': 8.31.0(typescript@5.8.2) - '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.2) - eslint: 9.37.0(supports-color@8.1.1) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - dev: false - /@typescript-eslint/utils@8.46.0(eslint@8.57.0)(typescript@4.9.5): resolution: {integrity: sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -15226,26 +15450,6 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@8.31.0(typescript@4.9.5): - resolution: {integrity: sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dependencies: - '@typescript-eslint/types': 8.31.0(typescript@4.9.5) - eslint-visitor-keys: 4.2.0 - transitivePeerDependencies: - - typescript - dev: true - - /@typescript-eslint/visitor-keys@8.31.0(typescript@5.8.2): - resolution: {integrity: sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dependencies: - '@typescript-eslint/types': 8.31.0(typescript@5.8.2) - eslint-visitor-keys: 4.2.0 - transitivePeerDependencies: - - typescript - dev: false - /@typescript-eslint/visitor-keys@8.46.0(typescript@4.9.5): resolution: {integrity: sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -15402,48 +15606,6 @@ packages: - supports-color dev: false - /@vue/compiler-core@3.4.21: - resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} - dependencies: - '@babel/parser': 7.24.0 - '@vue/shared': 3.4.21 - entities: 4.5.0 - estree-walker: 2.0.2 - source-map-js: 1.1.0 - dev: false - - /@vue/compiler-dom@3.4.21: - resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} - dependencies: - '@vue/compiler-core': 3.4.21 - '@vue/shared': 3.4.21 - dev: false - - /@vue/compiler-sfc@3.4.21: - resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} - dependencies: - '@babel/parser': 7.24.0 - '@vue/compiler-core': 3.4.21 - '@vue/compiler-dom': 3.4.21 - '@vue/compiler-ssr': 3.4.21 - '@vue/shared': 3.4.21 - estree-walker: 2.0.2 - magic-string: 0.30.8 - postcss: 8.4.36 - source-map-js: 1.1.0 - dev: false - - /@vue/compiler-ssr@3.4.21: - resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==} - dependencies: - '@vue/compiler-dom': 3.4.21 - '@vue/shared': 3.4.21 - dev: false - - /@vue/shared@3.4.21: - resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} - dev: false - /@webassemblyjs/ast@1.14.1: resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} dependencies: @@ -16094,11 +16256,6 @@ packages: call-bound: 1.0.4 is-array-buffer: 3.0.5 - /array-differ@3.0.0: - resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} - engines: {node: '>=8'} - dev: false - /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} @@ -16137,6 +16294,7 @@ packages: /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + dev: true /array-uniq@1.0.3: resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} @@ -16256,14 +16414,10 @@ packages: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: false - /arrify@2.0.1: resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} engines: {node: '>=8'} + dev: true /asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} @@ -17212,22 +17366,6 @@ packages: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} dev: true - /callsite-record@4.1.5: - resolution: {integrity: sha512-OqeheDucGKifjQRx524URgV4z4NaKjocGhygTptDea+DLROre4ZEecA4KXDq+P7qlGCohYVNOh3qr+y5XH5Ftg==} - dependencies: - '@devexpress/error-stack-parser': 2.0.6 - '@types/lodash': 4.14.116 - callsite: 1.0.0 - chalk: 2.4.2 - highlight-es: 1.0.3 - lodash: 4.17.21 - pinkie-promise: 2.0.1 - dev: false - - /callsite@1.0.0: - resolution: {integrity: sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==} - dev: false - /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -17243,15 +17381,6 @@ packages: engines: {node: '>= 6'} dev: true - /camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - map-obj: 4.3.0 - quick-lru: 4.0.1 - dev: false - /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} @@ -17351,10 +17480,6 @@ packages: resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} dev: true - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: false - /chardet@2.1.0: resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} dev: false @@ -17556,6 +17681,7 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + dev: true /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} @@ -18399,17 +18525,10 @@ packages: deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. dev: false - /decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} - dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - dev: false - /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} + dev: true /decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} @@ -18549,38 +18668,6 @@ packages: immer: 9.0.21 dev: true - /depcheck@1.4.7: - resolution: {integrity: sha512-1lklS/bV5chOxwNKA/2XUUk/hPORp8zihZsXflr8x0kLwmcZ9Y9BsS6Hs3ssvA+2wUVbG0U2Ciqvm1SokNjPkA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - '@babel/parser': 7.24.0 - '@babel/traverse': 7.24.0 - '@vue/compiler-sfc': 3.4.21 - callsite: 1.0.0 - camelcase: 6.3.0 - cosmiconfig: 7.1.0 - debug: 4.4.0(supports-color@8.1.1) - deps-regex: 0.2.0 - findup-sync: 5.0.0 - ignore: 5.3.1 - is-core-module: 2.16.1 - js-yaml: 3.14.1 - json5: 2.2.3 - lodash: 4.17.21 - minimatch: 7.4.6 - multimatch: 5.0.0 - please-upgrade-node: 3.2.0 - readdirp: 3.6.0 - require-package-name: 2.0.1 - resolve: 1.22.8 - resolve-from: 5.0.0 - semver: 7.5.4 - yargs: 16.2.0 - transitivePeerDependencies: - - supports-color - dev: false - /depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} @@ -18600,10 +18687,6 @@ packages: semver: 7.5.4 dev: false - /deps-regex@0.2.0: - resolution: {integrity: sha512-PwuBojGMQAYbWkMXOY9Pd/NWCDNHVH12pnS7WHqZkTSeMESe4hwnKKRp0yR87g37113x4JPbo/oIvXY+s/f56Q==} - dev: false - /des.js@1.1.0: resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} dependencies: @@ -18624,11 +18707,6 @@ packages: repeat-string: 1.6.1 dev: true - /detect-file@1.0.0: - resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} - engines: {node: '>=0.10.0'} - dev: false - /detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -18691,6 +18769,12 @@ packages: /diff@5.0.0: resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} engines: {node: '>=0.3.1'} + dev: true + + /diff@8.0.2: + resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} + engines: {node: '>=0.3.1'} + dev: false /diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} @@ -18711,6 +18795,7 @@ packages: engines: {node: '>=8'} dependencies: path-type: 4.0.0 + dev: true /dns-packet@5.6.1: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} @@ -18997,7 +19082,7 @@ packages: engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 - tapable: 2.2.1 + tapable: 2.3.0 /enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} @@ -19934,6 +20019,18 @@ packages: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 + /eslint-plugin-tsdoc@0.5.0(eslint@9.37.0)(typescript@5.8.2): + resolution: {integrity: sha512-ush8ehCwub2rgE16OIgQPFyj/o0k3T8kL++9IrAI4knsmupNo8gvfO2ERgDHWWgTC5MglbwLVRswU93HyXqNpw==} + dependencies: + '@microsoft/tsdoc': 0.16.0 + '@microsoft/tsdoc-config': 0.18.0 + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0)(typescript@5.8.2) + transitivePeerDependencies: + - eslint + - supports-color + - typescript + dev: false + /eslint-scope@4.0.3: resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==} engines: {node: '>=4.0.0'} @@ -20470,10 +20567,6 @@ packages: - supports-color dev: true - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: false - /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -20566,13 +20659,6 @@ packages: dev: false optional: true - /expand-tilde@2.0.2: - resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} - engines: {node: '>=0.10.0'} - dependencies: - homedir-polyfill: 1.0.3 - dev: false - /expect@29.7.0: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -20628,6 +20714,43 @@ packages: utils-merge: 1.0.1 vary: 1.1.2 + /express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + dev: false + /express@5.1.0: resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} engines: {node: '>= 18'} @@ -20680,15 +20803,6 @@ packages: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} dev: true - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} - dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - dev: false - /extglob@2.0.4: resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} engines: {node: '>=0.10.0'} @@ -21012,23 +21126,6 @@ packages: locate-path: 6.0.0 path-exists: 4.0.0 - /find-yarn-workspace-root2@1.2.16: - resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} - dependencies: - micromatch: 4.0.5 - pkg-dir: 4.2.0 - dev: false - - /findup-sync@5.0.0: - resolution: {integrity: sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==} - engines: {node: '>= 10.13.0'} - dependencies: - detect-file: 1.0.0 - is-glob: 4.0.3 - micromatch: 4.0.5 - resolve-dir: 1.0.1 - dev: false - /flat-cache@2.0.1: resolution: {integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==} engines: {node: '>=4'} @@ -21405,6 +21502,7 @@ packages: /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + dev: true /get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} @@ -21498,9 +21596,9 @@ packages: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} dev: true - /giturl@1.0.3: - resolution: {integrity: sha512-qVDEXufVtYUzYqI5hoDUONh9GCEPi0n+e35KNDafdsNt9fPxB0nvFW/kFiw7W42wkg8TUyhBqb+t24yyaoc87A==} - engines: {node: '>= 0.10.0'} + /giturl@2.0.0: + resolution: {integrity: sha512-FB0MmghWLcqsyrBZyqsLCNeS2kIzYymT34t/6BxM5R0/9Pxvj0K1eK25SBbwRHMjKMLgQ7nYqBSduF6XyfkgFg==} + engines: {node: '>= 14.17.0'} dev: false /glob-escape@0.0.2: @@ -21594,42 +21692,6 @@ packages: dependencies: ini: 2.0.0 - /global-modules@1.0.0: - resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} - engines: {node: '>=0.10.0'} - dependencies: - global-prefix: 1.0.2 - is-windows: 1.0.2 - resolve-dir: 1.0.1 - dev: false - - /global-modules@2.0.0: - resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} - engines: {node: '>=6'} - dependencies: - global-prefix: 3.0.0 - dev: false - - /global-prefix@1.0.2: - resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} - engines: {node: '>=0.10.0'} - dependencies: - expand-tilde: 2.0.2 - homedir-polyfill: 1.0.3 - ini: 1.3.8 - is-windows: 1.0.2 - which: 1.3.1 - dev: false - - /global-prefix@3.0.0: - resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} - engines: {node: '>=6'} - dependencies: - ini: 1.3.8 - kind-of: 6.0.3 - which: 1.3.1 - dev: false - /global@4.4.0: resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} dependencies: @@ -21682,6 +21744,7 @@ packages: ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 + dev: true /globby@9.2.0: resolution: {integrity: sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==} @@ -21761,11 +21824,6 @@ packages: uglify-js: 3.17.4 dev: true - /hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - dev: false - /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -21941,14 +21999,6 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - /highlight-es@1.0.3: - resolution: {integrity: sha512-s/SIX6yp/5S1p8aC/NRDC1fwEb+myGIfp8/TzZz0rtAv8fzsdX7vGl3Q1TrXCsczFq8DI3CBFBCySPClfBSdbg==} - dependencies: - chalk: 2.4.2 - is-es2016-keyword: 1.0.0 - js-tokens: 3.0.2 - dev: false - /highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} dev: true @@ -21971,13 +22021,6 @@ packages: dependencies: react-is: 16.13.1 - /homedir-polyfill@1.0.3: - resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} - engines: {node: '>=0.10.0'} - dependencies: - parse-passwd: 1.0.0 - dev: false - /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -22178,6 +22221,20 @@ packages: - debug dev: false + /http-proxy-middleware@2.0.9: + resolution: {integrity: sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==} + engines: {node: '>=12.0.0'} + dependencies: + '@types/express': 4.17.21 + '@types/http-proxy': 1.17.14 + http-proxy: 1.18.1 + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.5 + transitivePeerDependencies: + - debug + dev: false + /http-proxy@1.18.1: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} @@ -22359,6 +22416,7 @@ packages: /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + dev: true /indent-string@5.0.0: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} @@ -22395,25 +22453,6 @@ packages: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} dev: true - /inquirer@7.3.3: - resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} - engines: {node: '>=8.0.0'} - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-width: 3.0.0 - external-editor: 3.1.0 - figures: 3.0.0 - lodash: 4.17.21 - mute-stream: 0.0.8 - run-async: 2.4.1 - rxjs: 6.6.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - through: 2.3.8 - dev: false - /inquirer@8.2.7: resolution: {integrity: sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==} engines: {node: '>=12.0.0'} @@ -22669,10 +22708,6 @@ packages: is-window: 1.0.2 dev: true - /is-es2016-keyword@1.0.0: - resolution: {integrity: sha512-JtZWPUwjdbQ1LIo9OSZ8MdkWEve198ors27vH+RzUUvZXXZkzXCxFnlUhzWYxy5IexQSRiXVw9j2q/tHMmkVYQ==} - dev: false - /is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} @@ -22809,11 +22844,6 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - /is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - dev: false - /is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} @@ -23814,10 +23844,6 @@ packages: engines: {node: '>= 0.8'} dev: true - /js-tokens@3.0.2: - resolution: {integrity: sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==} - dev: false - /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -24250,16 +24276,6 @@ packages: type-fest: 0.6.0 dev: false - /load-yaml-file@0.2.0: - resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} - engines: {node: '>=6'} - dependencies: - graceful-fs: 4.2.11 - js-yaml: 3.14.1 - pify: 4.0.1 - strip-bom: 3.0.0 - dev: false - /loader-runner@2.4.0: resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==} engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} @@ -24453,13 +24469,6 @@ packages: dependencies: yallist: 4.0.0 - /magic-string@0.30.8: - resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - dev: false - /make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -24518,16 +24527,6 @@ packages: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} - /map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - dev: false - - /map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - dev: false - /map-or-similar@1.5.0: resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} dev: true @@ -24666,24 +24665,6 @@ packages: errno: 0.1.8 readable-stream: 2.3.8 - /meow@9.0.0: - resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==} - engines: {node: '>=10'} - dependencies: - '@types/minimist': 1.2.5 - camelcase-keys: 6.2.2 - decamelize: 1.2.0 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 3.0.3 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.18.1 - yargs-parser: 20.2.9 - dev: false - /merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} @@ -24798,6 +24779,7 @@ packages: /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + dev: true /mini-css-extract-plugin@2.5.3(webpack@5.98.0): resolution: {integrity: sha512-YseMB8cs8U/KCaAGQoqYmfUuhhGW0a9p9XvWXrxVOkE3/IiISTLw4ALNt7JR5B2eYauFM+PQGSbXMDmVbR7Tfw==} @@ -24840,13 +24822,6 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@7.4.6: - resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: false - /minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} @@ -24860,15 +24835,6 @@ packages: dependencies: brace-expansion: 2.0.1 - /minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} - dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 - dev: false - /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -25039,17 +25005,6 @@ packages: thunky: 1.1.0 dev: false - /multimatch@5.0.0: - resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} - engines: {node: '>=10'} - dependencies: - '@types/minimatch': 3.0.5 - array-differ: 3.0.0 - array-union: 2.1.0 - arrify: 2.0.1 - minimatch: 3.1.2 - dev: false - /mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} dev: false @@ -25161,12 +25116,6 @@ packages: minimatch: 3.1.2 dev: true - /node-emoji@1.11.0: - resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} - dependencies: - lodash: 4.17.21 - dev: false - /node-fetch@2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} @@ -25290,42 +25239,6 @@ packages: npm-normalize-package-bin: 1.0.1 dev: false - /npm-check@6.0.1: - resolution: {integrity: sha512-tlEhXU3689VLUHYEZTS/BC61vfeN2xSSZwoWDT6WLuenZTpDmGmNT5mtl15erTR0/A15ldK06/NEKg9jYJ9OTQ==} - engines: {node: '>=10.9.0'} - hasBin: true - dependencies: - callsite-record: 4.1.5 - chalk: 4.1.2 - co: 4.6.0 - depcheck: 1.4.7 - execa: 5.1.1 - giturl: 1.0.3 - global-modules: 2.0.0 - globby: 11.1.0 - inquirer: 7.3.3 - is-ci: 2.0.0 - lodash: 4.17.21 - meow: 9.0.0 - minimatch: 3.1.2 - node-emoji: 1.11.0 - ora: 5.4.1 - package-json: 7.0.0 - path-exists: 4.0.0 - pkg-dir: 5.0.0 - preferred-pm: 3.1.3 - rc-config-loader: 4.1.3 - semver: 7.5.4 - semver-diff: 3.1.1 - strip-ansi: 6.0.1 - text-table: 0.2.0 - throat: 6.0.2 - update-notifier: 5.1.0 - xtend: 4.0.2 - transitivePeerDependencies: - - supports-color - dev: false - /npm-normalize-package-bin@1.0.1: resolution: {integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==} dev: false @@ -25830,11 +25743,6 @@ packages: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - /parse-passwd@1.0.0: - resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} - engines: {node: '>=0.10.0'} - dev: false - /parse-semver@1.1.1: resolution: {integrity: sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==} dependencies: @@ -25917,6 +25825,10 @@ packages: /path-to-regexp@0.1.10: resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} + /path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + dev: false + /path-to-regexp@8.2.0: resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} engines: {node: '>=16'} @@ -25974,18 +25886,6 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - /pinkie-promise@2.0.1: - resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} - engines: {node: '>=0.10.0'} - dependencies: - pinkie: 2.0.4 - dev: false - - /pinkie@2.0.4: - resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} - engines: {node: '>=0.10.0'} - dev: false - /pino-std-serializers@3.2.0: resolution: {integrity: sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==} dev: false @@ -26023,12 +25923,14 @@ packages: engines: {node: '>=8'} dependencies: find-up: 4.1.0 + dev: true /pkg-dir@5.0.0: resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} engines: {node: '>=10'} dependencies: find-up: 5.0.0 + dev: true /pkg-up@3.1.0: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} @@ -26037,12 +25939,6 @@ packages: find-up: 3.0.0 dev: true - /please-upgrade-node@3.2.0: - resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} - dependencies: - semver-compare: 1.0.0 - dev: false - /pnp-webpack-plugin@1.6.4(typescript@5.8.2): resolution: {integrity: sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==} engines: {node: '>=6'} @@ -26541,16 +26437,6 @@ packages: dev: false optional: true - /preferred-pm@3.1.3: - resolution: {integrity: sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==} - engines: {node: '>=10'} - dependencies: - find-up: 5.0.0 - find-yarn-workspace-root2: 1.2.16 - path-exists: 4.0.0 - which-pm: 2.0.0 - dev: false - /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -26842,11 +26728,6 @@ packages: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} dev: false - /quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - dev: false - /quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} @@ -26904,17 +26785,6 @@ packages: webpack: 4.47.0 dev: true - /rc-config-loader@4.1.3: - resolution: {integrity: sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==} - dependencies: - debug: 4.4.0(supports-color@8.1.1) - js-yaml: 4.1.0 - json5: 2.2.3 - require-from-string: 2.0.2 - transitivePeerDependencies: - - supports-color - dev: false - /rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -27225,6 +27095,7 @@ packages: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 + dev: true /read-pkg@5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} @@ -27234,6 +27105,7 @@ packages: normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 + dev: true /read-yaml-file@2.1.0: resolution: {integrity: sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==} @@ -27335,14 +27207,6 @@ packages: resolve: 1.22.8 dev: true - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - dev: false - /redux-thunk@2.4.2(redux@4.2.1): resolution: {integrity: sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==} peerDependencies: @@ -27569,6 +27433,7 @@ packages: /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + dev: true /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} @@ -27578,10 +27443,6 @@ packages: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true - /require-package-name@2.0.1: - resolution: {integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==} - dev: false - /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -27599,14 +27460,6 @@ packages: resolve-from: 5.0.0 dev: true - /resolve-dir@1.0.1: - resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} - engines: {node: '>=0.10.0'} - dependencies: - expand-tilde: 2.0.2 - global-modules: 1.0.0 - dev: false - /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -28191,10 +28044,6 @@ packages: node-forge: 1.3.1 dev: false - /semver-compare@1.0.0: - resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - dev: false - /semver-diff@3.1.1: resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} engines: {node: '>=8'} @@ -28818,6 +28667,7 @@ packages: /stackframe@1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + dev: true /state-toggle@1.0.3: resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==} @@ -29101,6 +28951,7 @@ packages: engines: {node: '>=8'} dependencies: min-indent: 1.0.1 + dev: true /strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} @@ -29267,6 +29118,10 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + /tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} + /tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} requiresBuild: true @@ -29458,6 +29313,7 @@ packages: /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true /thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} @@ -29528,13 +29384,6 @@ packages: picomatch: 4.0.2 dev: false - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - dependencies: - os-tmpdir: 1.0.2 - dev: false - /tmp@0.2.3: resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} engines: {node: '>=14.14'} @@ -29621,11 +29470,6 @@ packages: dependencies: tslib: 2.8.1 - /trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - dev: false - /trim-trailing-lines@1.1.4: resolution: {integrity: sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==} dev: true @@ -29652,24 +29496,6 @@ packages: typescript: 5.8.2 dev: true - /ts-api-utils@2.0.1(typescript@4.9.5): - resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - dependencies: - typescript: 4.9.5 - dev: true - - /ts-api-utils@2.0.1(typescript@5.8.2): - resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - dependencies: - typescript: 5.8.2 - dev: false - /ts-api-utils@2.1.0(typescript@4.9.5): resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} @@ -29891,11 +29717,6 @@ packages: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - /type-fest@0.18.1: - resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} - engines: {node: '>=10'} - dev: false - /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -29911,6 +29732,7 @@ packages: /type-fest@0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} + dev: true /type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} @@ -30797,6 +30619,59 @@ packages: - utf-8-validate dev: false + /webpack-dev-server@5.2.2(webpack@5.98.0): + resolution: {integrity: sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==} + engines: {node: '>= 18.12.0'} + hasBin: true + peerDependencies: + '@types/webpack': ^4 + webpack: ^5.0.0 || ^4 || ^5 + webpack-cli: '*' + peerDependenciesMeta: + '@types/webpack': + optional: true + webpack: + optional: true + webpack-cli: + optional: true + dependencies: + '@types/bonjour': 3.5.13 + '@types/connect-history-api-fallback': 1.5.4 + '@types/express': 4.17.21 + '@types/express-serve-static-core': 4.17.43 + '@types/serve-index': 1.9.4 + '@types/serve-static': 1.15.5 + '@types/sockjs': 0.3.36 + '@types/ws': 8.5.12 + ansi-html-community: 0.0.8 + anymatch: 3.1.3 + bonjour-service: 1.2.1 + chokidar: 3.6.0 + colorette: 2.0.20 + compression: 1.7.4 + connect-history-api-fallback: 2.0.0 + express: 4.21.2 + graceful-fs: 4.2.11 + http-proxy-middleware: 2.0.9 + ipaddr.js: 2.1.0 + launch-editor: 2.9.1 + open: 10.1.0 + p-retry: 6.2.0 + schema-utils: 4.3.0 + selfsigned: 2.4.1 + serve-index: 1.9.1 + sockjs: 0.3.24 + spdy: 4.0.2 + webpack: 5.98.0 + webpack-dev-middleware: 7.4.2(webpack@5.98.0) + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + dev: false + /webpack-filter-warnings-plugin@1.2.1(webpack@4.47.0): resolution: {integrity: sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==} engines: {node: '>= 4.3 < 5.0.0 || >= 5.10'} @@ -31012,14 +30887,6 @@ packages: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} dev: true - /which-pm@2.0.0: - resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} - engines: {node: '>=8.15'} - dependencies: - load-yaml-file: 0.2.0 - path-exists: 4.0.0 - dev: false - /which-typed-array@1.1.15: resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} @@ -31047,6 +30914,7 @@ packages: hasBin: true dependencies: isexe: 2.0.0 + dev: true /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -31259,6 +31127,7 @@ packages: /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + dev: true /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -31292,6 +31161,7 @@ packages: /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} + dev: true /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} @@ -31336,6 +31206,7 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.9 + dev: true /yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} diff --git a/common/config/subspaces/default/repo-state.json b/common/config/subspaces/default/repo-state.json index a65052b4122..4dc7a555200 100644 --- a/common/config/subspaces/default/repo-state.json +++ b/common/config/subspaces/default/repo-state.json @@ -1,5 +1,5 @@ // DO NOT MODIFY THIS FILE MANUALLY BUT DO COMMIT IT. It is generated and used by Rush. { - "pnpmShrinkwrapHash": "f2458b20d87dd2f415c4e4341770d3338a4fd497", + "pnpmShrinkwrapHash": "5bb8825107066ff50f554daed7bc20aae550e573", "preferredVersionsHash": "a9b67c38568259823f9cfb8270b31bf6d8470b27" } diff --git a/common/reviews/api/api-extractor.api.md b/common/reviews/api/api-extractor.api.md index 01e2ed90146..f44ecd8e92b 100644 --- a/common/reviews/api/api-extractor.api.md +++ b/common/reviews/api/api-extractor.api.md @@ -28,6 +28,7 @@ export class CompilerState { export enum ConsoleMessageId { ApiReportCopied = "console-api-report-copied", ApiReportCreated = "console-api-report-created", + ApiReportDiff = "console-api-report-diff", ApiReportFolderMissing = "console-api-report-folder-missing", ApiReportNotCopied = "console-api-report-not-copied", ApiReportUnchanged = "console-api-report-unchanged", @@ -288,6 +289,7 @@ export interface IExtractorInvokeOptions { compilerState?: CompilerState; localBuild?: boolean; messageCallback?: (message: ExtractorMessage) => void; + printApiReportDiff?: boolean; showDiagnostics?: boolean; showVerboseMessages?: boolean; typescriptCompilerFolder?: string; diff --git a/common/reviews/api/credential-cache.api.md b/common/reviews/api/credential-cache.api.md new file mode 100644 index 00000000000..f6563cc246a --- /dev/null +++ b/common/reviews/api/credential-cache.api.md @@ -0,0 +1,50 @@ +## API Report File for "@rushstack/credential-cache" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +// @public (undocumented) +export class CredentialCache implements Disposable { + // (undocumented) + [Symbol.dispose](): void; + // (undocumented) + deleteCacheEntry(cacheId: string): void; + // (undocumented) + dispose(): void; + // (undocumented) + static initializeAsync(options: ICredentialCacheOptions): Promise; + // (undocumented) + saveIfModifiedAsync(): Promise; + // (undocumented) + setCacheEntry(cacheId: string, entry: ICredentialCacheEntry): void; + // (undocumented) + trimExpiredEntries(): void; + // (undocumented) + tryGetCacheEntry(cacheId: string): ICredentialCacheEntry | undefined; + // (undocumented) + static usingAsync(options: ICredentialCacheOptions, doActionAsync: (credentialCache: CredentialCache) => Promise | void): Promise; +} + +// @public (undocumented) +export interface ICredentialCacheEntry { + // (undocumented) + credential: string; + // (undocumented) + credentialMetadata?: object; + // (undocumented) + expires?: Date; +} + +// @public (undocumented) +export interface ICredentialCacheOptions { + // (undocumented) + cacheFilePath?: string; + // (undocumented) + supportEditing: boolean; +} + +// @public +export const RUSH_USER_FOLDER_NAME: '.rush-user'; + +``` diff --git a/common/reviews/api/heft-rspack-plugin.api.md b/common/reviews/api/heft-rspack-plugin.api.md new file mode 100644 index 00000000000..2d2020909d9 --- /dev/null +++ b/common/reviews/api/heft-rspack-plugin.api.md @@ -0,0 +1,67 @@ +## API Report File for "@rushstack/heft-rspack-plugin" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import type { AsyncParallelHook } from 'tapable'; +import type { AsyncSeriesBailHook } from 'tapable'; +import type { AsyncSeriesHook } from 'tapable'; +import type { AsyncSeriesWaterfallHook } from 'tapable'; +import type { HeftConfiguration } from '@rushstack/heft'; +import type { IHeftTaskSession } from '@rushstack/heft'; +import { rspackCore } from '@rspack/core'; +import type * as TRspack from '@rspack/core'; +import type * as TRspackDevServer from '@rspack/dev-server'; + +// @beta (undocumented) +export type IRspackConfiguration = TRspack.Configuration | TRspack.Configuration[]; + +// @beta +export interface IRspackConfigurationFnEnvironment { + heftConfiguration: HeftConfiguration; + prod: boolean; + production: boolean; + rspack: RspackCoreImport; + taskSession: IHeftTaskSession; +} + +// @beta (undocumented) +export interface IRspackConfigurationWithDevServer extends TRspack.Configuration { + // (undocumented) + devServer?: TRspackDevServer.Configuration; +} + +// @beta (undocumented) +export interface IRspackPluginAccessor { + readonly hooks: IRspackPluginAccessorHooks; + readonly parameters: IRspackPluginAccessorParameters; +} + +// @beta (undocumented) +export interface IRspackPluginAccessorHooks { + readonly onAfterConfigure: AsyncParallelHook<[IRspackConfiguration], never>; + readonly onConfigure: AsyncSeriesHook<[IRspackConfiguration], never>; + readonly onEmitStats: AsyncParallelHook<[TRspack.Stats | TRspack.MultiStats], never>; + readonly onGetWatchOptions: AsyncSeriesWaterfallHook<[ + Parameters[0], + Readonly + ], never>; + readonly onLoadConfiguration: AsyncSeriesBailHook<[], IRspackConfiguration | undefined | false>; +} + +// @beta (undocumented) +export interface IRspackPluginAccessorParameters { + readonly isServeMode: boolean; +} + +// @beta (undocumented) +export const PluginName: 'rspack-plugin'; + +// @beta (undocumented) +export type RspackCoreImport = rspackCore; + +// @beta +export const STAGE_LOAD_LOCAL_CONFIG: 1000; + +``` diff --git a/common/reviews/api/node-core-library.api.md b/common/reviews/api/node-core-library.api.md index a1887f9e036..cc01c92c873 100644 --- a/common/reviews/api/node-core-library.api.md +++ b/common/reviews/api/node-core-library.api.md @@ -7,7 +7,7 @@ /// import * as child_process from 'node:child_process'; -import * as nodeFs from 'node:fs'; +import * as fs from 'node:fs'; import * as nodePath from 'node:path'; // @public @@ -24,6 +24,9 @@ export class AlreadyReportedError extends Error { constructor(); } +// @public +function areDeepEqual(a: TObject, b: TObject): boolean; + // @public export class Async { static forEachAsync(iterable: Iterable | AsyncIterable, callback: (entry: TEntry, arrayIndex: number) => Promise, options?: (IAsyncParallelismOptions & { @@ -58,6 +61,13 @@ export type Brand = T & { __brand: BrandTag; }; +declare namespace Disposables { + export { + polyfillDisposeSymbols + } +} +export { Disposables } + // @public export enum Encoding { // (undocumented) @@ -108,7 +118,7 @@ export class Executable { static tryResolve(filename: string, options?: IExecutableResolveOptions): string | undefined; static waitForExitAsync(childProcess: child_process.ChildProcess, options: IWaitForExitWithStringOptions): Promise>; static waitForExitAsync(childProcess: child_process.ChildProcess, options: IWaitForExitWithBufferOptions): Promise>; - static waitForExitAsync(childProcess: child_process.ChildProcess, options?: IWaitForExitOptions): Promise>; + static waitForExitAsync(childProcess: child_process.ChildProcess, options?: IWaitForExitOptions): Promise; } // @public @@ -216,7 +226,7 @@ export type FileSystemCopyFilesAsyncFilter = (sourcePath: string, destinationPat export type FileSystemCopyFilesFilter = (sourcePath: string, destinationPath: string) => boolean; // @public -export type FileSystemStats = nodeFs.Stats; +export type FileSystemStats = fs.Stats; // @public export class FileWriter { @@ -234,7 +244,10 @@ export const FolderConstants: { }; // @public -export type FolderItem = nodeFs.Dirent; +export type FolderItem = fs.Dirent; + +// @public +function getHomeFolder(): string; // @public export interface IAsyncParallelismOptions { @@ -628,7 +641,7 @@ export interface IReadLinesFromIterableOptions { // @public export interface IRealNodeModulePathResolverOptions { // (undocumented) - fs?: Partial>; + fs?: Partial>; ignoreMissingPaths?: boolean; // (undocumented) path?: Partial>; @@ -667,13 +680,17 @@ export interface IWaitForExitOptions { } // @public -export interface IWaitForExitResult { - exitCode: number | null; - signal: string | null; +export interface IWaitForExitResult extends IWaitForExitResultWithoutOutput { stderr: T; stdout: T; } +// @public +export interface IWaitForExitResultWithoutOutput { + exitCode: number | null; + signal: string | null; +} + // @public export interface IWaitForExitWithBufferOptions extends IWaitForExitOptions { encoding: 'buffer'; @@ -787,6 +804,13 @@ export enum NewlineKind { OsDefault = "os" } +declare namespace Objects { + export { + areDeepEqual + } +} +export { Objects } + // @public export class PackageJsonLookup { constructor(parameters?: IPackageJsonLookupParameters); @@ -837,6 +861,9 @@ export class Path { static isUnderOrEqual(childPath: string, parentFolderPath: string): boolean; } +// @public +function polyfillDisposeSymbols(): void; + // @public export enum PosixModeBits { AllExecute = 73, @@ -928,4 +955,11 @@ export class TypeUuid { static registerClass(targetClass: any, typeUuid: string): void; } +declare namespace User { + export { + getHomeFolder + } +} +export { User } + ``` diff --git a/common/reviews/api/rush-azure-storage-build-cache-plugin.api.md b/common/reviews/api/rush-azure-storage-build-cache-plugin.api.md index 4bd893d8be2..26f39c4993a 100644 --- a/common/reviews/api/rush-azure-storage-build-cache-plugin.api.md +++ b/common/reviews/api/rush-azure-storage-build-cache-plugin.api.md @@ -5,9 +5,9 @@ ```ts import { AzureAuthorityHosts } from '@azure/identity'; -import { CredentialCache } from '@rushstack/rush-sdk'; +import { CredentialCache } from '@rushstack/credential-cache'; import { DeviceCodeCredentialOptions } from '@azure/identity'; -import type { ICredentialCacheEntry } from '@rushstack/rush-sdk'; +import type { ICredentialCacheEntry } from '@rushstack/credential-cache'; import { InteractiveBrowserCredentialNodeOptions } from '@azure/identity'; import type { IRushPlugin } from '@rushstack/rush-sdk'; import type { ITerminal } from '@rushstack/terminal'; diff --git a/common/reviews/api/rush-lib.api.md b/common/reviews/api/rush-lib.api.md index 3fa9d1b178b..cf0b56b9abb 100644 --- a/common/reviews/api/rush-lib.api.md +++ b/common/reviews/api/rush-lib.api.md @@ -13,7 +13,10 @@ import { AsyncSeriesWaterfallHook } from 'tapable'; import type { CollatedWriter } from '@rushstack/stream-collator'; import type { CommandLineParameter } from '@rushstack/ts-command-line'; import { CommandLineParameterKind } from '@rushstack/ts-command-line'; +import { CredentialCache } from '@rushstack/credential-cache'; import { HookMap } from 'tapable'; +import { ICredentialCacheEntry } from '@rushstack/credential-cache'; +import { ICredentialCacheOptions } from '@rushstack/credential-cache'; import { IFileDiffStatus } from '@rushstack/package-deps-hash'; import { IPackageJson } from '@rushstack/node-core-library'; import { IPrefixMatch } from '@rushstack/lookup-by-path'; @@ -139,25 +142,7 @@ export class CommonVersionsConfiguration { save(): boolean; } -// @beta (undocumented) -export class CredentialCache { - // (undocumented) - deleteCacheEntry(cacheId: string): void; - // (undocumented) - dispose(): void; - // (undocumented) - static initializeAsync(options: ICredentialCacheOptions): Promise; - // (undocumented) - saveIfModifiedAsync(): Promise; - // (undocumented) - setCacheEntry(cacheId: string, entry: ICredentialCacheEntry): void; - // (undocumented) - trimExpiredEntries(): void; - // (undocumented) - tryGetCacheEntry(cacheId: string): ICredentialCacheEntry | undefined; - // (undocumented) - static usingAsync(options: ICredentialCacheOptions, doActionAsync: (credentialCache: CredentialCache) => Promise | void): Promise; -} +export { CredentialCache } // @beta export enum CustomTipId { @@ -433,22 +418,9 @@ export interface ICreateOperationsContext { readonly rushConfiguration: RushConfiguration; } -// @beta (undocumented) -export interface ICredentialCacheEntry { - // (undocumented) - credential: string; - // (undocumented) - credentialMetadata?: object; - // (undocumented) - expires?: Date; -} +export { ICredentialCacheEntry } -// @beta (undocumented) -export interface ICredentialCacheOptions { - cacheFilePath?: string; - // (undocumented) - supportEditing: boolean; -} +export { ICredentialCacheOptions } // @beta export interface ICustomTipInfo { @@ -698,6 +670,7 @@ export interface IOperationSettings { ignoreChangedProjectsOnlyFlag?: boolean; operationName: string; outputFolderNames?: string[]; + parameterNamesToIgnore?: string[]; sharding?: IRushPhaseSharding; weight?: number; } diff --git a/eslint/eslint-bulk/CHANGELOG.json b/eslint/eslint-bulk/CHANGELOG.json index 740d35211e7..beb7b01fac8 100644 --- a/eslint/eslint-bulk/CHANGELOG.json +++ b/eslint/eslint-bulk/CHANGELOG.json @@ -1,6 +1,95 @@ { "name": "@rushstack/eslint-bulk", "entries": [ + { + "version": "0.4.6", + "tag": "@rushstack/eslint-bulk_v0.4.6", + "date": "Wed, 12 Nov 2025 01:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-patch\" to `1.15.0`" + } + ] + } + }, + { + "version": "0.4.5", + "tag": "@rushstack/eslint-bulk_v0.4.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.4.4", + "tag": "@rushstack/eslint-bulk_v0.4.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.4.3", + "tag": "@rushstack/eslint-bulk_v0.4.3", + "date": "Fri, 24 Oct 2025 11:22:09 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-patch\" to `1.14.1`" + } + ] + } + }, + { + "version": "0.4.2", + "tag": "@rushstack/eslint-bulk_v0.4.2", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.4.1", + "tag": "@rushstack/eslint-bulk_v0.4.1", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, + { + "version": "0.4.0", + "tag": "@rushstack/eslint-bulk_v0.4.0", + "date": "Mon, 13 Oct 2025 15:13:02 GMT", + "comments": { + "minor": [ + { + "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-patch\" to `1.14.0`" + } + ] + } + }, { "version": "0.3.1", "tag": "@rushstack/eslint-bulk_v0.3.1", diff --git a/eslint/eslint-bulk/CHANGELOG.md b/eslint/eslint-bulk/CHANGELOG.md index da3500af7ed..2ae2e1a18de 100644 --- a/eslint/eslint-bulk/CHANGELOG.md +++ b/eslint/eslint-bulk/CHANGELOG.md @@ -1,6 +1,43 @@ # Change Log - @rushstack/eslint-bulk -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:57:54 GMT and should not be manually modified. + +## 0.4.6 +Wed, 12 Nov 2025 01:57:54 GMT + +_Version update only_ + +## 0.4.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.4.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.4.3 +Fri, 24 Oct 2025 11:22:09 GMT + +_Version update only_ + +## 0.4.2 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.4.1 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ + +## 0.4.0 +Mon, 13 Oct 2025 15:13:02 GMT + +### Minor changes + +- Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`. ## 0.3.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/eslint/eslint-bulk/package.json b/eslint/eslint-bulk/package.json index 82e185095d7..4605e7b3a66 100755 --- a/eslint/eslint-bulk/package.json +++ b/eslint/eslint-bulk/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/eslint-bulk", - "version": "0.3.1", + "version": "0.4.6", "description": "Roll out new ESLint rules in a large monorepo without cluttering up your code with \"eslint-ignore-next-line\"", "main": "index.js", "license": "MIT", diff --git a/eslint/eslint-config/CHANGELOG.json b/eslint/eslint-config/CHANGELOG.json index 620ddca6961..6180321b70a 100644 --- a/eslint/eslint-config/CHANGELOG.json +++ b/eslint/eslint-config/CHANGELOG.json @@ -1,6 +1,104 @@ { "name": "@rushstack/eslint-config", "entries": [ + { + "version": "4.6.1", + "tag": "@rushstack/eslint-config_v4.6.1", + "date": "Wed, 12 Nov 2025 01:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-patch\" to `1.15.0`" + } + ] + } + }, + { + "version": "4.6.0", + "tag": "@rushstack/eslint-config_v4.6.0", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "minor": [ + { + "comment": "Bump the `eslint-plugin-tsdoc` dependency to `~0.5.0`." + } + ] + } + }, + { + "version": "4.5.4", + "tag": "@rushstack/eslint-config_v4.5.4", + "date": "Tue, 11 Nov 2025 16:13:26 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-plugin\" to `0.22.1`" + } + ] + } + }, + { + "version": "4.5.3", + "tag": "@rushstack/eslint-config_v4.5.3", + "date": "Fri, 24 Oct 2025 11:22:09 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-patch\" to `1.14.1`" + } + ] + } + }, + { + "version": "4.5.2", + "tag": "@rushstack/eslint-config_v4.5.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-plugin\" to `0.22.0`" + } + ] + } + }, + { + "version": "4.5.1", + "tag": "@rushstack/eslint-config_v4.5.1", + "date": "Tue, 14 Oct 2025 15:13:22 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-plugin\" to `0.21.1`" + } + ] + } + }, + { + "version": "4.5.0", + "tag": "@rushstack/eslint-config_v4.5.0", + "date": "Mon, 13 Oct 2025 15:13:02 GMT", + "comments": { + "minor": [ + { + "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-patch\" to `1.14.0`" + }, + { + "comment": "Updating dependency \"@rushstack/eslint-plugin\" to `0.21.0`" + }, + { + "comment": "Updating dependency \"@rushstack/eslint-plugin-packlets\" to `0.14.0`" + }, + { + "comment": "Updating dependency \"@rushstack/eslint-plugin-security\" to `0.13.0`" + } + ] + } + }, { "version": "4.4.1", "tag": "@rushstack/eslint-config_v4.4.1", diff --git a/eslint/eslint-config/CHANGELOG.md b/eslint/eslint-config/CHANGELOG.md index eae275e87ee..fcf1aa50d58 100644 --- a/eslint/eslint-config/CHANGELOG.md +++ b/eslint/eslint-config/CHANGELOG.md @@ -1,6 +1,45 @@ # Change Log - @rushstack/eslint-config -This log was last generated on Fri, 03 Oct 2025 20:10:00 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:57:54 GMT and should not be manually modified. + +## 4.6.1 +Wed, 12 Nov 2025 01:57:54 GMT + +_Version update only_ + +## 4.6.0 +Wed, 12 Nov 2025 01:12:56 GMT + +### Minor changes + +- Bump the `eslint-plugin-tsdoc` dependency to `~0.5.0`. + +## 4.5.4 +Tue, 11 Nov 2025 16:13:26 GMT + +_Version update only_ + +## 4.5.3 +Fri, 24 Oct 2025 11:22:09 GMT + +_Version update only_ + +## 4.5.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ + +## 4.5.1 +Tue, 14 Oct 2025 15:13:22 GMT + +_Version update only_ + +## 4.5.0 +Mon, 13 Oct 2025 15:13:02 GMT + +### Minor changes + +- Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`. ## 4.4.1 Fri, 03 Oct 2025 20:10:00 GMT diff --git a/eslint/eslint-config/package.json b/eslint/eslint-config/package.json index a11fb07e4b9..1b07e3584eb 100644 --- a/eslint/eslint-config/package.json +++ b/eslint/eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/eslint-config", - "version": "4.4.1", + "version": "4.6.1", "description": "A TypeScript ESLint ruleset designed for large teams and projects", "license": "MIT", "repository": { @@ -37,7 +37,7 @@ "@typescript-eslint/typescript-estree": "~8.46.0", "eslint-plugin-promise": "~7.2.1", "eslint-plugin-react": "~7.37.5", - "eslint-plugin-tsdoc": "~0.4.0" + "eslint-plugin-tsdoc": "~0.5.0" }, "devDependencies": { "eslint": "~9.37.0", diff --git a/eslint/eslint-patch/CHANGELOG.json b/eslint/eslint-patch/CHANGELOG.json index 682fd6fed54..2ecb40a74d5 100644 --- a/eslint/eslint-patch/CHANGELOG.json +++ b/eslint/eslint-patch/CHANGELOG.json @@ -1,6 +1,45 @@ { "name": "@rushstack/eslint-patch", "entries": [ + { + "version": "1.15.0", + "tag": "@rushstack/eslint-patch_v1.15.0", + "date": "Wed, 12 Nov 2025 01:57:54 GMT", + "comments": { + "minor": [ + { + "comment": "In ESLint >= 9.37, report bulk suppressed messages as suppressed messages rather than removing them completely." + } + ] + } + }, + { + "version": "1.14.1", + "tag": "@rushstack/eslint-patch_v1.14.1", + "date": "Fri, 24 Oct 2025 11:22:09 GMT", + "comments": { + "patch": [ + { + "comment": "Fix an issue where suppressed rule violations still show up in the report in ESLint >=9.37.0." + }, + { + "comment": "Fix an issue where the ESLint process will crash when running in the ESLint VSCode extension in ESLint >=9.37.0." + } + ] + } + }, + { + "version": "1.14.0", + "tag": "@rushstack/eslint-patch_v1.14.0", + "date": "Mon, 13 Oct 2025 15:13:02 GMT", + "comments": { + "minor": [ + { + "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`." + } + ] + } + }, { "version": "1.13.0", "tag": "@rushstack/eslint-patch_v1.13.0", diff --git a/eslint/eslint-patch/CHANGELOG.md b/eslint/eslint-patch/CHANGELOG.md index aae7796759d..212bc897402 100644 --- a/eslint/eslint-patch/CHANGELOG.md +++ b/eslint/eslint-patch/CHANGELOG.md @@ -1,6 +1,28 @@ # Change Log - @rushstack/eslint-patch -This log was last generated on Fri, 03 Oct 2025 20:09:59 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:57:54 GMT and should not be manually modified. + +## 1.15.0 +Wed, 12 Nov 2025 01:57:54 GMT + +### Minor changes + +- In ESLint >= 9.37, report bulk suppressed messages as suppressed messages rather than removing them completely. + +## 1.14.1 +Fri, 24 Oct 2025 11:22:09 GMT + +### Patches + +- Fix an issue where suppressed rule violations still show up in the report in ESLint >=9.37.0. +- Fix an issue where the ESLint process will crash when running in the ESLint VSCode extension in ESLint >=9.37.0. + +## 1.14.0 +Mon, 13 Oct 2025 15:13:02 GMT + +### Minor changes + +- Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`. ## 1.13.0 Fri, 03 Oct 2025 20:09:59 GMT diff --git a/eslint/eslint-patch/package.json b/eslint/eslint-patch/package.json index 441c1e34ddd..9b3c0343a96 100644 --- a/eslint/eslint-patch/package.json +++ b/eslint/eslint-patch/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/eslint-patch", - "version": "1.13.0", + "version": "1.15.0", "description": "Enhance ESLint with better support for large scale monorepos", "main": "lib/usage.js", "license": "MIT", @@ -30,7 +30,7 @@ "patch" ], "devDependencies": { - "@rushstack/heft": "1.1.0", + "@rushstack/heft": "1.1.4", "@types/eslint-8": "npm:@types/eslint@8.56.10", "@types/eslint-9": "npm:@types/eslint@9.6.1", "@typescript-eslint/types": "~8.46.0", diff --git a/eslint/eslint-patch/src/eslint-bulk-suppressions/generate-patched-file.ts b/eslint/eslint-patch/src/eslint-bulk-suppressions/generate-patched-file.ts index 04dc6faf00f..5a0107537a3 100644 --- a/eslint/eslint-patch/src/eslint-bulk-suppressions/generate-patched-file.ts +++ b/eslint/eslint-patch/src/eslint-bulk-suppressions/generate-patched-file.ts @@ -262,7 +262,7 @@ const requireFromPathToLinterJS = bulkSuppressionsPatch.requireFromPathToLinterJ // ); // } // ``` - if (majorVersion >= 9 && minorVersion >= 37) { + if (majorVersion > 9 || (majorVersion === 9 && minorVersion >= 37)) { outputFile += scanUntilMarker('const problem = report.addRuleMessage('); outputFile += scanUntilMarker('ruleId,'); outputFile += scanUntilMarker('severity,'); @@ -273,8 +273,18 @@ const requireFromPathToLinterJS = bulkSuppressionsPatch.requireFromPathToLinterJ } outputFile += ` - // --- BEGIN MONKEY PATCH --- - if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return; + // --- BEGIN MONKEY PATCH ---`; + if (majorVersion > 9 || (majorVersion === 9 && minorVersion >= 37)) { + outputFile += ` + if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) { + problem.suppressions ??= []; problem.suppressions.push({kind:"bulk",justification:""}); + }`; + } else { + outputFile += ` + if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return;`; + } + + outputFile += ` // --- END MONKEY PATCH ---`; // @@ -332,6 +342,7 @@ const requireFromPathToLinterJS = bulkSuppressionsPatch.requireFromPathToLinterJ if (internalSlotsMap.get(this) === undefined) { internalSlotsMap.set(this, { cwd: normalizeCwd(cwd), + flags: [], lastConfigArray: null, lastSourceCode: null, lastSuppressedMessages: [], diff --git a/eslint/eslint-plugin-packlets/CHANGELOG.json b/eslint/eslint-plugin-packlets/CHANGELOG.json index 17e1a2b9219..836dd17d4e4 100644 --- a/eslint/eslint-plugin-packlets/CHANGELOG.json +++ b/eslint/eslint-plugin-packlets/CHANGELOG.json @@ -1,6 +1,18 @@ { "name": "@rushstack/eslint-plugin-packlets", "entries": [ + { + "version": "0.14.0", + "tag": "@rushstack/eslint-plugin-packlets_v0.14.0", + "date": "Mon, 13 Oct 2025 15:13:02 GMT", + "comments": { + "minor": [ + { + "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`." + } + ] + } + }, { "version": "0.13.0", "tag": "@rushstack/eslint-plugin-packlets_v0.13.0", diff --git a/eslint/eslint-plugin-packlets/CHANGELOG.md b/eslint/eslint-plugin-packlets/CHANGELOG.md index 1ad4cf655e6..594093c59ba 100644 --- a/eslint/eslint-plugin-packlets/CHANGELOG.md +++ b/eslint/eslint-plugin-packlets/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @rushstack/eslint-plugin-packlets -This log was last generated on Fri, 03 Oct 2025 20:09:59 GMT and should not be manually modified. +This log was last generated on Mon, 13 Oct 2025 15:13:02 GMT and should not be manually modified. + +## 0.14.0 +Mon, 13 Oct 2025 15:13:02 GMT + +### Minor changes + +- Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`. ## 0.13.0 Fri, 03 Oct 2025 20:09:59 GMT diff --git a/eslint/eslint-plugin-packlets/package.json b/eslint/eslint-plugin-packlets/package.json index d4b9c4a44f5..efe79cc5703 100644 --- a/eslint/eslint-plugin-packlets/package.json +++ b/eslint/eslint-plugin-packlets/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/eslint-plugin-packlets", - "version": "0.13.0", + "version": "0.14.0", "description": "A lightweight alternative to NPM packages for organizing source files within a single project", "license": "MIT", "repository": { @@ -30,7 +30,7 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" }, "devDependencies": { - "@rushstack/heft": "1.1.0", + "@rushstack/heft": "1.1.4", "@typescript-eslint/parser": "~8.46.0", "decoupled-local-node-rig": "workspace:*", "eslint": "~9.37.0", diff --git a/eslint/eslint-plugin-security/CHANGELOG.json b/eslint/eslint-plugin-security/CHANGELOG.json index 33d565d3fe9..747f9361574 100644 --- a/eslint/eslint-plugin-security/CHANGELOG.json +++ b/eslint/eslint-plugin-security/CHANGELOG.json @@ -1,6 +1,18 @@ { "name": "@rushstack/eslint-plugin-security", "entries": [ + { + "version": "0.13.0", + "tag": "@rushstack/eslint-plugin-security_v0.13.0", + "date": "Mon, 13 Oct 2025 15:13:02 GMT", + "comments": { + "minor": [ + { + "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`." + } + ] + } + }, { "version": "0.12.0", "tag": "@rushstack/eslint-plugin-security_v0.12.0", diff --git a/eslint/eslint-plugin-security/CHANGELOG.md b/eslint/eslint-plugin-security/CHANGELOG.md index b7f7ec360b8..89df9268f08 100644 --- a/eslint/eslint-plugin-security/CHANGELOG.md +++ b/eslint/eslint-plugin-security/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @rushstack/eslint-plugin-security -This log was last generated on Fri, 03 Oct 2025 20:09:59 GMT and should not be manually modified. +This log was last generated on Mon, 13 Oct 2025 15:13:02 GMT and should not be manually modified. + +## 0.13.0 +Mon, 13 Oct 2025 15:13:02 GMT + +### Minor changes + +- Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`. ## 0.12.0 Fri, 03 Oct 2025 20:09:59 GMT diff --git a/eslint/eslint-plugin-security/package.json b/eslint/eslint-plugin-security/package.json index 7d241be66a2..f3baef08e9e 100644 --- a/eslint/eslint-plugin-security/package.json +++ b/eslint/eslint-plugin-security/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/eslint-plugin-security", - "version": "0.12.0", + "version": "0.13.0", "description": "An ESLint plugin providing rules that identify common security vulnerabilities for browser applications, Node.js tools, and Node.js services", "license": "MIT", "repository": { @@ -29,7 +29,7 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" }, "devDependencies": { - "@rushstack/heft": "1.1.0", + "@rushstack/heft": "1.1.4", "@typescript-eslint/parser": "~8.46.0", "@typescript-eslint/rule-tester": "~8.46.0", "@typescript-eslint/typescript-estree": "~8.46.0", diff --git a/eslint/eslint-plugin/CHANGELOG.json b/eslint/eslint-plugin/CHANGELOG.json index 1ef38001a2e..a83857f584e 100644 --- a/eslint/eslint-plugin/CHANGELOG.json +++ b/eslint/eslint-plugin/CHANGELOG.json @@ -1,6 +1,62 @@ { "name": "@rushstack/eslint-plugin", "entries": [ + { + "version": "0.22.1", + "tag": "@rushstack/eslint-plugin_v0.22.1", + "date": "Tue, 11 Nov 2025 16:13:26 GMT", + "comments": { + "patch": [ + { + "comment": "Fix calculation of project root folder when using the ESLint extension in VS Code. Report the paths being compared in 'no-external-local-imports' rule violations." + } + ] + } + }, + { + "version": "0.22.0", + "tag": "@rushstack/eslint-plugin_v0.22.0", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "minor": [ + { + "comment": "Introduce a `@rushstack/import-requires-chunk-name` rule. This rule requires that dynamic imports include a Webpack chunk name magic comment." + }, + { + "comment": "Introduce a `@rushstack/pair-react-dom-render-unmount` rule. This rule requires that every React DOM `render` call has a matching `unmountComponentAtNode` call." + } + ], + "patch": [ + { + "comment": "Include missing rule documentation." + } + ] + } + }, + { + "version": "0.21.1", + "tag": "@rushstack/eslint-plugin_v0.21.1", + "date": "Tue, 14 Oct 2025 15:13:22 GMT", + "comments": { + "patch": [ + { + "comment": "Added documentation for the @rushstack/typedef-var ESLint rule. This clarifies the rule's rationale (readability over writability) and explicitly lists all local variable exemptions, resolving confusion around its usage." + } + ] + } + }, + { + "version": "0.21.0", + "tag": "@rushstack/eslint-plugin_v0.21.0", + "date": "Mon, 13 Oct 2025 15:13:02 GMT", + "comments": { + "minor": [ + { + "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`." + } + ] + } + }, { "version": "0.20.0", "tag": "@rushstack/eslint-plugin_v0.20.0", diff --git a/eslint/eslint-plugin/CHANGELOG.md b/eslint/eslint-plugin/CHANGELOG.md index 86ac2765434..80611aa8eaf 100644 --- a/eslint/eslint-plugin/CHANGELOG.md +++ b/eslint/eslint-plugin/CHANGELOG.md @@ -1,6 +1,39 @@ # Change Log - @rushstack/eslint-plugin -This log was last generated on Fri, 03 Oct 2025 20:09:59 GMT and should not be manually modified. +This log was last generated on Tue, 11 Nov 2025 16:13:26 GMT and should not be manually modified. + +## 0.22.1 +Tue, 11 Nov 2025 16:13:26 GMT + +### Patches + +- Fix calculation of project root folder when using the ESLint extension in VS Code. Report the paths being compared in 'no-external-local-imports' rule violations. + +## 0.22.0 +Wed, 22 Oct 2025 00:57:54 GMT + +### Minor changes + +- Introduce a `@rushstack/import-requires-chunk-name` rule. This rule requires that dynamic imports include a Webpack chunk name magic comment. +- Introduce a `@rushstack/pair-react-dom-render-unmount` rule. This rule requires that every React DOM `render` call has a matching `unmountComponentAtNode` call. + +### Patches + +- Include missing rule documentation. + +## 0.21.1 +Tue, 14 Oct 2025 15:13:22 GMT + +### Patches + +- Added documentation for the @rushstack/typedef-var ESLint rule. This clarifies the rule's rationale (readability over writability) and explicitly lists all local variable exemptions, resolving confusion around its usage. + +## 0.21.0 +Mon, 13 Oct 2025 15:13:02 GMT + +### Minor changes + +- Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`. ## 0.20.0 Fri, 03 Oct 2025 20:09:59 GMT diff --git a/eslint/eslint-plugin/README.md b/eslint/eslint-plugin/README.md index bc6acc39f87..037045492d7 100644 --- a/eslint/eslint-plugin/README.md +++ b/eslint/eslint-plugin/README.md @@ -55,6 +55,166 @@ let y: typeof import('./file'); jest.mock('./file'); // okay ``` +## `@rushstack/import-requires-chunk-name` + +Require each dynamic `import()` used for code splitting to specify exactly one Webpack chunk name via a magic comment. + +#### Rule Details + +When using dynamic `import()` to create separately loaded chunks, Webpack (and compatible bundlers such as Rspack) can assign a deterministic name if a `/* webpackChunkName: 'my-chunk' */` or `// webpackChunkName: "my-chunk"` magic comment is provided. Without an explicit name, the bundler falls back to autogenerated identifiers (often numeric or hashed), which: + +- Are less stable across refactors, hurting long‑term caching +- Make bundle analysis and performance troubleshooting harder +- Can produce confusing diffs during code reviews + +This rule enforces that: + +1. Every `import()` expression used for code splitting includes a chunk name magic comment inside its parentheses. +2. Exactly one chunk name is declared. Multiple chunk name comments (or a single comment containing multiple comma‑separated `webpackChunkName` entries) are flagged. + +The chunk name must appear in either a block or line comment inside the `import()` call. Accepted forms: + +```ts +import(/* webpackChunkName: 'feature-settings' */ './feature/settings'); +import( + /* webpackChunkName: "feature-settings" */ + './feature/settings' +); +import( + // webpackChunkName: "feature-settings" + './feature/settings' +); +``` + +No options are currently supported. + +For background on magic comments, see: https://webpack.js.org/api/module-methods/#magic-comments + +#### Examples + +The following patterns are considered problems when `@rushstack/import-requires-chunk-name` is enabled: + +```ts +// Missing chunk name +import('./feature/settings'); // error +``` + +```ts +// Multiple chunk name comments +import( + /* webpackChunkName: 'feature-settings' */ + /* webpackChunkName: 'feature-settings-alt' */ + './feature/settings' +); // error +``` + +```ts +// Multiple chunk names in a single comment (comma separated) +import( + /* webpackChunkName: 'feature-settings', webpackChunkName: 'feature-settings-alt' */ + './feature/settings' +); // error +``` + +The following patterns are NOT considered problems: + +```ts +// Single block comment with one chunk name +import(/* webpackChunkName: 'feature-settings' */ './feature/settings'); +``` + +```ts +// Multiline formatting with a block comment +import( + /* webpackChunkName: 'feature-settings' */ + './feature/settings' +); +``` + +```ts +// Line comment form +import( + // webpackChunkName: 'feature-settings' + './feature/settings' +); +``` + +#### Notes + +- If your bundler does not understand Webpack magic comments (e.g. plain Node ESM loader), disable this rule for that project. +- Choose stable, descriptive chunk names—avoid including hashes, timestamps, or environment‑specific tokens. +- Chunk names share a global namespace in the final bundle; avoid collisions to keep analysis clear. + +#### Rationale + +Explicit chunk naming improves cache hit rates, observability, and maintainability. Enforcing the practice via an ESLint rule prevents missing or duplicate declarations that could lead to unpredictable bundle naming. + +## `@rushstack/no-backslash-imports` + +Prevent import and export specifiers from using Windows-style backslashes in module paths. + +#### Rule Details + +JavaScript module specifiers always use POSIX forward slashes. Using backslashes (e.g. `import './src\utils'`) can lead to inconsistent behavior across tools, and may break resolution in some environments. This rule flags any import or export whose source contains a `\` character and provides an autofix that replaces backslashes with `/`. + +#### Examples + +The following patterns are considered problems when `@rushstack/no-backslash-imports` is enabled: + +```ts +import helper from './lib\\helper'; // error (autofix -> './lib/helper') +export * from './data\\items'; // error +``` + +The following patterns are NOT considered problems: + +```ts +import helper from './lib/helper'; +export * from '../data/items'; +``` + +#### Notes + +- Works for `import`, dynamic `import()`, and `export ... from` forms. +- Loader/query strings (e.g. `raw-loader!./file`) are preserved during the fix; only path separators are changed. + +#### Rationale + +Forward slashes are portable and avoid subtle cross-platform inconsistencies. Autofixing reduces churn and enforces a predictable style. + +## `@rushstack/no-external-local-imports` + +Prevent relative imports that reach outside the configured TypeScript `rootDir` (if specified) or outside the package boundary. + +#### Rule Details + +Local relative imports should refer only to files that are part of the compiling unit: either under the package directory or (when a `rootDir` is configured) under that root. Reaching outside can accidentally couple a package to sibling projects, untracked build inputs, or files excluded from type checking. This rule resolves each relative import/ export source and ensures the target is contained within the effective root. If not, it is flagged. + +#### Examples + +Assume `rootDir` is `src` and the package folder is `/repo/packages/example`: + +```ts +// In /repo/packages/example/src/components/Button.ts +import '../utils/file'; // error if '../utils/file' is outside src +import '../../../other-package/src/index'; // error (outside package root) +``` + +```ts +// In /repo/packages/example/src/index.ts +import './utils/file'; // passes (inside rootDir) +``` + +#### Notes + +- Only relative specifiers are checked. Package specifiers (`react`, `lodash`) are ignored. +- If no `rootDir` is defined, the package directory acts as the boundary. +- Useful for enforcing project isolation in monorepos. + +#### Rationale + +Prevents accidental dependencies on files that aren’t part of the compilation or publishing surface, improving encapsulation and build reproducibility. + ## `@rushstack/no-new-null` Prevent usage of the JavaScript `null` value, while allowing code to access existing APIs that @@ -84,7 +244,6 @@ suppressing the lint rule, you can use a specialized [JsonNull](https://api.rushstack.io/pages/node-core-library.jsonnull/) type as provided by [@rushstack/node-core-library](https://www.npmjs.com/package/@rushstack/node-core-library). - #### Examples The following patterns are considered problems when `@rushstack/no-new-null` is enabled: @@ -179,6 +338,47 @@ if (x === null) { // comparisons are okay } ``` +## `@rushstack/no-transitive-dependency-imports` + +Prevent importing modules from transitive dependencies that are not declared in the package’s direct dependency list. + +#### Rule Details + +Packages should only import modules from their own direct dependencies. Importing a transitive dependency (available only because another dependency pulled it in) creates hidden coupling and can break when versions change. This rule detects any import path containing multiple `node_modules` segments (for relative paths) or any direct reference to a nested `node_modules` folder for package specifiers, flagging such usages. + +Allowed exception: a single relative traversal into `node_modules` (e.g. `import '../node_modules/some-pkg/dist/index.js'`) is tolerated to support bypassing package `exports` fields intentionally. Additional traversals are disallowed. + +#### Examples + +The following patterns are considered problems when `@rushstack/no-transitive-dependency-imports` is enabled: + +```ts +// Transitive dependency via deep relative path +import '../../node_modules/some-pkg/node_modules/other-pkg/lib/internal'; // error (multiple node_modules segments) + +// Direct package import that resolves into nested node_modules (caught via parsing) +import 'other-pkg/node_modules/inner-pkg'; // error +``` + +The following patterns are NOT considered problems: + +```ts +// Direct dependency +import 'react'; + +// Single bypass to reach a file export +import '../node_modules/some-pkg/dist/index.js'; +``` + +#### Notes + +- Encourages declaring needed dependencies explicitly in `package.json`. +- Reduces breakage due to indirect version changes. + +#### Rationale + +Explicit declarations keep dependency graphs understandable and maintainable; avoiding transitive imports prevents fragile build outcomes. + ## `@rushstack/no-untyped-underscore` (Opt-in) Prevent TypeScript code from accessing legacy JavaScript members whose name has an underscore prefix. @@ -225,6 +425,196 @@ enum E { let e: E._PrivateMember = E._PrivateMember; // okay, because _PrivateMember is declared by E ``` +## `@rushstack/normalized-imports` + +Require relative import paths to be written in a normalized minimal form and autofix unnecessary directory traversals. + +#### Rule Details + +Developers sometimes write relative paths with redundant traversals (e.g. `import '../module'` when already in the parent, or `import '././utils'`). This rule computes the shortest relative path between the importing file and target, rewrites it using POSIX separators, and ensures a leading `./` is present when needed. Non-relative (package) imports are ignored. + +If the provided path differs from the normalized form, the rule reports it and autofixes to the canonical specifier while preserving loader/query suffixes. + +#### Examples + +The following patterns are considered problems when `@rushstack/normalized-imports` is enabled: + +```ts +// Redundant parent traversal +import '../currentDir/utils'; // error (autofix -> './utils') + +// Repeated ./ segments +import '././components/Button'; // error (autofix -> './components/Button') +``` + +The following patterns are NOT considered problems: + +```ts +import './utils'; +import '../shared/types'; +``` + +#### Notes + +- Only relative paths (`./` or `../`) are normalized. +- Helps produce deterministic diff noise and cleaner refactors. + +#### Rationale + +Consistent relative paths improve readability and make large-scale moves/renames less error-prone. + +## `@rushstack/pair-react-dom-render-unmount` + +Require ReactDOM (legacy) render trees created in a file to be explicitly unmounted in that same file to avoid memory leaks. + +#### Rule Details + +React 18 introduced `ReactDOM.createRoot()` and `root.unmount()`, but many codebases still use the legacy APIs: + +- `ReactDOM.render(element, container)` +- `ReactDOM.unmountComponentAtNode(container)` + +If a component tree is rendered and the container node is later discarded without an explicit unmount, detached DOM nodes and event handlers may remain in memory. This rule enforces a simple pairing discipline: the total number of render calls in a file must match the total number of unmount calls. If they differ, every render and unmount in the file is flagged so the developer can reconcile them. + +The rule detects both namespace invocations (e.g. `ReactDOM.render(...)`) and separately imported named functions (e.g. `import { render, unmountComponentAtNode } from 'react-dom'`). Default or namespace imports (e.g. `import * as ReactDOM from 'react-dom'` or `import ReactDOM from 'react-dom'`) are supported. + +No configuration options are currently supported. + +#### Examples + +The following patterns are considered problems when `@rushstack/pair-react-dom-render-unmount` is enabled: + +```ts +import * as ReactDOM from 'react-dom'; +ReactDOM.render( , document.getElementById('root')); +// Missing matching unmount +``` + +```ts +import { render } from 'react-dom'; +render( , document.getElementById('root')); +// Missing matching unmountComponentAtNode +``` + +```ts +import { unmountComponentAtNode } from 'react-dom'; +// Unmount without a corresponding render in this file +unmountComponentAtNode(document.getElementById('root')!); +``` + +```ts +import { render, unmountComponentAtNode } from 'react-dom'; +render( , a); +render( , b); +// Only one unmount +unmountComponentAtNode(a); +// "b"'s render is not paired +``` + +The following patterns are NOT considered problems: + +```ts +import * as ReactDOM from 'react-dom'; +const rootEl = document.getElementById('root'); +ReactDOM.render( , rootEl); +ReactDOM.unmountComponentAtNode(rootEl!); +``` + +```ts +import { render, unmountComponentAtNode } from 'react-dom'; +render( , a); +render( , b); +unmountComponentAtNode(a); +unmountComponentAtNode(b); +// All renders paired +``` + +```ts +// No legacy ReactDOM render/unmount usage in this file +// (e.g. uses React 18 createRoot API or just defines components) — rule passes +``` + +#### Notes + +- The rule does not attempt dataflow analysis to verify the same container node is passed; it only enforces count parity. +- Modern React apps using `createRoot()` should migrate to pairing `root.unmount()`. This legacy rule helps older code until migration is complete. +- Multiple files can coordinate unmounting (e.g. via a shared cleanup utility); in that case this rule will flag the imbalance—consider colocating the unmount or disabling the rule for that file. + +#### Rationale + +Unpaired legacy renders are a common cause of memory leaks and test pollution. A lightweight count-based heuristic catches most oversights without requiring complex static analysis. + +## `@rushstack/typedef-var` + +Require explicit type annotations for top-level variable declarations, while exempting local variables within function or method scopes. + +#### Rule Details + +This rule is implemented to supplement the deprecated `@typescript-eslint/typedef` rule. The `@typescript-eslint/typedef` rule was deprecated based on the judgment that "unnecessary type annotations, where type inference is sufficient, can be cumbersome to maintain and generally reduce code readability." + +However, we prioritize code reading and maintenance over code authorship. That is, even when the compiler can infer a type, this rule enforces explicit type annotations to ensure that a code reviewer (e.g., when viewing a GitHub Diff) does not have to rely entirely on inference and can immediately ascertain a variable's type. This approach makes writing code harder but significantly improves the more crucial activity of reading and reviewing code. + +Therefore, the `@rushstack/typedef-var` rule enforces type annotations for all variable declarations outside of local function or class method scopes. This includes the module's top-level scope and any block scopes that do not belong to a function or method. + +To balance this strictness with code authoring convenience, the rule deliberately relaxes the type annotation requirement for the following local variable declarations: + +- Variable declarations within a function body. +- Variable declarations within a class method. +- Variables declared via object or array destructuring assignments. + +#### Examples + +The following patterns are considered problems when `@rushstack/typedef-var` is enabled: + +```ts +// Top-level declarations lack explicit type annotations +const x = 123; // error + +let x = 123; // error + +var x = 123; // error +``` + +```ts +// Declaration within a non-function block scope +{ + const x = 123; // error +} +``` + +The following patterns are NOT considered problems: + +```ts +// Local variables inside function expressions are exempt +function f() { const x = 123; } // passes + +const f = () => { const x = 123; }; // passes + +const f = function() { const x = 123; } // passes +``` + +```ts +// Local variables inside class methods are exempt +class C { + public m(): void { + const x = 123; // passes + } +} + +class C { + public m = (): void => { + const x = 123; // passes + } +} +``` + +```ts +// Array and Object Destructuring assignments are exempt +let { a, b } = { // passes + a: 123, + b: 234 +} +``` ## Links diff --git a/eslint/eslint-plugin/package.json b/eslint/eslint-plugin/package.json index 2f2bcee8fc2..9d05d451743 100644 --- a/eslint/eslint-plugin/package.json +++ b/eslint/eslint-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/eslint-plugin", - "version": "0.20.0", + "version": "0.22.1", "description": "An ESLint plugin providing supplementary rules for use with the @rushstack/eslint-config package", "license": "MIT", "repository": { @@ -33,7 +33,7 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" }, "devDependencies": { - "@rushstack/heft": "1.1.0", + "@rushstack/heft": "1.1.4", "@typescript-eslint/parser": "~8.46.0", "@typescript-eslint/rule-tester": "~8.46.0", "decoupled-local-node-rig": "workspace:*", diff --git a/eslint/eslint-plugin/src/LintUtilities.ts b/eslint/eslint-plugin/src/LintUtilities.ts index 3921ac3b7c0..fb610ba7a99 100644 --- a/eslint/eslint-plugin/src/LintUtilities.ts +++ b/eslint/eslint-plugin/src/LintUtilities.ts @@ -4,7 +4,7 @@ import * as path from 'node:path'; import { ESLintUtils, TSESTree, type TSESLint } from '@typescript-eslint/utils'; -import type { Program } from 'typescript'; +import type { CompilerOptions, Program } from 'typescript'; export interface IParsedImportSpecifier { loader?: string; @@ -33,23 +33,41 @@ export function getFilePathFromContext(context: TSESLint.RuleContext ): string | undefined { - let rootDirectory: string | undefined; + /* + * Precedence of root directory resolution: + * 1. parserOptions.tsconfigRootDir if available (since set by repo maintainer) + * 2. tsconfig.json directory if available (but might be in a subfolder) + * 3. TS Program current directory if available + * 4. ESLint working directory (probably wrong, but better than nothing?) + */ + const tsConfigRootDir: string | undefined = context.parserOptions?.tsconfigRootDir; + if (tsConfigRootDir) { + return tsConfigRootDir; + } + try { - // First attempt to get the root directory from the tsconfig baseUrl, then the program current directory const program: Program | null | undefined = ( context.sourceCode?.parserServices ?? ESLintUtils.getParserServices(context) ).program; - rootDirectory = program?.getCompilerOptions().baseUrl ?? program?.getCurrentDirectory(); + const compilerOptions: CompilerOptions | undefined = program?.getCompilerOptions(); + + const tsConfigPath: string | undefined = compilerOptions?.configFilePath as string | undefined; + if (tsConfigPath) { + const tsConfigDir: string = path.dirname(tsConfigPath); + return tsConfigDir; + } + + // Next, try to get the current directory from the TS program + const rootDirectory: string | undefined = program?.getCurrentDirectory(); + if (rootDirectory) { + return rootDirectory; + } } catch { // Ignore the error if we cannot retrieve a TS program } - // Fall back to the parserOptions.tsconfigRootDir if available, otherwise the eslint working directory - if (!rootDirectory) { - rootDirectory = context.parserOptions?.tsconfigRootDir ?? context.getCwd?.(); - } - - return rootDirectory; + // Last resort: use ESLint's current working directory + return context.getCwd?.(); } export function parseImportSpecifierFromExpression( diff --git a/eslint/eslint-plugin/src/import-requires-chunk-name.ts b/eslint/eslint-plugin/src/import-requires-chunk-name.ts new file mode 100644 index 00000000000..8b9bc6b9ef6 --- /dev/null +++ b/eslint/eslint-plugin/src/import-requires-chunk-name.ts @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import type { TSESTree, TSESLint } from '@typescript-eslint/utils'; + +export const MESSAGE_ID_CHUNK_NAME: 'error-import-requires-chunk-name' = 'error-import-requires-chunk-name'; +export const MESSAGE_ID_SINGLE_CHUNK_NAME: 'error-import-requires-single-chunk-name' = + 'error-import-requires-single-chunk-name'; +type RuleModule = TSESLint.RuleModule; +type RuleContext = TSESLint.RuleContext< + typeof MESSAGE_ID_CHUNK_NAME | typeof MESSAGE_ID_SINGLE_CHUNK_NAME, + [] +>; + +const importRequiresChunkNameRule: RuleModule = { + defaultOptions: [], + meta: { + type: 'problem', + messages: { + [MESSAGE_ID_CHUNK_NAME]: + 'Usage of "import(...)" for code splitting requires a /* webpackChunkName: \'...\' */ comment', + [MESSAGE_ID_SINGLE_CHUNK_NAME]: + 'Usage of "import(...)" for code splitting cannot specify multiple /* webpackChunkName: \'...\' */ comments' + }, + schema: [], + docs: { + description: 'Requires that calls to "import(...)" for code splitting include a Webpack chunk name', + url: 'https://www.npmjs.com/package/@rushstack/eslint-plugin' + } + }, + create: (context: RuleContext) => { + const sourceCode: Readonly = context.sourceCode; + const webpackChunkNameRegex: RegExp = /^webpackChunkName\s*:\s*('[^']+'|"[^"]+")$/; + + return { + ImportExpression: (node: TSESTree.ImportExpression) => { + const nodeComments: TSESTree.Comment[] = sourceCode.getCommentsInside(node); + const webpackChunkNameEntries: string[] = []; + for (const comment of nodeComments) { + const webpackChunkNameMatches: string[] = comment.value + .split(',') + .map((c) => c.trim()) + .filter((c) => !!c.match(webpackChunkNameRegex)); + webpackChunkNameEntries.push(...webpackChunkNameMatches); + } + + if (webpackChunkNameEntries.length === 0) { + context.report({ node, messageId: MESSAGE_ID_CHUNK_NAME }); + } else if (webpackChunkNameEntries.length !== 1) { + context.report({ node, messageId: MESSAGE_ID_SINGLE_CHUNK_NAME }); + } + } + }; + } +}; + +export { importRequiresChunkNameRule }; diff --git a/eslint/eslint-plugin/src/index.ts b/eslint/eslint-plugin/src/index.ts index 7aee5411dc2..61f0c64f23e 100644 --- a/eslint/eslint-plugin/src/index.ts +++ b/eslint/eslint-plugin/src/index.ts @@ -12,6 +12,8 @@ import { noTransitiveDependencyImportsRule } from './no-transitive-dependency-im import { noUntypedUnderscoreRule } from './no-untyped-underscore'; import { normalizedImportsRule } from './normalized-imports'; import { typedefVar } from './typedef-var'; +import { importRequiresChunkNameRule } from './import-requires-chunk-name'; +import { pairReactDomRenderUnmountRule } from './pair-react-dom-render-unmount'; interface IPlugin { rules: { [ruleName: string]: TSESLint.RuleModule }; @@ -44,7 +46,13 @@ const plugin: IPlugin = { 'normalized-imports': normalizedImportsRule, // Full name: "@rushstack/typedef-var" - 'typedef-var': typedefVar + 'typedef-var': typedefVar, + + // Full name: "@rushstack/import-requires-chunk-name" + 'import-requires-chunk-name': importRequiresChunkNameRule, + + // Full name: "@rushstack/pair-react-dom-render-unmount" + 'pair-react-dom-render-unmount': pairReactDomRenderUnmountRule } }; diff --git a/eslint/eslint-plugin/src/no-external-local-imports.ts b/eslint/eslint-plugin/src/no-external-local-imports.ts index 9fb8c3fd3f8..e4ae7bae204 100644 --- a/eslint/eslint-plugin/src/no-external-local-imports.ts +++ b/eslint/eslint-plugin/src/no-external-local-imports.ts @@ -19,15 +19,15 @@ export const noExternalLocalImportsRule: RuleModule = { type: 'problem', messages: { [MESSAGE_ID]: - 'The specified import target is not under the root directory. Ensure that ' + - 'all local import targets are either under the "rootDir" specified in your tsconfig.json (if one ' + - 'exists) or under the package directory.' + 'The specified import target "{{ importAbsolutePath }}" is not under the root directory, "{{ rootDirectory }}". Ensure that ' + + 'all local import targets are either under the "parserOptions.tsconfigRootDir" specified in your eslint.config.js (if one ' + + 'exists) or else under the folder that contains your tsconfig.json.' }, schema: [], docs: { description: - 'Prevents referencing relative imports that are either not under the "rootDir" specified in ' + - 'the tsconfig.json (if one exists) or not under the package directory.', + 'Prevents referencing relative imports that are either not under the "parserOptions.tsconfigRootDir" specified in ' + + 'your eslint.config.js (if one exists) or else not under the folder that contains your tsconfig.json.', url: 'https://www.npmjs.com/package/@rushstack/eslint-plugin' } }, @@ -54,7 +54,11 @@ export const noExternalLocalImportsRule: RuleModule = { const relativePathToRoot: string = path.relative(importAbsolutePath, rootDirectory); if (!_relativePathRegex.test(relativePathToRoot)) { - context.report({ node: importExpression, messageId: MESSAGE_ID }); + context.report({ + node: importExpression, + messageId: MESSAGE_ID, + data: { importAbsolutePath, rootDirectory } + }); } }; diff --git a/eslint/eslint-plugin/src/pair-react-dom-render-unmount.ts b/eslint/eslint-plugin/src/pair-react-dom-render-unmount.ts new file mode 100644 index 00000000000..7c4647b5492 --- /dev/null +++ b/eslint/eslint-plugin/src/pair-react-dom-render-unmount.ts @@ -0,0 +1,122 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import { TSESTree, type TSESLint } from '@typescript-eslint/utils'; + +export const MESSAGE_ID: 'error-pair-react-dom-render-unmount' = 'error-pair-react-dom-render-unmount'; +type RuleModule = TSESLint.RuleModule; +type RuleContext = TSESLint.RuleContext; + +const pairReactDomRenderUnmountRule: RuleModule = { + defaultOptions: [], + meta: { + type: 'problem', + messages: { + [MESSAGE_ID]: 'Pair the render and unmount calls to avoid memory leaks.' + }, + schema: [], + docs: { + description: + 'Pair ReactDOM "render" and "unmount" calls in one file.' + + ' If a ReactDOM render tree is not unmounted when disposed, it will cause a memory leak.', + url: 'https://www.npmjs.com/package/@rushstack/eslint-plugin' + } + }, + create: (context: RuleContext) => { + const renderCallExpressions: TSESTree.CallExpression[] = []; + const unmountCallExpressions: TSESTree.CallExpression[] = []; + + let reactDomImportNamespaceName: string | undefined; + let reactDomRenderFunctionName: string | undefined; + let reactDomUnmountFunctionName: string | undefined; + + const isFunctionCallExpression: ( + node: TSESTree.CallExpression, + methodName: string | undefined + ) => boolean = (node: TSESTree.CallExpression, methodName: string | undefined) => { + return node.callee.type === TSESTree.AST_NODE_TYPES.Identifier && node.callee.name === methodName; + }; + + const isNamespaceCallExpression: ( + node: TSESTree.CallExpression, + namespaceName: string | undefined, + methodName: string | undefined + ) => boolean = ( + node: TSESTree.CallExpression, + namespaceName: string | undefined, + methodName: string | undefined + ) => { + if (node.callee.type === TSESTree.AST_NODE_TYPES.MemberExpression) { + const { object, property } = node.callee; + if (object.type === TSESTree.AST_NODE_TYPES.Identifier && object.name === namespaceName) { + return ( + (property.type === TSESTree.AST_NODE_TYPES.Identifier && property.name === methodName) || + (property.type === TSESTree.AST_NODE_TYPES.Literal && property.value === methodName) + ); + } + } + return false; + }; + + return { + ImportDeclaration: (node: TSESTree.ImportDeclaration) => { + // Extract the name for the 'react-dom' namespace import + if (node.source.value === 'react-dom') { + if (!reactDomImportNamespaceName) { + const namespaceSpecifier: TSESTree.ImportClause | undefined = node.specifiers.find( + (s) => s.type === TSESTree.AST_NODE_TYPES.ImportNamespaceSpecifier + ); + if (namespaceSpecifier) { + reactDomImportNamespaceName = namespaceSpecifier.local.name; + } else { + const defaultSpecifier: TSESTree.ImportClause | undefined = node.specifiers.find( + (s) => s.type === TSESTree.AST_NODE_TYPES.ImportDefaultSpecifier + ); + if (defaultSpecifier) { + reactDomImportNamespaceName = defaultSpecifier.local.name; + } + } + } + + if (!reactDomRenderFunctionName || !reactDomUnmountFunctionName) { + const importSpecifiers: TSESTree.ImportSpecifier[] = node.specifiers.filter( + (s) => s.type === TSESTree.AST_NODE_TYPES.ImportSpecifier + ) as TSESTree.ImportSpecifier[]; + for (const importSpecifier of importSpecifiers) { + const name: string | undefined = + 'name' in importSpecifier.imported ? importSpecifier.imported.name : undefined; + if (name === 'render') { + reactDomRenderFunctionName = importSpecifier.local.name; + } else if (name === 'unmountComponentAtNode') { + reactDomUnmountFunctionName = importSpecifier.local.name; + } + } + } + } + }, + CallExpression: (node: TSESTree.CallExpression) => { + if ( + isNamespaceCallExpression(node, reactDomImportNamespaceName, 'render') || + isFunctionCallExpression(node, reactDomRenderFunctionName) + ) { + renderCallExpressions.push(node); + } else if ( + isNamespaceCallExpression(node, reactDomImportNamespaceName, 'unmountComponentAtNode') || + isFunctionCallExpression(node, reactDomUnmountFunctionName) + ) { + unmountCallExpressions.push(node); + } + }, + // eslint-disable-next-line @typescript-eslint/naming-convention + 'Program:exit': (node: TSESTree.Program) => { + if (renderCallExpressions.length !== unmountCallExpressions.length) { + renderCallExpressions.concat(unmountCallExpressions).forEach((callExpression) => { + context.report({ node: callExpression, messageId: MESSAGE_ID }); + }); + } + } + }; + } +}; + +export { pairReactDomRenderUnmountRule }; diff --git a/eslint/eslint-plugin/src/test/import-requires-chunk-name.test.ts b/eslint/eslint-plugin/src/test/import-requires-chunk-name.test.ts new file mode 100644 index 00000000000..c06d4771304 --- /dev/null +++ b/eslint/eslint-plugin/src/test/import-requires-chunk-name.test.ts @@ -0,0 +1,49 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import type { RuleTester } from '@typescript-eslint/rule-tester'; + +import { getRuleTesterWithProject } from './ruleTester'; +import { importRequiresChunkNameRule } from '../import-requires-chunk-name'; + +const ruleTester: RuleTester = getRuleTesterWithProject(); + +ruleTester.run('import-requires-chunk-name', importRequiresChunkNameRule, { + invalid: [ + { + code: [ + 'import(', + ' /* webpackChunkName: "my-chunk-name" */', + ' /* webpackChunkName: "my-chunk-name2" */', + " 'module'", + ')' + ].join('\n'), + errors: [{ messageId: 'error-import-requires-single-chunk-name' }] + }, + { + code: [ + 'import(', + ' // webpackChunkName: "my-chunk-name"', + ' // webpackChunkName: "my-chunk-name2"', + " 'module'", + ')' + ].join('\n'), + errors: [{ messageId: 'error-import-requires-single-chunk-name' }] + }, + { + code: "import('module')", + errors: [{ messageId: 'error-import-requires-chunk-name' }] + } + ], + valid: [ + { + code: 'import(/* webpackChunkName: "my-chunk-name" */\'module\')' + }, + { + code: ['import(', ' /* webpackChunkName: "my-chunk-name" */', " 'module'", ')'].join('\n') + }, + { + code: ['import(', ' // webpackChunkName: "my-chunk-name"', " 'module'", ')'].join('\n') + } + ] +}); diff --git a/eslint/eslint-plugin/src/test/pair-react-dom-render-unmount.test.ts b/eslint/eslint-plugin/src/test/pair-react-dom-render-unmount.test.ts new file mode 100644 index 00000000000..a5027f07807 --- /dev/null +++ b/eslint/eslint-plugin/src/test/pair-react-dom-render-unmount.test.ts @@ -0,0 +1,106 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import type { RuleTester } from '@typescript-eslint/rule-tester'; + +import { getRuleTesterWithProject } from './ruleTester'; +import { pairReactDomRenderUnmountRule } from '../pair-react-dom-render-unmount'; + +const ruleTester: RuleTester = getRuleTesterWithProject(); + +ruleTester.run('pair-react-dom-render-unmount', pairReactDomRenderUnmountRule, { + invalid: [ + { + code: [ + "import ReactDOM from 'react-dom';", + 'ReactDOM.render();', + 'ReactDOM.render();', + 'ReactDOM.render();', + 'ReactDOM.unmountComponentAtNode();', + 'ReactDOM.unmountComponentAtNode();' + ].join('\n'), + errors: [ + { messageId: 'error-pair-react-dom-render-unmount', line: 2 }, + { messageId: 'error-pair-react-dom-render-unmount', line: 3 }, + { messageId: 'error-pair-react-dom-render-unmount', line: 4 }, + { messageId: 'error-pair-react-dom-render-unmount', line: 5 }, + { messageId: 'error-pair-react-dom-render-unmount', line: 6 } + ] + }, + { + code: ["import * as ReactDOM from 'react-dom';", 'ReactDOM.render();'].join('\n'), + errors: [{ messageId: 'error-pair-react-dom-render-unmount', line: 2 }] + }, + { + code: ["import ReactDOM from 'react-dom';", 'ReactDOM.unmountComponentAtNode();'].join('\n'), + errors: [{ messageId: 'error-pair-react-dom-render-unmount', line: 2 }] + }, + { + code: [ + "import { render, unmountComponentAtNode } from 'react-dom';", + 'render();', + 'unmountComponentAtNode();', + 'unmountComponentAtNode();' + ].join('\n'), + errors: [ + { messageId: 'error-pair-react-dom-render-unmount', line: 2 }, + { messageId: 'error-pair-react-dom-render-unmount', line: 3 }, + { messageId: 'error-pair-react-dom-render-unmount', line: 4 } + ] + }, + { + code: [ + "import { render as ReactRender, unmountComponentAtNode as ReactUnmount } from 'react-dom';", + 'ReactRender();', + 'ReactUnmount();', + 'ReactUnmount();' + ].join('\n'), + errors: [ + { messageId: 'error-pair-react-dom-render-unmount', line: 2 }, + { messageId: 'error-pair-react-dom-render-unmount', line: 3 }, + { messageId: 'error-pair-react-dom-render-unmount', line: 4 } + ] + } + ], + valid: [ + { + code: [ + "import ReactDOM from 'react-dom';", + 'ReactDOM.render();', + 'ReactDOM.render();', + 'ReactDOM.render();', + 'ReactDOM.unmountComponentAtNode();', + 'ReactDOM.unmountComponentAtNode();', + 'ReactDOM.unmountComponentAtNode();' + ].join('\n') + }, + { + code: [ + "import * as ReactDOM from 'react-dom';", + 'ReactDOM.render();', + 'ReactDOM.unmountComponentAtNode();' + ].join('\n') + }, + { + code: [ + "import ReactDOM from 'react-dom';", + 'ReactDOM.render();', + 'ReactDOM.unmountComponentAtNode();' + ].join('\n') + }, + { + code: [ + "import { render, unmountComponentAtNode } from 'react-dom';", + 'render();', + 'unmountComponentAtNode();' + ].join('\n') + }, + { + code: [ + "import { render as ReactRender, unmountComponentAtNode as ReactUnmount } from 'react-dom';", + 'ReactRender();', + 'ReactUnmount();' + ].join('\n') + } + ] +}); diff --git a/eslint/local-eslint-config/package.json b/eslint/local-eslint-config/package.json index 839229b6274..4d908d71a63 100644 --- a/eslint/local-eslint-config/package.json +++ b/eslint/local-eslint-config/package.json @@ -14,7 +14,7 @@ "devDependencies": { "eslint": "~9.37.0", "typescript": "~5.8.2", - "@rushstack/heft": "1.1.0", + "@rushstack/heft": "1.1.4", "decoupled-local-node-rig": "workspace:*" }, "dependencies": { diff --git a/heft-plugins/heft-api-extractor-plugin/CHANGELOG.json b/heft-plugins/heft-api-extractor-plugin/CHANGELOG.json index b8fc7ea3299..73f7c9d300b 100644 --- a/heft-plugins/heft-api-extractor-plugin/CHANGELOG.json +++ b/heft-plugins/heft-api-extractor-plugin/CHANGELOG.json @@ -1,6 +1,95 @@ { "name": "@rushstack/heft-api-extractor-plugin", "entries": [ + { + "version": "1.2.1", + "tag": "@rushstack/heft-api-extractor-plugin_v1.2.1", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.55.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `1.1.4` to `1.1.5`" + } + ] + } + }, + { + "version": "1.2.0", + "tag": "@rushstack/heft-api-extractor-plugin_v1.2.0", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "minor": [ + { + "comment": "Include a `printApiReportDiff` option in the `config/api-extractor-task.json` config file that, when set to `\"production\"` (and the `--production` flag is specified) or `\"always\"`, causes a diff of the API report (*.api.md) to be printed if the report is changed. This is useful for diagnosing issues that only show up in CI." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.54.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `1.1.3` to `1.1.4`" + } + ] + } + }, + { + "version": "1.1.3", + "tag": "@rushstack/heft-api-extractor-plugin_v1.1.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.53.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "1.1.2", + "tag": "@rushstack/heft-api-extractor-plugin_v1.1.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.53.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `1.1.1` to `1.1.2`" + } + ] + } + }, { "version": "1.1.1", "tag": "@rushstack/heft-api-extractor-plugin_v1.1.1", diff --git a/heft-plugins/heft-api-extractor-plugin/CHANGELOG.md b/heft-plugins/heft-api-extractor-plugin/CHANGELOG.md index 59ffb3b4042..dd4728ef941 100644 --- a/heft-plugins/heft-api-extractor-plugin/CHANGELOG.md +++ b/heft-plugins/heft-api-extractor-plugin/CHANGELOG.md @@ -1,6 +1,28 @@ # Change Log - @rushstack/heft-api-extractor-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.2.1 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.2.0 +Tue, 04 Nov 2025 08:15:14 GMT + +### Minor changes + +- Include a `printApiReportDiff` option in the `config/api-extractor-task.json` config file that, when set to `"production"` (and the `--production` flag is specified) or `"always"`, causes a diff of the API report (*.api.md) to be printed if the report is changed. This is useful for diagnosing issues that only show up in CI. + +## 1.1.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.1.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 1.1.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/heft-plugins/heft-api-extractor-plugin/config/heft.json b/heft-plugins/heft-api-extractor-plugin/config/heft.json new file mode 100644 index 00000000000..8d1359f022f --- /dev/null +++ b/heft-plugins/heft-api-extractor-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + "extends": "decoupled-local-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/heft/v1"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/heft-plugins/heft-api-extractor-plugin/package.json b/heft-plugins/heft-api-extractor-plugin/package.json index b01e2d462fd..2b72a18b556 100644 --- a/heft-plugins/heft-api-extractor-plugin/package.json +++ b/heft-plugins/heft-api-extractor-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-api-extractor-plugin", - "version": "1.1.1", + "version": "1.2.1", "description": "A Heft plugin for API Extractor", "repository": { "type": "git", @@ -15,7 +15,7 @@ "_phase:build": "heft run --only build -- --clean" }, "peerDependencies": { - "@rushstack/heft": "1.1.1" + "@rushstack/heft": "1.1.5" }, "dependencies": { "@rushstack/node-core-library": "workspace:*", diff --git a/heft-plugins/heft-api-extractor-plugin/src/ApiExtractorPlugin.ts b/heft-plugins/heft-api-extractor-plugin/src/ApiExtractorPlugin.ts index a88b78ba76c..8ab77d46808 100644 --- a/heft-plugins/heft-api-extractor-plugin/src/ApiExtractorPlugin.ts +++ b/heft-plugins/heft-api-extractor-plugin/src/ApiExtractorPlugin.ts @@ -11,7 +11,7 @@ import type { ConfigurationFile } from '@rushstack/heft'; -import { ApiExtractorRunner } from './ApiExtractorRunner'; +import { invokeApiExtractorAsync } from './ApiExtractorRunner'; import apiExtractorConfigSchema from './schemas/api-extractor-task.schema.json'; // eslint-disable-next-line @rushstack/no-new-null @@ -51,6 +51,15 @@ export interface IApiExtractorTaskConfiguration { * If set to true, do a full run of api-extractor on every build. */ runInWatchMode?: boolean; + + /** + * Controls whether API Extractor prints a diff of the API report file if it's changed. + * If set to `"production"`, this will only be printed if Heft is run in `--production` + * mode, and if set to `"always"`, this will always be printed if the API report is changed. + * This corresponds to API Extractor's `IExtractorInvokeOptions.printApiReportDiff` API option. + * This option defaults to `"never"`. + */ + printApiReportDiff?: 'production' | 'always' | 'never'; } export default class ApiExtractorPlugin implements IHeftTaskPlugin { @@ -161,14 +170,17 @@ export default class ApiExtractorPlugin implements IHeftTaskPlugin { apiExtractor: typeof TApiExtractor, apiExtractorConfiguration: TApiExtractor.ExtractorConfig ): Promise { - const apiExtractorTaskConfiguration: IApiExtractorTaskConfiguration | undefined = - await heftConfiguration.tryLoadProjectConfigurationFileAsync( - API_EXTRACTOR_CONFIG_SPECIFICATION, - taskSession.logger.terminal - ); + const { + runInWatchMode, + useProjectTypescriptVersion, + printApiReportDiff: printApiReportDiffOption + } = (await heftConfiguration.tryLoadProjectConfigurationFileAsync( + API_EXTRACTOR_CONFIG_SPECIFICATION, + taskSession.logger.terminal + )) ?? {}; if (runOptions.requestRun) { - if (!apiExtractorTaskConfiguration?.runInWatchMode) { + if (!runInWatchMode) { if (!this._printedWatchWarning) { this._printedWatchWarning = true; taskSession.logger.terminal.writeWarningLine( @@ -180,23 +192,26 @@ export default class ApiExtractorPlugin implements IHeftTaskPlugin { } let typescriptPackagePath: string | undefined; - if (apiExtractorTaskConfiguration?.useProjectTypescriptVersion) { + if (useProjectTypescriptVersion) { typescriptPackagePath = await heftConfiguration.rigPackageResolver.resolvePackageAsync( 'typescript', taskSession.logger.terminal ); } - const apiExtractorRunner: ApiExtractorRunner = new ApiExtractorRunner({ + const production: boolean = taskSession.parameters.production; + const printApiReportDiff: boolean = + printApiReportDiffOption === 'always' || (printApiReportDiffOption === 'production' && production); + + // Run API Extractor + await invokeApiExtractorAsync({ apiExtractor, apiExtractorConfiguration, typescriptPackagePath, buildFolder: heftConfiguration.buildFolderPath, - production: taskSession.parameters.production, - scopedLogger: taskSession.logger + production, + scopedLogger: taskSession.logger, + printApiReportDiff }); - - // Run API Extractor - await apiExtractorRunner.invokeAsync(); } } diff --git a/heft-plugins/heft-api-extractor-plugin/src/ApiExtractorRunner.ts b/heft-plugins/heft-api-extractor-plugin/src/ApiExtractorRunner.ts index f0e6856ec1c..ae5fa860b2d 100644 --- a/heft-plugins/heft-api-extractor-plugin/src/ApiExtractorRunner.ts +++ b/heft-plugins/heft-api-extractor-plugin/src/ApiExtractorRunner.ts @@ -5,7 +5,6 @@ import * as semver from 'semver'; import type { IScopedLogger } from '@rushstack/heft'; import { FileError, InternalError } from '@rushstack/node-core-library'; -import type { ITerminal } from '@rushstack/terminal'; import type * as TApiExtractor from '@microsoft/api-extractor'; export interface IApiExtractorRunnerConfiguration { @@ -40,104 +39,113 @@ export interface IApiExtractorRunnerConfiguration { * The scoped logger to use for logging */ scopedLogger: IScopedLogger; + + /** + * {@inheritdoc IApiExtractorTaskConfiguration.printApiReportDiff} + */ + printApiReportDiff: boolean | undefined; } const MIN_SUPPORTED_MAJOR_VERSION: number = 7; const MIN_SUPPORTED_MINOR_VERSION: number = 10; -export class ApiExtractorRunner { - private readonly _configuration: IApiExtractorRunnerConfiguration; - private readonly _scopedLogger: IScopedLogger; - private readonly _terminal: ITerminal; - private readonly _apiExtractor: typeof TApiExtractor; - - public constructor(configuration: IApiExtractorRunnerConfiguration) { - this._configuration = configuration; - this._apiExtractor = configuration.apiExtractor; - this._scopedLogger = configuration.scopedLogger; - this._terminal = configuration.scopedLogger.terminal; +export async function invokeApiExtractorAsync( + configuration: IApiExtractorRunnerConfiguration +): Promise { + const { + scopedLogger, + apiExtractor, + buildFolder, + production, + typescriptPackagePath, + apiExtractorConfiguration, + printApiReportDiff + } = configuration; + const { terminal } = scopedLogger; + + terminal.writeLine(`Using API Extractor version ${apiExtractor.Extractor.version}`); + + const apiExtractorVersion: semver.SemVer | null = semver.parse(apiExtractor.Extractor.version); + if ( + !apiExtractorVersion || + apiExtractorVersion.major < MIN_SUPPORTED_MAJOR_VERSION || + (apiExtractorVersion.major === MIN_SUPPORTED_MAJOR_VERSION && + apiExtractorVersion.minor < MIN_SUPPORTED_MINOR_VERSION) + ) { + scopedLogger.emitWarning(new Error(`Heft requires API Extractor version 7.10.0 or newer`)); } - public async invokeAsync(): Promise { - this._scopedLogger.terminal.writeLine( - `Using API Extractor version ${this._apiExtractor.Extractor.version}` - ); - - const apiExtractorVersion: semver.SemVer | null = semver.parse(this._apiExtractor.Extractor.version); - if ( - !apiExtractorVersion || - apiExtractorVersion.major < MIN_SUPPORTED_MAJOR_VERSION || - (apiExtractorVersion.major === MIN_SUPPORTED_MAJOR_VERSION && - apiExtractorVersion.minor < MIN_SUPPORTED_MINOR_VERSION) - ) { - this._scopedLogger.emitWarning(new Error(`Heft requires API Extractor version 7.10.0 or newer`)); - } - - const extractorConfig: TApiExtractor.ExtractorConfig = this._configuration.apiExtractorConfiguration; - const extractorOptions: TApiExtractor.IExtractorInvokeOptions = { - localBuild: !this._configuration.production, - typescriptCompilerFolder: this._configuration.typescriptPackagePath, - messageCallback: (message: TApiExtractor.ExtractorMessage) => { - switch (message.logLevel) { - case this._apiExtractor.ExtractorLogLevel.Error: - case this._apiExtractor.ExtractorLogLevel.Warning: { + const extractorOptions: TApiExtractor.IExtractorInvokeOptions = { + localBuild: !production, + typescriptCompilerFolder: typescriptPackagePath, + // Always show verbose messages - we'll decide what to do with them in the callback + showVerboseMessages: true, + printApiReportDiff, + messageCallback: (message: TApiExtractor.ExtractorMessage) => { + const { logLevel, sourceFilePath, messageId, text, sourceFileLine, sourceFileColumn } = message; + switch (logLevel) { + case apiExtractor.ExtractorLogLevel.Error: + case apiExtractor.ExtractorLogLevel.Warning: { + if (messageId === apiExtractor.ConsoleMessageId.ApiReportDiff) { + // Re-route this to the normal terminal output so it doesn't show up in the list of warnings/errors + terminal.writeLine(text); + } else { let errorToEmit: Error | undefined; - if (message.sourceFilePath) { - errorToEmit = new FileError(`(${message.messageId}) ${message.text}`, { - absolutePath: message.sourceFilePath, - projectFolder: this._configuration.buildFolder, - line: message.sourceFileLine, - column: message.sourceFileColumn + if (sourceFilePath) { + errorToEmit = new FileError(`(${messageId}) ${text}`, { + absolutePath: sourceFilePath, + projectFolder: buildFolder, + line: sourceFileLine, + column: sourceFileColumn }); } else { - errorToEmit = new Error(message.text); + errorToEmit = new Error(text); } - if (message.logLevel === this._apiExtractor.ExtractorLogLevel.Error) { - this._scopedLogger.emitError(errorToEmit); - } else if (message.logLevel === this._apiExtractor.ExtractorLogLevel.Warning) { - this._scopedLogger.emitWarning(errorToEmit); + if (logLevel === apiExtractor.ExtractorLogLevel.Error) { + scopedLogger.emitError(errorToEmit); + } else if (logLevel === apiExtractor.ExtractorLogLevel.Warning) { + scopedLogger.emitWarning(errorToEmit); } else { // Should never happen, but just in case - throw new InternalError(`Unexpected log level: ${message.logLevel}`); + throw new InternalError(`Unexpected log level: ${logLevel}`); } - break; } - case this._apiExtractor.ExtractorLogLevel.Verbose: { - this._terminal.writeVerboseLine(message.text); - break; - } + break; + } - case this._apiExtractor.ExtractorLogLevel.Info: { - this._terminal.writeLine(message.text); - break; - } + case apiExtractor.ExtractorLogLevel.Verbose: { + terminal.writeVerboseLine(text); + break; + } - case this._apiExtractor.ExtractorLogLevel.None: { - // Ignore messages with ExtractorLogLevel.None - break; - } + case apiExtractor.ExtractorLogLevel.Info: { + terminal.writeLine(text); + break; + } - default: - this._scopedLogger.emitError( - new Error(`Unexpected API Extractor log level: ${message.logLevel}`) - ); + case apiExtractor.ExtractorLogLevel.None: { + // Ignore messages with ExtractorLogLevel.None + break; } - message.handled = true; + default: + scopedLogger.emitError(new Error(`Unexpected API Extractor log level: ${logLevel}`)); } - }; - const apiExtractorResult: TApiExtractor.ExtractorResult = this._apiExtractor.Extractor.invoke( - extractorConfig, - extractorOptions - ); - - if (!apiExtractorResult.succeeded) { - this._scopedLogger.emitError(new Error('API Extractor failed.')); - } else if (apiExtractorResult.apiReportChanged && this._configuration.production) { - this._scopedLogger.emitError(new Error('API Report changed while in production mode.')); + message.handled = true; } + }; + + const apiExtractorResult: TApiExtractor.ExtractorResult = apiExtractor.Extractor.invoke( + apiExtractorConfiguration, + extractorOptions + ); + + if (!apiExtractorResult.succeeded) { + scopedLogger.emitError(new Error('API Extractor failed.')); + } else if (apiExtractorResult.apiReportChanged && production) { + scopedLogger.emitError(new Error('API Report changed while in production mode.')); } } diff --git a/heft-plugins/heft-api-extractor-plugin/src/schemas/api-extractor-task.schema.json b/heft-plugins/heft-api-extractor-plugin/src/schemas/api-extractor-task.schema.json index 9710f292181..84e0fe3f689 100644 --- a/heft-plugins/heft-api-extractor-plugin/src/schemas/api-extractor-task.schema.json +++ b/heft-plugins/heft-api-extractor-plugin/src/schemas/api-extractor-task.schema.json @@ -25,6 +25,12 @@ "runInWatchMode": { "type": "boolean", "description": "If set to true, api-extractor will be run even in watch mode. This option defaults to false." + }, + + "printApiReportDiff": { + "type": "string", + "description": "Controls whether API Extractor prints a diff of the API report file if it's changed. If set to `\"production\"`, this will only be printed if Heft is run in `--production` mode, and if set to `\"always\"`, this will always be printed if the API report is changed. This corresponds to API Extractor's `IExtractorInvokeOptions.printApiReportDiff` API option. This option defaults to `\"never\"`.", + "enum": ["always", "production", "never"] } } } diff --git a/heft-plugins/heft-dev-cert-plugin/CHANGELOG.json b/heft-plugins/heft-dev-cert-plugin/CHANGELOG.json index 7bd3ee3f2b7..c321073f566 100644 --- a/heft-plugins/heft-dev-cert-plugin/CHANGELOG.json +++ b/heft-plugins/heft-dev-cert-plugin/CHANGELOG.json @@ -1,6 +1,90 @@ { "name": "@rushstack/heft-dev-cert-plugin", "entries": [ + { + "version": "1.0.6", + "tag": "@rushstack/heft-dev-cert-plugin_v1.0.6", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/debug-certificate-manager\" to `1.6.5`" + }, + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.55.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.4` to `1.1.5`" + } + ] + } + }, + { + "version": "1.0.5", + "tag": "@rushstack/heft-dev-cert-plugin_v1.0.5", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/debug-certificate-manager\" to `1.6.4`" + }, + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.54.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.3` to `1.1.4`" + } + ] + } + }, + { + "version": "1.0.4", + "tag": "@rushstack/heft-dev-cert-plugin_v1.0.4", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/debug-certificate-manager\" to `1.6.3`" + }, + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.53.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "1.0.3", + "tag": "@rushstack/heft-dev-cert-plugin_v1.0.3", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/debug-certificate-manager\" to `1.6.2`" + }, + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.53.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.1` to `1.1.2`" + } + ] + } + }, { "version": "1.0.2", "tag": "@rushstack/heft-dev-cert-plugin_v1.0.2", diff --git a/heft-plugins/heft-dev-cert-plugin/CHANGELOG.md b/heft-plugins/heft-dev-cert-plugin/CHANGELOG.md index 8026df2ef63..e088d6433e0 100644 --- a/heft-plugins/heft-dev-cert-plugin/CHANGELOG.md +++ b/heft-plugins/heft-dev-cert-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/heft-dev-cert-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:28 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.0.6 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.0.5 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 1.0.4 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.0.3 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 1.0.2 Wed, 08 Oct 2025 00:13:28 GMT diff --git a/heft-plugins/heft-dev-cert-plugin/package.json b/heft-plugins/heft-dev-cert-plugin/package.json index a3818c32214..bec903ed51c 100644 --- a/heft-plugins/heft-dev-cert-plugin/package.json +++ b/heft-plugins/heft-dev-cert-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-dev-cert-plugin", - "version": "1.0.2", + "version": "1.0.6", "description": "A Heft plugin for generating and using local development certificates", "repository": { "type": "git", @@ -16,7 +16,7 @@ "_phase:test": "heft run --only test -- --clean" }, "peerDependencies": { - "@rushstack/heft": "^1.1.1" + "@rushstack/heft": "^1.1.5" }, "dependencies": { "@rushstack/debug-certificate-manager": "workspace:*" diff --git a/heft-plugins/heft-isolated-typescript-transpile-plugin/CHANGELOG.json b/heft-plugins/heft-isolated-typescript-transpile-plugin/CHANGELOG.json index 209026f9750..fdf782327ab 100644 --- a/heft-plugins/heft-isolated-typescript-transpile-plugin/CHANGELOG.json +++ b/heft-plugins/heft-isolated-typescript-transpile-plugin/CHANGELOG.json @@ -1,6 +1,108 @@ { "name": "@rushstack/heft-isolated-typescript-transpile-plugin", "entries": [ + { + "version": "1.1.5", + "tag": "@rushstack/heft-isolated-typescript-transpile-plugin_v1.1.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/lookup-by-path\" to `0.8.7`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.4` to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `^1.1.5`" + } + ] + } + }, + { + "version": "1.1.4", + "tag": "@rushstack/heft-isolated-typescript-transpile-plugin_v1.1.4", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/lookup-by-path\" to `0.8.6`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.3` to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `^1.1.4`" + } + ] + } + }, + { + "version": "1.1.3", + "tag": "@rushstack/heft-isolated-typescript-transpile-plugin_v1.1.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/lookup-by-path\" to `0.8.5`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.2` to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `^1.1.3`" + } + ] + } + }, + { + "version": "1.1.2", + "tag": "@rushstack/heft-isolated-typescript-transpile-plugin_v1.1.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/lookup-by-path\" to `0.8.4`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.1` to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `^1.1.2`" + } + ] + } + }, { "version": "1.1.1", "tag": "@rushstack/heft-isolated-typescript-transpile-plugin_v1.1.1", diff --git a/heft-plugins/heft-isolated-typescript-transpile-plugin/CHANGELOG.md b/heft-plugins/heft-isolated-typescript-transpile-plugin/CHANGELOG.md index 0e26a60abb7..86ab0b6131e 100644 --- a/heft-plugins/heft-isolated-typescript-transpile-plugin/CHANGELOG.md +++ b/heft-plugins/heft-isolated-typescript-transpile-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/heft-isolated-typescript-transpile-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.1.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.1.4 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 1.1.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.1.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 1.1.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/heft-plugins/heft-isolated-typescript-transpile-plugin/config/heft.json b/heft-plugins/heft-isolated-typescript-transpile-plugin/config/heft.json new file mode 100644 index 00000000000..0e52387039a --- /dev/null +++ b/heft-plugins/heft-isolated-typescript-transpile-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + "extends": "local-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/heft/v1"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/heft-plugins/heft-isolated-typescript-transpile-plugin/package.json b/heft-plugins/heft-isolated-typescript-transpile-plugin/package.json index c26d30bd1b4..604dfe29522 100644 --- a/heft-plugins/heft-isolated-typescript-transpile-plugin/package.json +++ b/heft-plugins/heft-isolated-typescript-transpile-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-isolated-typescript-transpile-plugin", - "version": "1.1.1", + "version": "1.1.5", "description": "Heft plugin for transpiling TypeScript with SWC", "repository": { "type": "git", @@ -18,7 +18,7 @@ "_phase:test": "heft run --only test -- --clean" }, "peerDependencies": { - "@rushstack/heft": "^1.1.1", + "@rushstack/heft": "^1.1.5", "@rushstack/heft-typescript-plugin": "workspace:^" }, "devDependencies": { diff --git a/heft-plugins/heft-jest-plugin/CHANGELOG.json b/heft-plugins/heft-jest-plugin/CHANGELOG.json index f7a3152c52b..bcc7fe1ca24 100644 --- a/heft-plugins/heft-jest-plugin/CHANGELOG.json +++ b/heft-plugins/heft-jest-plugin/CHANGELOG.json @@ -1,6 +1,84 @@ { "name": "@rushstack/heft-jest-plugin", "entries": [ + { + "version": "1.1.5", + "tag": "@rushstack/heft-jest-plugin_v1.1.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.4` to `1.1.5`" + } + ] + } + }, + { + "version": "1.1.4", + "tag": "@rushstack/heft-jest-plugin_v1.1.4", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.3` to `1.1.4`" + } + ] + } + }, + { + "version": "1.1.3", + "tag": "@rushstack/heft-jest-plugin_v1.1.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-config-file\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "1.1.2", + "tag": "@rushstack/heft-jest-plugin_v1.1.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-config-file\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.1` to `1.1.2`" + } + ] + } + }, { "version": "1.1.1", "tag": "@rushstack/heft-jest-plugin_v1.1.1", diff --git a/heft-plugins/heft-jest-plugin/CHANGELOG.md b/heft-plugins/heft-jest-plugin/CHANGELOG.md index c20945eae96..6e1b5b3df71 100644 --- a/heft-plugins/heft-jest-plugin/CHANGELOG.md +++ b/heft-plugins/heft-jest-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/heft-jest-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.1.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.1.4 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 1.1.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.1.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 1.1.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/heft-plugins/heft-jest-plugin/config/heft.json b/heft-plugins/heft-jest-plugin/config/heft.json new file mode 100644 index 00000000000..8d1359f022f --- /dev/null +++ b/heft-plugins/heft-jest-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + "extends": "decoupled-local-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/heft/v1"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/heft-plugins/heft-jest-plugin/package.json b/heft-plugins/heft-jest-plugin/package.json index fab25bd6554..6d8a668c8f1 100644 --- a/heft-plugins/heft-jest-plugin/package.json +++ b/heft-plugins/heft-jest-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-jest-plugin", - "version": "1.1.1", + "version": "1.1.5", "description": "Heft plugin for Jest", "repository": { "type": "git", @@ -16,7 +16,7 @@ "_phase:test": "heft run --only test -- --clean" }, "peerDependencies": { - "@rushstack/heft": "^1.1.1", + "@rushstack/heft": "^1.1.5", "jest-environment-jsdom": "^29.5.0", "jest-environment-node": "^29.5.0" }, diff --git a/heft-plugins/heft-json-schema-typings-plugin/CHANGELOG.json b/heft-plugins/heft-json-schema-typings-plugin/CHANGELOG.json index f6710c17a2e..4af37bad20f 100644 --- a/heft-plugins/heft-json-schema-typings-plugin/CHANGELOG.json +++ b/heft-plugins/heft-json-schema-typings-plugin/CHANGELOG.json @@ -1,6 +1,90 @@ { "name": "@rushstack/heft-json-schema-typings-plugin", "entries": [ + { + "version": "1.1.5", + "tag": "@rushstack/heft-json-schema-typings-plugin_v1.1.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/typings-generator\" to `0.15.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `1.1.4` to `1.1.5`" + } + ] + } + }, + { + "version": "1.1.4", + "tag": "@rushstack/heft-json-schema-typings-plugin_v1.1.4", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/typings-generator\" to `0.15.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `1.1.3` to `1.1.4`" + } + ] + } + }, + { + "version": "1.1.3", + "tag": "@rushstack/heft-json-schema-typings-plugin_v1.1.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/typings-generator\" to `0.15.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "1.1.2", + "tag": "@rushstack/heft-json-schema-typings-plugin_v1.1.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/typings-generator\" to `0.15.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `1.1.1` to `1.1.2`" + } + ] + } + }, { "version": "1.1.1", "tag": "@rushstack/heft-json-schema-typings-plugin_v1.1.1", diff --git a/heft-plugins/heft-json-schema-typings-plugin/CHANGELOG.md b/heft-plugins/heft-json-schema-typings-plugin/CHANGELOG.md index 7b9b7c28652..64e36ce0af8 100644 --- a/heft-plugins/heft-json-schema-typings-plugin/CHANGELOG.md +++ b/heft-plugins/heft-json-schema-typings-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/heft-json-schema-typings-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.1.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.1.4 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 1.1.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.1.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 1.1.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/heft-plugins/heft-json-schema-typings-plugin/config/heft.json b/heft-plugins/heft-json-schema-typings-plugin/config/heft.json new file mode 100644 index 00000000000..0e52387039a --- /dev/null +++ b/heft-plugins/heft-json-schema-typings-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + "extends": "local-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/heft/v1"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/heft-plugins/heft-json-schema-typings-plugin/heft-plugin.json b/heft-plugins/heft-json-schema-typings-plugin/heft-plugin.json index 29eec2267b7..f9db17a5dbd 100644 --- a/heft-plugins/heft-json-schema-typings-plugin/heft-plugin.json +++ b/heft-plugins/heft-json-schema-typings-plugin/heft-plugin.json @@ -5,7 +5,7 @@ { "pluginName": "json-schema-typings-plugin", "entryPoint": "./lib/JsonSchemaTypingsPlugin", - "optionsSchema": "./lib/schemas/options.schema.json" + "optionsSchema": "./lib/schemas/heft-json-schema-typings-plugin.schema.json" } ] } diff --git a/heft-plugins/heft-json-schema-typings-plugin/package.json b/heft-plugins/heft-json-schema-typings-plugin/package.json index dce81cd6278..56bef6c4b50 100644 --- a/heft-plugins/heft-json-schema-typings-plugin/package.json +++ b/heft-plugins/heft-json-schema-typings-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-json-schema-typings-plugin", - "version": "1.1.1", + "version": "1.1.5", "description": "A Heft plugin for generating TypeScript typings from JSON schema files.", "repository": { "type": "git", @@ -15,7 +15,7 @@ "_phase:build": "heft run --only build -- --clean" }, "peerDependencies": { - "@rushstack/heft": "1.1.1" + "@rushstack/heft": "1.1.5" }, "dependencies": { "@rushstack/node-core-library": "workspace:*", diff --git a/heft-plugins/heft-json-schema-typings-plugin/src/schemas/options.schema.json b/heft-plugins/heft-json-schema-typings-plugin/src/schemas/heft-json-schema-typings-plugin.schema.json similarity index 100% rename from heft-plugins/heft-json-schema-typings-plugin/src/schemas/options.schema.json rename to heft-plugins/heft-json-schema-typings-plugin/src/schemas/heft-json-schema-typings-plugin.schema.json diff --git a/heft-plugins/heft-lint-plugin/CHANGELOG.json b/heft-plugins/heft-lint-plugin/CHANGELOG.json index 53d790f255c..0dd336e6520 100644 --- a/heft-plugins/heft-lint-plugin/CHANGELOG.json +++ b/heft-plugins/heft-lint-plugin/CHANGELOG.json @@ -1,6 +1,119 @@ { "name": "@rushstack/heft-lint-plugin", "entries": [ + { + "version": "1.1.7", + "tag": "@rushstack/heft-lint-plugin_v1.1.7", + "date": "Wed, 12 Nov 2025 01:57:54 GMT", + "comments": { + "patch": [ + { + "comment": "Forward suppressed messages to formatters." + } + ] + } + }, + { + "version": "1.1.6", + "tag": "@rushstack/heft-lint-plugin_v1.1.6", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `1.1.4` to `1.1.5`" + } + ] + } + }, + { + "version": "1.1.5", + "tag": "@rushstack/heft-lint-plugin_v1.1.5", + "date": "Tue, 11 Nov 2025 16:13:26 GMT", + "comments": { + "patch": [ + { + "comment": "Ensure that `parserOptions.tsconfigRootDir` is set for use by custom lint rules." + } + ] + } + }, + { + "version": "1.1.4", + "tag": "@rushstack/heft-lint-plugin_v1.1.4", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "patch": [ + { + "comment": "Fix bug where TypeScript program is not reused in ESLint 9." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `1.1.3` to `1.1.4`" + } + ] + } + }, + { + "version": "1.1.3", + "tag": "@rushstack/heft-lint-plugin_v1.1.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "1.1.2", + "tag": "@rushstack/heft-lint-plugin_v1.1.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `1.1.1` to `1.1.2`" + } + ] + } + }, { "version": "1.1.1", "tag": "@rushstack/heft-lint-plugin_v1.1.1", diff --git a/heft-plugins/heft-lint-plugin/CHANGELOG.md b/heft-plugins/heft-lint-plugin/CHANGELOG.md index d3c65204913..5e001b0a664 100644 --- a/heft-plugins/heft-lint-plugin/CHANGELOG.md +++ b/heft-plugins/heft-lint-plugin/CHANGELOG.md @@ -1,6 +1,42 @@ # Change Log - @rushstack/heft-lint-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:57:54 GMT and should not be manually modified. + +## 1.1.7 +Wed, 12 Nov 2025 01:57:54 GMT + +### Patches + +- Forward suppressed messages to formatters. + +## 1.1.6 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.1.5 +Tue, 11 Nov 2025 16:13:26 GMT + +### Patches + +- Ensure that `parserOptions.tsconfigRootDir` is set for use by custom lint rules. + +## 1.1.4 +Tue, 04 Nov 2025 08:15:14 GMT + +### Patches + +- Fix bug where TypeScript program is not reused in ESLint 9. + +## 1.1.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.1.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 1.1.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/heft-plugins/heft-lint-plugin/config/heft.json b/heft-plugins/heft-lint-plugin/config/heft.json new file mode 100644 index 00000000000..8d1359f022f --- /dev/null +++ b/heft-plugins/heft-lint-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + "extends": "decoupled-local-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/heft/v1"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/heft-plugins/heft-lint-plugin/package.json b/heft-plugins/heft-lint-plugin/package.json index 7bbb54e131c..1a280dc6a54 100644 --- a/heft-plugins/heft-lint-plugin/package.json +++ b/heft-plugins/heft-lint-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-lint-plugin", - "version": "1.1.1", + "version": "1.1.7", "description": "A Heft plugin for using ESLint or TSLint. Intended for use with @rushstack/heft-typescript-plugin", "repository": { "type": "git", @@ -16,7 +16,7 @@ "_phase:test": "heft run --only test -- --clean" }, "peerDependencies": { - "@rushstack/heft": "1.1.1" + "@rushstack/heft": "1.1.5" }, "dependencies": { "@rushstack/node-core-library": "workspace:*", diff --git a/heft-plugins/heft-lint-plugin/src/Eslint.ts b/heft-plugins/heft-lint-plugin/src/Eslint.ts index 665e7c78e85..aea83cbee8d 100644 --- a/heft-plugins/heft-lint-plugin/src/Eslint.ts +++ b/heft-plugins/heft-lint-plugin/src/Eslint.ts @@ -16,6 +16,7 @@ import type { HeftConfiguration } from '@rushstack/heft'; import { LinterBase, type ILinterBaseOptions } from './LinterBase'; import type { IExtendedSourceFile } from './internalTypings/TypeScriptInternals'; +import { name as pluginName, version as pluginVersion } from '../package.json'; interface IEslintOptions extends ILinterBaseOptions { eslintPackage: typeof TEslint | typeof TEslintLegacy; @@ -61,32 +62,13 @@ function getFormattedErrorMessage( return lintMessage.ruleId ? `(${lintMessage.ruleId}) ${lintMessage.message}` : lintMessage.message; } -interface IExtendedEslintConfig extends TEslint.Linter.Config { - // https://github.com/eslint/eslint/blob/d6fa4ac031c2fe24fb778e84940393fbda3ddf77/lib/config/config.js#L264 - toJSON: () => object; - __originalToJSON: () => object; -} - -function patchedToJSON(this: IExtendedEslintConfig): object { - // If the input config has a parserOptions.programs property, we need to recreate it - // as a non-enumerable property so that it does not get serialized, as it is not - // serializable. - if ( - this.languageOptions?.parserOptions?.programs && - this.languageOptions.parserOptions.propertyIsEnumerable('programs') - ) { - let { programs } = this.languageOptions.parserOptions; - Object.defineProperty(this.languageOptions.parserOptions, 'programs', { - get: () => programs, - set: (value: TTypescript.Program[]) => { - programs = value; - }, - enumerable: false - }); - } - - const serializableConfig: object = this.__originalToJSON.call(this); - return serializableConfig; +function parserOptionsToJson(this: TEslint.Linter.LanguageOptions['parserOptions']): object { + const serializableParserOptions: TEslint.Linter.LanguageOptions['parserOptions'] = { + ...this, + // Remove the programs to avoid circular references and non-serializable data + programs: undefined + }; + return serializableParserOptions; } const ESLINT_CONFIG_JS_FILENAME: string = 'eslint.config.js'; @@ -112,6 +94,7 @@ export class Eslint extends LinterBase = new Map(); private readonly _sarifLogPath: string | undefined; + private readonly _configHashMap: WeakMap = new WeakMap(); protected constructor(options: IEslintOptions) { super('eslint', options); @@ -165,11 +148,31 @@ export class Eslint extends LinterBase 9.28.0 + toJSON: parserOptionsToJson, + // ESlint's merge logic for parserOptions is a "replace", so we need to set this again + tsconfigRootDir: buildFolderPath + }; + if (this._eslintPackageVersion.minor < 28) { + overrideParserOptions = Object.defineProperties(overrideParserOptions, { + // Support for `toJSON` within languageOptions was added in ESLint 9.28.0 + // This hack tells ESLint's `languageOptionsToJSON` function to replace the entire `parserOptions` object with `@rushstack/heft-lint-plugin@${version}` + meta: { + value: { + name: pluginName, + version: pluginVersion + } + } + }); + } // The @typescript-eslint/parser package allows providing an existing TypeScript program to avoid needing // to reparse. However, fixers in ESLint run in multiple passes against the underlying code until the // fix fully succeeds. This conflicts with providing an existing program as the code no longer maps to @@ -177,9 +180,7 @@ export class Eslint extends LinterBase { - const sourceFileEslintConfiguration: IExtendedEslintConfig = await this._linter.calculateConfigForFile( + const sourceFileEslintConfiguration: TEslint.Linter.Config = await this._linter.calculateConfigForFile( sourceFile.fileName ); - // The eslint configuration object contains a toJSON() method that returns a serializable version of the - // configuration. However, we are manually injecting the TypeScript program into the parserOptions, which - // is not serializable. Patch the function to remove the program before returning the serializable version. - if (sourceFileEslintConfiguration.toJSON && !sourceFileEslintConfiguration.__originalToJSON) { - sourceFileEslintConfiguration.__originalToJSON = sourceFileEslintConfiguration.toJSON; - sourceFileEslintConfiguration.toJSON = patchedToJSON.bind(sourceFileEslintConfiguration); - } - const hash: Hash = createHash('sha1'); // Use a stable stringifier to ensure that the hash is always the same, even if the order of the properties // changes. This is also done in ESLint @@ -299,19 +292,7 @@ export class Eslint extends LinterBase 0; }); - const trimmedLintResults: (TEslint.ESLint.LintResult | TEslintLegacy.ESLint.LintResult)[] = []; - for (const lintResult of lintResults) { - if ( - lintResult.messages.length > 0 || - lintResult.warningCount > 0 || - lintResult.errorCount > 0 || - fixMessages.length > 0 - ) { - trimmedLintResults.push(lintResult); - } - } - - return trimmedLintResults; + return lintResults; } protected override async lintingFinishedAsync(lintResults: TEslint.ESLint.LintResult[]): Promise { @@ -389,6 +370,16 @@ export class Eslint extends LinterBase { + return ( + !lintResult.suppressedMessages?.length && (lintResult.errorCount > 0 || lintResult.warningCount > 0) + ); + }); + } + private _getLintFileError( lintResult: TEslint.ESLint.LintResult | TEslintLegacy.ESLint.LintResult, lintMessage: TEslint.Linter.LintMessage | TEslintLegacy.Linter.LintMessage, diff --git a/heft-plugins/heft-lint-plugin/src/LinterBase.ts b/heft-plugins/heft-lint-plugin/src/LinterBase.ts index 1c981496008..37d3a61a5af 100644 --- a/heft-plugins/heft-lint-plugin/src/LinterBase.ts +++ b/heft-plugins/heft-lint-plugin/src/LinterBase.ts @@ -149,12 +149,13 @@ export abstract class LinterBase { ) { fileCount++; const results: TLintResult[] = await this.lintFileAsync(sourceFile); - if (results.length === 0) { + // Always forward the results, since they might be suppressed. + for (const result of results) { + lintResults.push(result); + } + + if (!this.hasLintFailures(results)) { newNoFailureFileVersions.set(relative, version); - } else { - for (const result of results) { - lintResults.push(result); - } } } else { newNoFailureFileVersions.set(relative, version); @@ -198,7 +199,9 @@ export abstract class LinterBase { protected abstract lintFileAsync(sourceFile: IExtendedSourceFile): Promise; - protected abstract lintingFinishedAsync(lintFailures: TLintResult[]): Promise; + protected abstract lintingFinishedAsync(lintResults: TLintResult[]): Promise; + + protected abstract hasLintFailures(lintResults: TLintResult[]): boolean; protected abstract isFileExcludedAsync(filePath: string): Promise; } diff --git a/heft-plugins/heft-lint-plugin/src/Tslint.ts b/heft-plugins/heft-lint-plugin/src/Tslint.ts index 4f90117c351..52a15677ad7 100644 --- a/heft-plugins/heft-lint-plugin/src/Tslint.ts +++ b/heft-plugins/heft-lint-plugin/src/Tslint.ts @@ -206,6 +206,10 @@ export class Tslint extends LinterBase { return this._tslintPackage.Configuration.isFileExcluded(filePath, this._tslintConfiguration); } + protected hasLintFailures(lintResults: TTslint.RuleFailure[]): boolean { + return lintResults.length > 0; + } + private _getLintFileError(tslintFailure: TTslint.RuleFailure, message?: string): FileError { if (!message) { message = getFormattedErrorMessage(tslintFailure); diff --git a/heft-plugins/heft-localization-typings-plugin/CHANGELOG.json b/heft-plugins/heft-localization-typings-plugin/CHANGELOG.json index 005d2f2a2ac..53633377419 100644 --- a/heft-plugins/heft-localization-typings-plugin/CHANGELOG.json +++ b/heft-plugins/heft-localization-typings-plugin/CHANGELOG.json @@ -1,6 +1,78 @@ { "name": "@rushstack/heft-localization-typings-plugin", "entries": [ + { + "version": "1.0.6", + "tag": "@rushstack/heft-localization-typings-plugin_v1.0.6", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/localization-utilities\" to `0.14.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.4` to `1.1.5`" + } + ] + } + }, + { + "version": "1.0.5", + "tag": "@rushstack/heft-localization-typings-plugin_v1.0.5", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/localization-utilities\" to `0.14.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.3` to `1.1.4`" + } + ] + } + }, + { + "version": "1.0.4", + "tag": "@rushstack/heft-localization-typings-plugin_v1.0.4", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/localization-utilities\" to `0.14.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "1.0.3", + "tag": "@rushstack/heft-localization-typings-plugin_v1.0.3", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/localization-utilities\" to `0.14.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.1` to `1.1.2`" + } + ] + } + }, { "version": "1.0.2", "tag": "@rushstack/heft-localization-typings-plugin_v1.0.2", diff --git a/heft-plugins/heft-localization-typings-plugin/CHANGELOG.md b/heft-plugins/heft-localization-typings-plugin/CHANGELOG.md index 0bc7f083716..012e87cd204 100644 --- a/heft-plugins/heft-localization-typings-plugin/CHANGELOG.md +++ b/heft-plugins/heft-localization-typings-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/heft-localization-typings-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.0.6 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.0.5 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 1.0.4 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.0.3 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 1.0.2 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/heft-plugins/heft-localization-typings-plugin/config/heft.json b/heft-plugins/heft-localization-typings-plugin/config/heft.json new file mode 100644 index 00000000000..0e52387039a --- /dev/null +++ b/heft-plugins/heft-localization-typings-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + "extends": "local-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/heft/v1"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/heft-plugins/heft-localization-typings-plugin/heft-plugin.json b/heft-plugins/heft-localization-typings-plugin/heft-plugin.json index f4a6d738ecf..3d1d82ac7f3 100644 --- a/heft-plugins/heft-localization-typings-plugin/heft-plugin.json +++ b/heft-plugins/heft-localization-typings-plugin/heft-plugin.json @@ -5,7 +5,7 @@ { "pluginName": "localization-typings-plugin", "entryPoint": "./lib/LocalizationTypingsPlugin", - "optionsSchema": "./lib/schemas/options.schema.json" + "optionsSchema": "./lib/schemas/heft-localization-typings-plugin.schema.json" } ] } diff --git a/heft-plugins/heft-localization-typings-plugin/package.json b/heft-plugins/heft-localization-typings-plugin/package.json index 098bd28062b..bd9b72834dd 100644 --- a/heft-plugins/heft-localization-typings-plugin/package.json +++ b/heft-plugins/heft-localization-typings-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-localization-typings-plugin", - "version": "1.0.2", + "version": "1.0.6", "description": "Heft plugin for generating types for localization files.", "repository": { "type": "git", @@ -16,7 +16,7 @@ "_phase:test": "heft run --only test -- --clean" }, "peerDependencies": { - "@rushstack/heft": "^1.1.1" + "@rushstack/heft": "^1.1.5" }, "devDependencies": { "@rushstack/heft": "workspace:*", diff --git a/heft-plugins/heft-localization-typings-plugin/src/schemas/options.schema.json b/heft-plugins/heft-localization-typings-plugin/src/schemas/heft-localization-typings-plugin.schema.json similarity index 100% rename from heft-plugins/heft-localization-typings-plugin/src/schemas/options.schema.json rename to heft-plugins/heft-localization-typings-plugin/src/schemas/heft-localization-typings-plugin.schema.json diff --git a/heft-plugins/heft-rspack-plugin/.npmignore b/heft-plugins/heft-rspack-plugin/.npmignore new file mode 100644 index 00000000000..ffb155d74e6 --- /dev/null +++ b/heft-plugins/heft-rspack-plugin/.npmignore @@ -0,0 +1,34 @@ +# THIS IS A STANDARD TEMPLATE FOR .npmignore FILES IN THIS REPO. + +# Ignore all files by default, to avoid accidentally publishing unintended files. +* + +# Use negative patterns to bring back the specific things we want to publish. +!/bin/** +!/lib/** +!/lib-*/** +!/dist/** + +!CHANGELOG.md +!CHANGELOG.json +!heft-plugin.json +!rush-plugin-manifest.json +!ThirdPartyNotice.txt + +# Ignore certain patterns that should not get published. +/dist/*.stats.* +/lib/**/test/ +/lib-*/**/test/ +*.test.js + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README.md +# LICENSE + +# --------------------------------------------------------------------------- +# DO NOT MODIFY ABOVE THIS LINE! Add any project-specific overrides below. +# --------------------------------------------------------------------------- + +!/includes/** diff --git a/heft-plugins/heft-rspack-plugin/LICENSE b/heft-plugins/heft-rspack-plugin/LICENSE new file mode 100644 index 00000000000..53dca6cd336 --- /dev/null +++ b/heft-plugins/heft-rspack-plugin/LICENSE @@ -0,0 +1,24 @@ +@rushstack/heft-rspack-plugin + +Copyright (c) Microsoft Corporation. All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/heft-plugins/heft-rspack-plugin/README.md b/heft-plugins/heft-rspack-plugin/README.md new file mode 100644 index 00000000000..91a8874cfa1 --- /dev/null +++ b/heft-plugins/heft-rspack-plugin/README.md @@ -0,0 +1,12 @@ +# @rushstack/heft-rspack-plugin + +This is a Heft plugin for using Rspack. + +## Links + +- [CHANGELOG.md]( + https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-rspack-plugin/CHANGELOG.md) - Find + out what's new in the latest version +- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor. + +Heft is part of the [Rush Stack](https://rushstack.io/) family of projects. diff --git a/heft-plugins/heft-rspack-plugin/config/api-extractor.json b/heft-plugins/heft-rspack-plugin/config/api-extractor.json new file mode 100644 index 00000000000..74590d3c4f8 --- /dev/null +++ b/heft-plugins/heft-rspack-plugin/config/api-extractor.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + + "mainEntryPointFilePath": "/lib/index.d.ts", + "apiReport": { + "enabled": true, + "reportFolder": "../../../common/reviews/api" + }, + "docModel": { + "enabled": false + }, + "dtsRollup": { + "enabled": true, + "betaTrimmedFilePath": "/dist/.d.ts" + } +} diff --git a/heft-plugins/heft-rspack-plugin/config/heft.json b/heft-plugins/heft-rspack-plugin/config/heft.json new file mode 100644 index 00000000000..0e52387039a --- /dev/null +++ b/heft-plugins/heft-rspack-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + "extends": "local-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/heft/v1"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/heft-plugins/heft-rspack-plugin/config/jest.config.json b/heft-plugins/heft-rspack-plugin/config/jest.config.json new file mode 100644 index 00000000000..d1749681d90 --- /dev/null +++ b/heft-plugins/heft-rspack-plugin/config/jest.config.json @@ -0,0 +1,3 @@ +{ + "extends": "local-node-rig/profiles/default/config/jest.config.json" +} diff --git a/heft-plugins/heft-rspack-plugin/config/rig.json b/heft-plugins/heft-rspack-plugin/config/rig.json new file mode 100644 index 00000000000..165ffb001f5 --- /dev/null +++ b/heft-plugins/heft-rspack-plugin/config/rig.json @@ -0,0 +1,7 @@ +{ + // The "rig.json" file directs tools to look for their config files in an external package. + // Documentation for this system: https://www.npmjs.com/package/@rushstack/rig-package + "$schema": "https://developer.microsoft.com/json-schemas/rig-package/rig.schema.json", + + "rigPackageName": "local-node-rig" +} diff --git a/heft-plugins/heft-rspack-plugin/eslint.config.js b/heft-plugins/heft-rspack-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/heft-plugins/heft-rspack-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/heft-plugins/heft-rspack-plugin/heft-plugin.json b/heft-plugins/heft-rspack-plugin/heft-plugin.json new file mode 100644 index 00000000000..a8ce14984a6 --- /dev/null +++ b/heft-plugins/heft-rspack-plugin/heft-plugin.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json", + + "taskPlugins": [ + { + "pluginName": "rspack-plugin", + "entryPoint": "./lib/RspackPlugin", + "optionsSchema": "./lib/schemas/heft-rspack-plugin.schema.json", + + "parameterScope": "rspack", + "parameters": [ + { + "longName": "--serve", + "parameterKind": "flag", + "description": "Start a local web server for testing purposes using @rspack/dev-server. This parameter is only available when running in watch mode." + } + ] + } + ] +} diff --git a/heft-plugins/heft-rspack-plugin/package.json b/heft-plugins/heft-rspack-plugin/package.json new file mode 100644 index 00000000000..87a601f1aeb --- /dev/null +++ b/heft-plugins/heft-rspack-plugin/package.json @@ -0,0 +1,38 @@ +{ + "name": "@rushstack/heft-rspack-plugin", + "version": "0.0.0", + "description": "Heft plugin for Rspack", + "repository": { + "type": "git", + "url": "https://github.com/microsoft/rushstack.git", + "directory": "heft-plugins/heft-rspack-plugin" + }, + "homepage": "https://rushstack.io/pages/heft/overview/", + "main": "lib/index.js", + "types": "dist/heft-rspack-plugin.d.ts", + "license": "MIT", + "scripts": { + "build": "heft build --clean", + "start": "heft test --clean --watch", + "_phase:build": "heft run --only build -- --clean", + "_phase:test": "heft run --only test -- --clean" + }, + "peerDependencies": { + "@rushstack/heft": "^1.1.5", + "@rspack/core": "^1.6.0-beta.0" + }, + "dependencies": { + "@rushstack/debug-certificate-manager": "workspace:*", + "@rushstack/node-core-library": "workspace:*", + "tapable": "2.3.0", + "@rspack/dev-server": "^1.1.4", + "webpack": "~5.98.0" + }, + "devDependencies": { + "@rushstack/heft": "workspace:*", + "@rushstack/terminal": "workspace:*", + "eslint": "~9.37.0", + "local-node-rig": "workspace:*", + "@rspack/core": "~1.6.0-beta.0" + } +} diff --git a/heft-plugins/heft-rspack-plugin/src/RspackConfigurationLoader.ts b/heft-plugins/heft-rspack-plugin/src/RspackConfigurationLoader.ts new file mode 100644 index 00000000000..3864f08dc6f --- /dev/null +++ b/heft-plugins/heft-rspack-plugin/src/RspackConfigurationLoader.ts @@ -0,0 +1,190 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import * as path from 'node:path'; +import { pathToFileURL } from 'node:url'; + +import type * as TRspack from '@rspack/core'; + +import type { HeftConfiguration, IHeftTaskSession } from '@rushstack/heft'; +import { FileSystem } from '@rushstack/node-core-library'; + +import type { IRspackPluginOptions } from './RspackPlugin'; +import { + type IRspackConfiguration, + type IRspackConfigurationFnEnvironment, + type IRspackPluginAccessorHooks, + PLUGIN_NAME, + STAGE_LOAD_LOCAL_CONFIG +} from './shared'; + +type IRspackConfigJsExport = + | TRspack.Configuration + | TRspack.Configuration[] + | Promise + | Promise + | ((env: IRspackConfigurationFnEnvironment) => TRspack.Configuration | TRspack.Configuration[]) + | ((env: IRspackConfigurationFnEnvironment) => Promise); +type IRspackConfigJs = IRspackConfigJsExport | { default: IRspackConfigJsExport }; + +/** + * @internal + */ +export interface ILoadRspackConfigurationOptions { + taskSession: IHeftTaskSession; + heftConfiguration: HeftConfiguration; + serveMode: boolean; + loadRspackAsyncFn: () => Promise; + hooks: Pick; + + _tryLoadConfigFileAsync?: typeof tryLoadRspackConfigurationFileAsync; +} + +const DEFAULT_RSPACK_CONFIG_PATH: './rspack.config.mjs' = './rspack.config.mjs'; +const DEFAULT_RSPACK_DEV_CONFIG_PATH: './rspack.dev.config.js' = './rspack.dev.config.js'; + +/** + * @internal + */ +export async function tryLoadRspackConfigurationAsync( + options: ILoadRspackConfigurationOptions, + pluginOptions: IRspackPluginOptions +): Promise { + const { taskSession, hooks, _tryLoadConfigFileAsync = tryLoadRspackConfigurationFileAsync } = options; + const { logger } = taskSession; + const { terminal } = logger; + + // Apply default behavior. Due to the state of `this._rspackConfiguration`, this code + // will execute exactly once. + hooks.onLoadConfiguration.tapPromise( + { + name: PLUGIN_NAME, + stage: STAGE_LOAD_LOCAL_CONFIG + }, + async () => { + terminal.writeVerboseLine(`Attempting to load Rspack configuration from local file`); + const rspackConfiguration: IRspackConfiguration | undefined = await _tryLoadConfigFileAsync( + options, + pluginOptions + ); + + if (rspackConfiguration) { + terminal.writeVerboseLine(`Loaded Rspack configuration from local file.`); + } + + return rspackConfiguration; + } + ); + + // Obtain the Rspack configuration by calling into the hook. + // The local configuration is loaded at STAGE_LOAD_LOCAL_CONFIG + terminal.writeVerboseLine('Attempting to load Rspack configuration'); + let rspackConfiguration: IRspackConfiguration | false | undefined = + await hooks.onLoadConfiguration.promise(); + + if (rspackConfiguration === false) { + terminal.writeLine('Rspack disabled by external plugin'); + rspackConfiguration = undefined; + } else if ( + rspackConfiguration === undefined || + (Array.isArray(rspackConfiguration) && rspackConfiguration.length === 0) + ) { + terminal.writeLine('No Rspack configuration found'); + rspackConfiguration = undefined; + } else { + if (hooks.onConfigure.isUsed()) { + // Allow for plugins to customize the configuration + await hooks.onConfigure.promise(rspackConfiguration); + } + if (hooks.onAfterConfigure.isUsed()) { + // Provide the finalized configuration + await hooks.onAfterConfigure.promise(rspackConfiguration); + } + } + return rspackConfiguration as IRspackConfiguration | undefined; +} + +/** + * @internal + */ +export async function tryLoadRspackConfigurationFileAsync( + options: ILoadRspackConfigurationOptions, + pluginOptions: IRspackPluginOptions +): Promise { + const { taskSession, heftConfiguration, loadRspackAsyncFn, serveMode } = options; + const { + logger, + parameters: { production } + } = taskSession; + const { terminal } = logger; + const { configurationPath, devConfigurationPath } = pluginOptions; + let rspackConfigJs: IRspackConfigJs | undefined; + + try { + const buildFolderPath: string = heftConfiguration.buildFolderPath; + if (serveMode) { + const devConfigPath: string = path.resolve( + buildFolderPath, + devConfigurationPath || DEFAULT_RSPACK_DEV_CONFIG_PATH + ); + terminal.writeVerboseLine(`Attempting to load rspack configuration from "${devConfigPath}".`); + rspackConfigJs = await _tryLoadRspackConfigurationFileInnerAsync(devConfigPath); + } + + if (!rspackConfigJs) { + const configPath: string = path.resolve( + buildFolderPath, + configurationPath || DEFAULT_RSPACK_CONFIG_PATH + ); + terminal.writeVerboseLine(`Attempting to load rspack configuration from "${configPath}".`); + rspackConfigJs = await _tryLoadRspackConfigurationFileInnerAsync(configPath); + } + } catch (error) { + logger.emitError(error as Error); + } + + if (rspackConfigJs) { + const rspackConfig: IRspackConfigJsExport = + (rspackConfigJs as { default: IRspackConfigJsExport }).default || + (rspackConfigJs as IRspackConfigJsExport); + + if (typeof rspackConfig === 'function') { + // Defer loading of rspack until we know for sure that we will need it + return rspackConfig({ + prod: production, + production, + taskSession, + heftConfiguration, + rspack: await loadRspackAsyncFn() + }); + } else { + return rspackConfig; + } + } else { + return undefined; + } +} + +/** + * @internal + */ +export async function _tryLoadRspackConfigurationFileInnerAsync( + configurationPath: string +): Promise { + const configExists: boolean = await FileSystem.existsAsync(configurationPath); + if (configExists) { + try { + const configurationUri: string = pathToFileURL(configurationPath).href; + return await import(configurationUri); + } catch (e) { + const error: NodeJS.ErrnoException = e as NodeJS.ErrnoException; + if (error.code === 'ERR_MODULE_NOT_FOUND') { + // No configuration found, return undefined. + return undefined; + } + throw new Error(`Error loading Rspack configuration at "${configurationPath}": ${e}`); + } + } else { + return undefined; + } +} diff --git a/heft-plugins/heft-rspack-plugin/src/RspackPlugin.ts b/heft-plugins/heft-rspack-plugin/src/RspackPlugin.ts new file mode 100644 index 00000000000..4349b82a2be --- /dev/null +++ b/heft-plugins/heft-rspack-plugin/src/RspackPlugin.ts @@ -0,0 +1,504 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import type { AddressInfo } from 'node:net'; + +import type * as TRspack from '@rspack/core'; +import type * as TRspackDevServer from '@rspack/dev-server'; +import { AsyncParallelHook, AsyncSeriesBailHook, AsyncSeriesHook, AsyncSeriesWaterfallHook } from 'tapable'; + +import { CertificateManager, type ICertificate } from '@rushstack/debug-certificate-manager'; +import { FileError, InternalError, LegacyAdapters } from '@rushstack/node-core-library'; +import type { + HeftConfiguration, + IHeftTaskSession, + IHeftTaskPlugin, + IHeftTaskRunHookOptions, + IScopedLogger, + IHeftTaskRunIncrementalHookOptions +} from '@rushstack/heft'; + +import { + type IRspackConfiguration, + type IRspackPluginAccessor, + PLUGIN_NAME, + type IRspackPluginAccessorHooks, + type RspackCoreImport +} from './shared'; +import { tryLoadRspackConfigurationAsync } from './RspackConfigurationLoader'; + +export interface IRspackPluginOptions { + devConfigurationPath?: string | undefined; + configurationPath?: string | undefined; +} +const SERVE_PARAMETER_LONG_NAME: '--serve' = '--serve'; +const RSPACK_PACKAGE_NAME: '@rspack/core' = '@rspack/core'; +const RSPACK_DEV_SERVER_PACKAGE_NAME: '@rspack/dev-server' = '@rspack/dev-server'; +const RSPACK_DEV_SERVER_ENV_VAR_NAME: 'RSPACK_DEV_SERVER' = 'RSPACK_DEV_SERVER'; +const WEBPACK_DEV_MIDDLEWARE_PACKAGE_NAME: 'webpack-dev-middleware' = 'webpack-dev-middleware'; + +/** + * @internal + */ +export default class RspackPlugin implements IHeftTaskPlugin { + private _accessor: IRspackPluginAccessor | undefined; + private _isServeMode: boolean = false; + private _rspack: RspackCoreImport | undefined; + private _rspackCompiler: TRspack.Compiler | TRspack.MultiCompiler | undefined; + private _rspackConfiguration: IRspackConfiguration | undefined | false = false; + private _rspackCompilationDonePromise: Promise | undefined; + private _rspackCompilationDonePromiseResolveFn: (() => void) | undefined; + + private _warnings: Error[] = []; + private _errors: Error[] = []; + + public get accessor(): IRspackPluginAccessor { + if (!this._accessor) { + this._accessor = { + hooks: _createAccessorHooks(), + parameters: { + isServeMode: this._isServeMode + } + }; + } + return this._accessor; + } + + public apply( + taskSession: IHeftTaskSession, + heftConfiguration: HeftConfiguration, + options: IRspackPluginOptions = {} + ): void { + this._isServeMode = taskSession.parameters.getFlagParameter(SERVE_PARAMETER_LONG_NAME).value; + if (this._isServeMode && !taskSession.parameters.watch) { + throw new Error( + `The ${JSON.stringify( + SERVE_PARAMETER_LONG_NAME + )} parameter is only available when running in watch mode.` + + ` Try replacing "${taskSession.parsedCommandLine?.unaliasedCommandName}" with` + + ` "${taskSession.parsedCommandLine?.unaliasedCommandName}-watch" in your Heft command line.` + ); + } + + taskSession.hooks.run.tapPromise(PLUGIN_NAME, async (runOptions: IHeftTaskRunHookOptions) => { + await this._runRspackAsync(taskSession, heftConfiguration, options); + }); + + taskSession.hooks.runIncremental.tapPromise( + PLUGIN_NAME, + async (runOptions: IHeftTaskRunIncrementalHookOptions) => { + await this._runRspackWatchAsync(taskSession, heftConfiguration, options, runOptions.requestRun); + } + ); + } + + private async _getRspackConfigurationAsync( + taskSession: IHeftTaskSession, + heftConfiguration: HeftConfiguration, + options: IRspackPluginOptions, + requestRun?: () => void + ): Promise { + if (this._rspackConfiguration === false) { + const rspackConfiguration: IRspackConfiguration | undefined = await tryLoadRspackConfigurationAsync( + { + taskSession, + heftConfiguration, + hooks: this.accessor.hooks, + serveMode: this._isServeMode, + loadRspackAsyncFn: this._loadRspackAsync.bind(this, taskSession, heftConfiguration) + }, + options + ); + + this._rspackConfiguration = rspackConfiguration; + } + + return this._rspackConfiguration; + } + + private async _loadRspackAsync( + taskSession: IHeftTaskSession, + heftConfiguration: HeftConfiguration + ): Promise { + if (!this._rspack) { + try { + const rspackPackagePath: string = await heftConfiguration.rigPackageResolver.resolvePackageAsync( + RSPACK_PACKAGE_NAME, + taskSession.logger.terminal + ); + this._rspack = await import(rspackPackagePath); + taskSession.logger.terminal.writeDebugLine(`Using Rspack from rig package at "${rspackPackagePath}"`); + } catch (e) { + // Fallback to bundled version if not found in rig. + this._rspack = await import(RSPACK_PACKAGE_NAME); + taskSession.logger.terminal.writeDebugLine(`Using Rspack from built-in "${RSPACK_PACKAGE_NAME}"`); + } + } + return this._rspack!; + } + + private async _getRspackCompilerAsync( + taskSession: IHeftTaskSession, + heftConfiguration: HeftConfiguration, + rspackConfiguration: IRspackConfiguration + ): Promise { + if (!this._rspackCompiler) { + const rspack: RspackCoreImport = await this._loadRspackAsync(taskSession, heftConfiguration); + taskSession.logger.terminal.writeLine(`Using Rspack version ${rspack.version}`); + this._rspackCompiler = Array.isArray(rspackConfiguration) + ? rspack.default(rspackConfiguration) /* (rspack.Compilation[]) => MultiCompiler */ + : rspack.default(rspackConfiguration); /* (rspack.Compilation) => Compiler */ + } + return this._rspackCompiler; + } + + private async _runRspackAsync( + taskSession: IHeftTaskSession, + heftConfiguration: HeftConfiguration, + options: IRspackPluginOptions + ): Promise { + this._validateEnvironmentVariable(taskSession); + if (taskSession.parameters.watch || this._isServeMode) { + // Should never happen, but just in case + throw new InternalError('Cannot run Rspack in compilation mode when watch mode is enabled'); + } + + // Load the config and compiler, and return if there is no config found + const rspackConfiguration: IRspackConfiguration | undefined = await this._getRspackConfigurationAsync( + taskSession, + heftConfiguration, + options + ); + if (!rspackConfiguration) { + return; + } + const compiler: TRspack.Compiler | TRspack.MultiCompiler = await this._getRspackCompilerAsync( + taskSession, + heftConfiguration, + rspackConfiguration + ); + taskSession.logger.terminal.writeLine('Running Rspack compilation'); + + // Run the rspack compiler + let stats: TRspack.Stats | TRspack.MultiStats | undefined; + try { + stats = await LegacyAdapters.convertCallbackToPromise( + (compiler as TRspack.Compiler).run.bind(compiler) + ); + await LegacyAdapters.convertCallbackToPromise(compiler.close.bind(compiler)); + } catch (e) { + taskSession.logger.emitError(e as Error); + } + + // Emit the errors from the stats object, if present + if (stats) { + this._recordErrors(stats, heftConfiguration.buildFolderPath); + this._emitErrors(taskSession.logger); + if (this.accessor.hooks.onEmitStats.isUsed()) { + await this.accessor.hooks.onEmitStats.promise(stats); + } + } + } + + private async _runRspackWatchAsync( + taskSession: IHeftTaskSession, + heftConfiguration: HeftConfiguration, + options: IRspackPluginOptions, + requestRun: () => void + ): Promise { + // Save a handle to the original promise, since the this-scoped promise will be replaced whenever + // the compilation completes. + let rspackCompilationDonePromise: Promise | undefined = this._rspackCompilationDonePromise; + + if (!this._rspackCompiler) { + this._validateEnvironmentVariable(taskSession); + if (!taskSession.parameters.watch) { + // Should never happen, but just in case + throw new InternalError('Cannot run Rspack in watch mode when watch mode is not enabled'); + } + + // Load the config and compiler, and return if there is no config found + const rspackConfiguration: IRspackConfiguration | undefined = await this._getRspackConfigurationAsync( + taskSession, + heftConfiguration, + options, + requestRun + ); + if (!rspackConfiguration) { + return; + } + + // Get the compiler which will be used for both serve and watch mode + const compiler: TRspack.Compiler | TRspack.MultiCompiler = await this._getRspackCompilerAsync( + taskSession, + heftConfiguration, + rspackConfiguration + ); + + // Set up the hook to detect when the watcher completes the watcher compilation. We will also log out + // errors from the compilation if present from the output stats object. + this._rspackCompilationDonePromise = new Promise((resolve: () => void) => { + this._rspackCompilationDonePromiseResolveFn = resolve; + }); + rspackCompilationDonePromise = this._rspackCompilationDonePromise; + compiler.hooks.done.tap(PLUGIN_NAME, (stats?: TRspack.Stats | TRspack.MultiStats) => { + this._rspackCompilationDonePromiseResolveFn!(); + this._rspackCompilationDonePromise = new Promise((resolve: () => void) => { + this._rspackCompilationDonePromiseResolveFn = resolve; + }); + + if (stats) { + this._recordErrors(stats, heftConfiguration.buildFolderPath); + } + }); + + // Determine how we will run the compiler. When serving, we will run the compiler + // via the @rspack/dev-server. Otherwise, we will run the compiler directly. + if (this._isServeMode) { + const defaultDevServerOptions: TRspackDevServer.Configuration = { + host: 'localhost', + devMiddleware: { + publicPath: '/', + stats: { + cached: false, + cachedAssets: false, + colors: heftConfiguration.terminalProvider.supportsColor + } + }, + client: { + logging: 'info', + webSocketURL: { + port: 8080 + } + }, + watchFiles: [], + static: [], + port: 8080, + onListening: (server: TRspackDevServer.RspackDevServer) => { + const addressInfo: AddressInfo | string | undefined = server.server?.address() as AddressInfo; + if (addressInfo) { + let url: string; + if (typeof addressInfo === 'string') { + url = addressInfo; + } else { + const address: string = + addressInfo.family === 'IPv6' + ? `[${addressInfo.address}]:${addressInfo.port}` + : `${addressInfo.address}:${addressInfo.port}`; + url = `https://${address}/`; + } + taskSession.logger.terminal.writeLine(`Started Rspack Dev Server at ${url}`); + } + } + }; + + // Obtain the devServerOptions from the rspack configuration, and combine with the default options + let devServerOptions: TRspackDevServer.Configuration; + if (Array.isArray(rspackConfiguration)) { + const filteredDevServerOptions: TRspackDevServer.Configuration[] = rspackConfiguration + .map((configuration) => configuration.devServer) + .filter((devServer): devServer is TRspackDevServer.Configuration => !!devServer); + if (filteredDevServerOptions.length > 1) { + taskSession.logger.emitWarning( + new Error(`Detected multiple rspack devServer configurations, using the first one.`) + ); + } + devServerOptions = { ...defaultDevServerOptions, ...filteredDevServerOptions[0] }; + } else { + devServerOptions = { ...defaultDevServerOptions, ...rspackConfiguration.devServer }; + } + + // Add the certificate and key to the devServerOptions if these fields don't already have values + if (!devServerOptions.server) { + const certificateManager: CertificateManager = new CertificateManager(); + const certificate: ICertificate = await certificateManager.ensureCertificateAsync( + true, + taskSession.logger.terminal + ); + + // Update the web socket URL to use the hostname provided by the certificate + const clientConfiguration: TRspackDevServer.Configuration['client'] = devServerOptions.client; + const hostname: string | undefined = certificate.subjectAltNames?.[0]; + if (hostname && typeof clientConfiguration === 'object') { + const { webSocketURL } = clientConfiguration; + if (typeof webSocketURL === 'object') { + clientConfiguration.webSocketURL = { + ...webSocketURL, + hostname + }; + } + } + + devServerOptions = { + ...devServerOptions, + server: { + type: 'https', + options: { + minVersion: 'TLSv1.3', + key: certificate.pemKey, + cert: certificate.pemCertificate, + ca: certificate.pemCaCertificate + } + } + }; + } + + // Since the webpack-dev-server does not return infrastructure errors via a callback like + // compiler.watch(...), we will need to intercept them and log them ourselves. + // note: @rspack/dev-server extends webpack-dev-server and also has this behavior + compiler.hooks.infrastructureLog.tap( + PLUGIN_NAME, + (name: string, type: string, args: unknown[] | undefined) => { + if (name === WEBPACK_DEV_MIDDLEWARE_PACKAGE_NAME && type === 'error') { + const error: Error | undefined = args?.[0] as Error | undefined; + if (error) { + taskSession.logger.emitError(error); + } + } + } + ); + + // The webpack-dev-server package has a design flaw, where merely loading its package will set the + // WEBPACK_DEV_SERVER environment variable -- even if no APIs are accessed. This environment variable + // causes incorrect behavior if Heft is not running in serve mode. Thus, we need to be careful to call + // require() only if Heft is in serve mode. + // note: @rspack/dev-server extends webpack-dev-server and also has this behavior + taskSession.logger.terminal.writeLine('Starting rspack-dev-server'); + const RspackDevServer: typeof TRspackDevServer.RspackDevServer = ( + await import(RSPACK_DEV_SERVER_PACKAGE_NAME) + ).RspackDevServer; + const rspackDevServer: TRspackDevServer.RspackDevServer = new RspackDevServer( + devServerOptions, + compiler + ); + await rspackDevServer.start(); + } else { + // Create the watcher. Compilation will start immediately after invoking watch(). + taskSession.logger.terminal.writeLine('Starting Rspack watcher'); + + const { onGetWatchOptions } = this.accessor.hooks; + + const watchOptions: + | Parameters[0] + | Parameters[0] = onGetWatchOptions.isUsed() + ? await onGetWatchOptions.promise({}, rspackConfiguration) + : {}; + + (compiler as TRspack.Compiler).watch(watchOptions, (error?: Error | null) => { + if (error) { + taskSession.logger.emitError(error); + } + }); + } + } + + // Resume the compilation, wait for the compilation to complete, then suspend the watchers until the + // next iteration. Even if there are no changes, the promise should resolve since resuming from a + // suspended state invalidates the state of the watcher. + await rspackCompilationDonePromise; + + this._emitErrors(taskSession.logger); + } + + private _validateEnvironmentVariable(taskSession: IHeftTaskSession): void { + if (!this._isServeMode && process.env[RSPACK_DEV_SERVER_ENV_VAR_NAME]) { + taskSession.logger.emitWarning( + new Error( + `The "${RSPACK_DEV_SERVER_ENV_VAR_NAME}" environment variable is set, ` + + 'which will cause problems when rspack is not running in serve mode. ' + + `(Did a dependency inadvertently load the "${RSPACK_DEV_SERVER_PACKAGE_NAME}" package?)` + ) + ); + } + } + + private _emitErrors(logger: IScopedLogger): void { + for (const warning of this._warnings) { + logger.emitWarning(warning); + } + for (const error of this._errors) { + logger.emitError(error); + } + } + + private _recordErrors(stats: TRspack.Stats | TRspack.MultiStats, buildFolderPath: string): void { + const errors: Error[] = this._errors; + const warnings: Error[] = this._warnings; + + errors.length = 0; + warnings.length = 0; + + if (stats.hasErrors() || stats.hasWarnings()) { + const serializedStats: TRspack.StatsCompilation[] = [stats.toJson('errors-warnings')]; + + for (const compilationStats of serializedStats) { + if (compilationStats.warnings) { + for (const warning of compilationStats.warnings) { + warnings.push(this._normalizeError(buildFolderPath, warning)); + } + } + + if (compilationStats.errors) { + for (const error of compilationStats.errors) { + errors.push(this._normalizeError(buildFolderPath, error)); + } + } + + if (compilationStats.children) { + for (const child of compilationStats.children) { + serializedStats.push(child); + } + } + } + } + } + + private _normalizeError(buildFolderPath: string, error: TRspack.StatsError): Error { + if (error instanceof Error) { + return error; + } else if (error.moduleIdentifier) { + let lineNumber: number | undefined; + let columnNumber: number | undefined; + if (error.loc) { + // Format of ":-" + // https://webpack.js.org/api/stats/#errors-and-warnings + const [lineNumberRaw, columnRangeRaw] = error.loc.split(':'); + const [startColumnRaw] = columnRangeRaw.split('-'); + if (lineNumberRaw) { + lineNumber = parseInt(lineNumberRaw, 10); + if (Number.isNaN(lineNumber)) { + lineNumber = undefined; + } + } + if (startColumnRaw) { + columnNumber = parseInt(startColumnRaw, 10); + if (Number.isNaN(columnNumber)) { + columnNumber = undefined; + } + } + } + + return new FileError(error.message, { + absolutePath: error.moduleIdentifier, + projectFolder: buildFolderPath, + line: lineNumber, + column: columnNumber + }); + } else { + return new Error(error.message); + } + } +} + +/** + * @internal + */ +export function _createAccessorHooks(): IRspackPluginAccessorHooks { + return { + onLoadConfiguration: new AsyncSeriesBailHook(), + onConfigure: new AsyncSeriesHook(['rspackConfiguration']), + onAfterConfigure: new AsyncParallelHook(['rspackConfiguration']), + onEmitStats: new AsyncParallelHook(['rspackStats']), + onGetWatchOptions: new AsyncSeriesWaterfallHook(['watchOptions', 'rspackConfiguration']) + }; +} diff --git a/heft-plugins/heft-rspack-plugin/src/index.ts b/heft-plugins/heft-rspack-plugin/src/index.ts new file mode 100644 index 00000000000..0246643b10d --- /dev/null +++ b/heft-plugins/heft-rspack-plugin/src/index.ts @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +/** + * HeftRspackPlugin is a Heft plugin that integrates the Rspack bundler into the Heft build process. + * + * @packageDocumentation + */ + +export { PLUGIN_NAME as PluginName, STAGE_LOAD_LOCAL_CONFIG } from './shared'; + +export type { + IRspackConfigurationWithDevServer, + IRspackConfiguration, + IRspackConfigurationFnEnvironment, + IRspackPluginAccessor, + IRspackPluginAccessorHooks, + IRspackPluginAccessorParameters, + RspackCoreImport +} from './shared'; diff --git a/heft-plugins/heft-rspack-plugin/src/schemas/heft-rspack-plugin.schema.json b/heft-plugins/heft-rspack-plugin/src/schemas/heft-rspack-plugin.schema.json new file mode 100644 index 00000000000..3a488443547 --- /dev/null +++ b/heft-plugins/heft-rspack-plugin/src/schemas/heft-rspack-plugin.schema.json @@ -0,0 +1,25 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Rspack Plugin Configuration", + "description": "Defines options for Rspack plugin execution.", + "type": "object", + + "additionalProperties": false, + + "properties": { + "$schema": { + "description": "Part of the JSON Schema standard, this optional keyword declares the URL of the schema that the file conforms to. Editors may download the schema and use it to perform syntax highlighting.", + "type": "string" + }, + + "devConfigurationPath": { + "description": "Specifies a relative path to the Rspack dev configuration, which is used in \"serve\" mode. The default value is \"./rspack.dev.config.js\".", + "type": "string" + }, + + "configurationPath": { + "description": "Specifies a relative path to the Rspack configuration. The default value is \"./rspack.config.js\".", + "type": "string" + } + } +} diff --git a/heft-plugins/heft-rspack-plugin/src/shared.ts b/heft-plugins/heft-rspack-plugin/src/shared.ts new file mode 100644 index 00000000000..dde089b2141 --- /dev/null +++ b/heft-plugins/heft-rspack-plugin/src/shared.ts @@ -0,0 +1,139 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import type * as TRspack from '@rspack/core'; +import type * as TRspackDevServer from '@rspack/dev-server'; +import type { + AsyncParallelHook, + AsyncSeriesBailHook, + AsyncSeriesHook, + AsyncSeriesWaterfallHook +} from 'tapable'; + +import type { HeftConfiguration, IHeftTaskSession } from '@rushstack/heft'; + +/** + * @beta + */ +export type RspackCoreImport = typeof import('@rspack/core'); + +/** + * The environment passed into the Rspack configuration function. Loosely based + * on the default Rspack environment options, specified here: + * https://rspack.rs/plugins/webpack/environment-plugin#options + * + * @beta + */ +export interface IRspackConfigurationFnEnvironment { + /** + * Whether or not the run is in production mode. Synonym of + * {@link IRspackConfigurationFnEnvironment.production}. + */ + prod: boolean; + /** + * Whether or not the run is in production mode. Synonym of + * {@link IRspackConfigurationFnEnvironment.prod}. + */ + production: boolean; + + // Non-standard environment options + /** + * The task session provided to the plugin. + */ + taskSession: IHeftTaskSession; + /** + * The Heft configuration provided to the plugin. + */ + heftConfiguration: HeftConfiguration; + /** + * The resolved Rspack package. + */ + rspack: RspackCoreImport; +} + +/** + * @beta + */ +export interface IRspackConfigurationWithDevServer extends TRspack.Configuration { + devServer?: TRspackDevServer.Configuration; +} + +/** + * @beta + */ +export type IRspackConfiguration = TRspack.Configuration | TRspack.Configuration[]; + +/** + * @beta + */ +export interface IRspackPluginAccessorHooks { + /** + * A hook that allows for loading custom configurations used by the Rspack + * plugin. If a tap returns a value other than `undefined` before stage {@link STAGE_LOAD_LOCAL_CONFIG}, + * it will suppress loading from the Rspack config file. To provide a fallback behavior in the + * absence of a local config file, tap this hook with a `stage` value greater than {@link STAGE_LOAD_LOCAL_CONFIG}. + * + * @remarks + * Tapable event handlers can return `false` instead of `undefined` to suppress + * other handlers from creating a configuration object, and prevent Rspack from running. + */ + readonly onLoadConfiguration: AsyncSeriesBailHook<[], IRspackConfiguration | undefined | false>; + /** + * A hook that allows for modification of the loaded configuration used by the Rspack + * plugin. If no configuration was loaded, this hook will not be called. + */ + readonly onConfigure: AsyncSeriesHook<[IRspackConfiguration], never>; + /** + * A hook that provides the finalized configuration that will be used by Rspack. + * If no configuration was loaded, this hook will not be called. + */ + readonly onAfterConfigure: AsyncParallelHook<[IRspackConfiguration], never>; + /** + * A hook that provides the stats output from Rspack. If no configuration is loaded, + * this hook will not be called. + */ + readonly onEmitStats: AsyncParallelHook<[TRspack.Stats | TRspack.MultiStats], never>; + /** + * A hook that allows for customization of the file watcher options. If not running in watch mode, this hook will not be called. + */ + readonly onGetWatchOptions: AsyncSeriesWaterfallHook< + [Parameters[0], Readonly], + never + >; +} + +/** + * @beta + */ +export interface IRspackPluginAccessorParameters { + /** + * Whether or not serve mode was enabled by passing the `--serve` flag. + */ + readonly isServeMode: boolean; +} + +/** + * @beta + */ +export interface IRspackPluginAccessor { + /** + * Hooks that are called at various points in the Rspack plugin lifecycle. + */ + readonly hooks: IRspackPluginAccessorHooks; + /** + * Parameters that are provided by the Rspack plugin. + */ + readonly parameters: IRspackPluginAccessorParameters; +} + +/** + * The stage in the `onLoadConfiguration` hook at which the config will be loaded from the local + * rspack config file. + * @beta + */ +export const STAGE_LOAD_LOCAL_CONFIG: 1000 = 1000; + +/** + * @beta + */ +export const PLUGIN_NAME: 'rspack-plugin' = 'rspack-plugin'; diff --git a/heft-plugins/heft-rspack-plugin/tsconfig.json b/heft-plugins/heft-rspack-plugin/tsconfig.json new file mode 100644 index 00000000000..b3ad1222789 --- /dev/null +++ b/heft-plugins/heft-rspack-plugin/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "./node_modules/local-node-rig/profiles/default/tsconfig-base.json", + "compilerOptions": { + "lib": ["DOM"], + "module": "nodenext", + "moduleResolution": "nodenext" + } +} diff --git a/heft-plugins/heft-sass-load-themed-styles-plugin/CHANGELOG.json b/heft-plugins/heft-sass-load-themed-styles-plugin/CHANGELOG.json index 12e387ddd74..d0a1820b71e 100644 --- a/heft-plugins/heft-sass-load-themed-styles-plugin/CHANGELOG.json +++ b/heft-plugins/heft-sass-load-themed-styles-plugin/CHANGELOG.json @@ -1,6 +1,90 @@ { "name": "@rushstack/heft-sass-load-themed-styles-plugin", "entries": [ + { + "version": "1.1.5", + "tag": "@rushstack/heft-sass-load-themed-styles-plugin_v1.1.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" to `2.1.20`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-sass-plugin\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.4` to `1.1.5`" + } + ] + } + }, + { + "version": "1.1.4", + "tag": "@rushstack/heft-sass-load-themed-styles-plugin_v1.1.4", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" to `2.1.19`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-sass-plugin\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.3` to `1.1.4`" + } + ] + } + }, + { + "version": "1.1.3", + "tag": "@rushstack/heft-sass-load-themed-styles-plugin_v1.1.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" to `2.1.18`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-sass-plugin\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "1.1.2", + "tag": "@rushstack/heft-sass-load-themed-styles-plugin_v1.1.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" to `2.1.17`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-sass-plugin\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.1` to `1.1.2`" + } + ] + } + }, { "version": "1.1.1", "tag": "@rushstack/heft-sass-load-themed-styles-plugin_v1.1.1", diff --git a/heft-plugins/heft-sass-load-themed-styles-plugin/CHANGELOG.md b/heft-plugins/heft-sass-load-themed-styles-plugin/CHANGELOG.md index 09eb335c312..df165f311f5 100644 --- a/heft-plugins/heft-sass-load-themed-styles-plugin/CHANGELOG.md +++ b/heft-plugins/heft-sass-load-themed-styles-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/heft-sass-load-themed-styles-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.1.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.1.4 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 1.1.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.1.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 1.1.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/heft-plugins/heft-sass-load-themed-styles-plugin/package.json b/heft-plugins/heft-sass-load-themed-styles-plugin/package.json index d77cfc981e4..20bb0500d38 100644 --- a/heft-plugins/heft-sass-load-themed-styles-plugin/package.json +++ b/heft-plugins/heft-sass-load-themed-styles-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-sass-load-themed-styles-plugin", - "version": "1.1.1", + "version": "1.1.5", "description": "Heft plugin that connects to heft-sass-plugin and replaces load-themed-styles theme expressions with standard CSS variables", "repository": { "type": "git", @@ -16,7 +16,7 @@ "_phase:test": "heft run --only test -- --clean" }, "peerDependencies": { - "@rushstack/heft": "^1.1.1" + "@rushstack/heft": "^1.1.5" }, "dependencies": { "@microsoft/load-themed-styles": "workspace:*" diff --git a/heft-plugins/heft-sass-plugin/CHANGELOG.json b/heft-plugins/heft-sass-plugin/CHANGELOG.json index f6c965367e9..758ebe9a8f6 100644 --- a/heft-plugins/heft-sass-plugin/CHANGELOG.json +++ b/heft-plugins/heft-sass-plugin/CHANGELOG.json @@ -1,6 +1,84 @@ { "name": "@rushstack/heft-sass-plugin", "entries": [ + { + "version": "1.1.5", + "tag": "@rushstack/heft-sass-plugin_v1.1.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.55.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.4` to `1.1.5`" + } + ] + } + }, + { + "version": "1.1.4", + "tag": "@rushstack/heft-sass-plugin_v1.1.4", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.54.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.3` to `1.1.4`" + } + ] + } + }, + { + "version": "1.1.3", + "tag": "@rushstack/heft-sass-plugin_v1.1.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.53.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "1.1.2", + "tag": "@rushstack/heft-sass-plugin_v1.1.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.53.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.1` to `1.1.2`" + } + ] + } + }, { "version": "1.1.1", "tag": "@rushstack/heft-sass-plugin_v1.1.1", diff --git a/heft-plugins/heft-sass-plugin/CHANGELOG.md b/heft-plugins/heft-sass-plugin/CHANGELOG.md index fe29f3fd1b3..7a1f130263a 100644 --- a/heft-plugins/heft-sass-plugin/CHANGELOG.md +++ b/heft-plugins/heft-sass-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/heft-sass-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.1.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.1.4 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 1.1.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.1.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 1.1.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/heft-plugins/heft-sass-plugin/config/heft.json b/heft-plugins/heft-sass-plugin/config/heft.json new file mode 100644 index 00000000000..0e52387039a --- /dev/null +++ b/heft-plugins/heft-sass-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + "extends": "local-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/heft/v1"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/heft-plugins/heft-sass-plugin/package.json b/heft-plugins/heft-sass-plugin/package.json index 1cedcc24a96..97b55efe87b 100644 --- a/heft-plugins/heft-sass-plugin/package.json +++ b/heft-plugins/heft-sass-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-sass-plugin", - "version": "1.1.1", + "version": "1.1.5", "description": "Heft plugin for SASS", "repository": { "type": "git", @@ -18,7 +18,7 @@ "main": "lib/index.js", "types": "lib/index.d.ts", "peerDependencies": { - "@rushstack/heft": "^1.1.1" + "@rushstack/heft": "^1.1.5" }, "dependencies": { "@rushstack/node-core-library": "workspace:*", diff --git a/heft-plugins/heft-serverless-stack-plugin/CHANGELOG.json b/heft-plugins/heft-serverless-stack-plugin/CHANGELOG.json index f5f59eb8f92..1311ea5fee6 100644 --- a/heft-plugins/heft-serverless-stack-plugin/CHANGELOG.json +++ b/heft-plugins/heft-serverless-stack-plugin/CHANGELOG.json @@ -1,6 +1,108 @@ { "name": "@rushstack/heft-serverless-stack-plugin", "entries": [ + { + "version": "1.1.6", + "tag": "@rushstack/heft-serverless-stack-plugin_v1.1.6", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack4-plugin\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.4` to `1.1.5`" + } + ] + } + }, + { + "version": "1.1.5", + "tag": "@rushstack/heft-serverless-stack-plugin_v1.1.5", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack4-plugin\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.3` to `1.1.4`" + } + ] + } + }, + { + "version": "1.1.4", + "tag": "@rushstack/heft-serverless-stack-plugin_v1.1.4", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack4-plugin\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "1.1.3", + "tag": "@rushstack/heft-serverless-stack-plugin_v1.1.3", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack4-plugin\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.1` to `1.1.2`" + } + ] + } + }, + { + "version": "1.1.2", + "tag": "@rushstack/heft-serverless-stack-plugin_v1.1.2", + "date": "Fri, 17 Oct 2025 23:22:33 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.1`" + } + ] + } + }, { "version": "1.1.1", "tag": "@rushstack/heft-serverless-stack-plugin_v1.1.1", diff --git a/heft-plugins/heft-serverless-stack-plugin/CHANGELOG.md b/heft-plugins/heft-serverless-stack-plugin/CHANGELOG.md index c340996d5ab..62ea584a989 100644 --- a/heft-plugins/heft-serverless-stack-plugin/CHANGELOG.md +++ b/heft-plugins/heft-serverless-stack-plugin/CHANGELOG.md @@ -1,6 +1,31 @@ # Change Log - @rushstack/heft-serverless-stack-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:28 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.1.6 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.1.5 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 1.1.4 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.1.3 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ + +## 1.1.2 +Fri, 17 Oct 2025 23:22:33 GMT + +_Version update only_ ## 1.1.1 Wed, 08 Oct 2025 00:13:28 GMT diff --git a/heft-plugins/heft-serverless-stack-plugin/package.json b/heft-plugins/heft-serverless-stack-plugin/package.json index ae14fceb505..e1d9bbb743e 100644 --- a/heft-plugins/heft-serverless-stack-plugin/package.json +++ b/heft-plugins/heft-serverless-stack-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-serverless-stack-plugin", - "version": "1.1.1", + "version": "1.1.6", "description": "Heft plugin for building apps using the Serverless Stack (SST) framework", "repository": { "type": "git", @@ -15,7 +15,7 @@ "_phase:test": "heft run --only test -- --clean" }, "peerDependencies": { - "@rushstack/heft": "^1.1.1" + "@rushstack/heft": "^1.1.5" }, "dependencies": { "@rushstack/node-core-library": "workspace:*" diff --git a/heft-plugins/heft-storybook-plugin/CHANGELOG.json b/heft-plugins/heft-storybook-plugin/CHANGELOG.json index 56898539595..9eb9b19b1fb 100644 --- a/heft-plugins/heft-storybook-plugin/CHANGELOG.json +++ b/heft-plugins/heft-storybook-plugin/CHANGELOG.json @@ -1,6 +1,114 @@ { "name": "@rushstack/heft-storybook-plugin", "entries": [ + { + "version": "1.1.6", + "tag": "@rushstack/heft-storybook-plugin_v1.1.6", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack4-plugin\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.4` to `1.1.5`" + } + ] + } + }, + { + "version": "1.1.5", + "tag": "@rushstack/heft-storybook-plugin_v1.1.5", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack4-plugin\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.3` to `1.1.4`" + } + ] + } + }, + { + "version": "1.1.4", + "tag": "@rushstack/heft-storybook-plugin_v1.1.4", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack4-plugin\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "1.1.3", + "tag": "@rushstack/heft-storybook-plugin_v1.1.3", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack4-plugin\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.1` to `1.1.2`" + } + ] + } + }, + { + "version": "1.1.2", + "tag": "@rushstack/heft-storybook-plugin_v1.1.2", + "date": "Fri, 17 Oct 2025 23:22:33 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.1`" + } + ] + } + }, { "version": "1.1.1", "tag": "@rushstack/heft-storybook-plugin_v1.1.1", diff --git a/heft-plugins/heft-storybook-plugin/CHANGELOG.md b/heft-plugins/heft-storybook-plugin/CHANGELOG.md index 349b571da2d..6ec22395f8c 100644 --- a/heft-plugins/heft-storybook-plugin/CHANGELOG.md +++ b/heft-plugins/heft-storybook-plugin/CHANGELOG.md @@ -1,6 +1,31 @@ # Change Log - @rushstack/heft-storybook-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:28 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.1.6 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.1.5 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 1.1.4 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.1.3 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ + +## 1.1.2 +Fri, 17 Oct 2025 23:22:33 GMT + +_Version update only_ ## 1.1.1 Wed, 08 Oct 2025 00:13:28 GMT diff --git a/heft-plugins/heft-storybook-plugin/config/heft.json b/heft-plugins/heft-storybook-plugin/config/heft.json new file mode 100644 index 00000000000..0e52387039a --- /dev/null +++ b/heft-plugins/heft-storybook-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + "extends": "local-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/heft/v1"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/heft-plugins/heft-storybook-plugin/package.json b/heft-plugins/heft-storybook-plugin/package.json index d29520f4fb3..193016acf90 100644 --- a/heft-plugins/heft-storybook-plugin/package.json +++ b/heft-plugins/heft-storybook-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-storybook-plugin", - "version": "1.1.1", + "version": "1.1.6", "description": "Heft plugin for supporting UI development using Storybook", "repository": { "type": "git", @@ -16,7 +16,7 @@ "_phase:test": "heft run --only test -- --clean" }, "peerDependencies": { - "@rushstack/heft": "^1.1.1" + "@rushstack/heft": "^1.1.5" }, "dependencies": { "@rushstack/node-core-library": "workspace:*", diff --git a/heft-plugins/heft-typescript-plugin/CHANGELOG.json b/heft-plugins/heft-typescript-plugin/CHANGELOG.json index 0a5f325cf0c..517b2cf9659 100644 --- a/heft-plugins/heft-typescript-plugin/CHANGELOG.json +++ b/heft-plugins/heft-typescript-plugin/CHANGELOG.json @@ -1,6 +1,89 @@ { "name": "@rushstack/heft-typescript-plugin", "entries": [ + { + "version": "1.1.5", + "tag": "@rushstack/heft-typescript-plugin_v1.1.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "patch": [ + { + "comment": "Support \"${configDir}\" token in tsconfig when using file copier." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `1.1.4` to `1.1.5`" + } + ] + } + }, + { + "version": "1.1.4", + "tag": "@rushstack/heft-typescript-plugin_v1.1.4", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `1.1.3` to `1.1.4`" + } + ] + } + }, + { + "version": "1.1.3", + "tag": "@rushstack/heft-typescript-plugin_v1.1.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-config-file\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "1.1.2", + "tag": "@rushstack/heft-typescript-plugin_v1.1.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-config-file\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `1.1.1` to `1.1.2`" + } + ] + } + }, { "version": "1.1.1", "tag": "@rushstack/heft-typescript-plugin_v1.1.1", diff --git a/heft-plugins/heft-typescript-plugin/CHANGELOG.md b/heft-plugins/heft-typescript-plugin/CHANGELOG.md index fa73fdf9e72..3c919207bb0 100644 --- a/heft-plugins/heft-typescript-plugin/CHANGELOG.md +++ b/heft-plugins/heft-typescript-plugin/CHANGELOG.md @@ -1,6 +1,28 @@ # Change Log - @rushstack/heft-typescript-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.1.5 +Wed, 12 Nov 2025 01:12:56 GMT + +### Patches + +- Support "${configDir}" token in tsconfig when using file copier. + +## 1.1.4 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 1.1.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.1.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 1.1.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/heft-plugins/heft-typescript-plugin/config/heft.json b/heft-plugins/heft-typescript-plugin/config/heft.json new file mode 100644 index 00000000000..8d1359f022f --- /dev/null +++ b/heft-plugins/heft-typescript-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + "extends": "decoupled-local-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/heft/v1"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/heft-plugins/heft-typescript-plugin/package.json b/heft-plugins/heft-typescript-plugin/package.json index c92714a647a..6929f5c31df 100644 --- a/heft-plugins/heft-typescript-plugin/package.json +++ b/heft-plugins/heft-typescript-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-typescript-plugin", - "version": "1.1.1", + "version": "1.1.5", "description": "Heft plugin for TypeScript", "repository": { "type": "git", @@ -17,7 +17,7 @@ "_phase:build": "heft run --only build -- --clean" }, "peerDependencies": { - "@rushstack/heft": "1.1.1" + "@rushstack/heft": "1.1.5" }, "dependencies": { "@rushstack/node-core-library": "workspace:*", diff --git a/heft-plugins/heft-typescript-plugin/src/TypeScriptPlugin.ts b/heft-plugins/heft-typescript-plugin/src/TypeScriptPlugin.ts index d0e40e5edb9..cd47dfc1b89 100644 --- a/heft-plugins/heft-typescript-plugin/src/TypeScriptPlugin.ts +++ b/heft-plugins/heft-typescript-plugin/src/TypeScriptPlugin.ts @@ -32,6 +32,12 @@ import { getTsconfigFilePath } from './tsconfigLoader'; */ export const PLUGIN_NAME: 'typescript-plugin' = 'typescript-plugin'; +/** + * The ${configDir} token supported in TypeScript 5.5 + * @see {@link https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-5.html#the-configdir-template-variable-for-configuration-files} + */ +const CONFIG_DIR_TOKEN: '${configDir}' = '${configDir}'; + /** * @beta */ @@ -203,7 +209,20 @@ export async function loadPartialTsconfigFileAsync( }, jsonPathMetadata: { '$.compilerOptions.outDir': { - pathResolutionMethod: PathResolutionMethod.resolvePathRelativeToConfigurationFile + pathResolutionMethod: PathResolutionMethod.custom, + customResolver( + resolverOptions: ConfigurationFile.IJsonPathMetadataResolverOptions + ): string { + if (resolverOptions.propertyValue.includes(CONFIG_DIR_TOKEN)) { + // Typescript 5.5. introduced the `${configDir}` token to refer to the directory containing the root tsconfig + const configDir: string = path.dirname(tsconfigFilePath); + // The token is an absolute path, so it should occur at most once. + return path.resolve(resolverOptions.propertyValue.replace(CONFIG_DIR_TOKEN, configDir)); + } else { + const thisConfigDir: string = path.dirname(resolverOptions.configurationFilePath); + return path.resolve(thisConfigDir, resolverOptions.propertyValue); + } + } } } }); diff --git a/heft-plugins/heft-vscode-extension-plugin/CHANGELOG.json b/heft-plugins/heft-vscode-extension-plugin/CHANGELOG.json index 090bc95b651..6b3106c2946 100644 --- a/heft-plugins/heft-vscode-extension-plugin/CHANGELOG.json +++ b/heft-plugins/heft-vscode-extension-plugin/CHANGELOG.json @@ -1,6 +1,162 @@ { "name": "@rushstack/heft-vscode-extension-plugin", "entries": [ + { + "version": "1.0.12", + "tag": "@rushstack/heft-vscode-extension-plugin_v1.0.12", + "date": "Wed, 12 Nov 2025 01:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.9`" + } + ] + } + }, + { + "version": "1.0.11", + "tag": "@rushstack/heft-vscode-extension-plugin_v1.0.11", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.8`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.4` to `1.1.5`" + } + ] + } + }, + { + "version": "1.0.10", + "tag": "@rushstack/heft-vscode-extension-plugin_v1.0.10", + "date": "Tue, 11 Nov 2025 16:13:26 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.7`" + } + ] + } + }, + { + "version": "1.0.9", + "tag": "@rushstack/heft-vscode-extension-plugin_v1.0.9", + "date": "Mon, 10 Nov 2025 16:12:32 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.6`" + } + ] + } + }, + { + "version": "1.0.8", + "tag": "@rushstack/heft-vscode-extension-plugin_v1.0.8", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.3` to `1.1.4`" + } + ] + } + }, + { + "version": "1.0.7", + "tag": "@rushstack/heft-vscode-extension-plugin_v1.0.7", + "date": "Fri, 24 Oct 2025 11:22:09 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.4`" + } + ] + } + }, + { + "version": "1.0.6", + "tag": "@rushstack/heft-vscode-extension-plugin_v1.0.6", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "1.0.5", + "tag": "@rushstack/heft-vscode-extension-plugin_v1.0.5", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.1` to `1.1.2`" + } + ] + } + }, + { + "version": "1.0.4", + "tag": "@rushstack/heft-vscode-extension-plugin_v1.0.4", + "date": "Tue, 14 Oct 2025 15:13:22 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.1`" + } + ] + } + }, + { + "version": "1.0.3", + "tag": "@rushstack/heft-vscode-extension-plugin_v1.0.3", + "date": "Mon, 13 Oct 2025 15:13:02 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.0`" + } + ] + } + }, { "version": "1.0.2", "tag": "@rushstack/heft-vscode-extension-plugin_v1.0.2", diff --git a/heft-plugins/heft-vscode-extension-plugin/CHANGELOG.md b/heft-plugins/heft-vscode-extension-plugin/CHANGELOG.md index 9384b496e82..f0d52a69260 100644 --- a/heft-plugins/heft-vscode-extension-plugin/CHANGELOG.md +++ b/heft-plugins/heft-vscode-extension-plugin/CHANGELOG.md @@ -1,6 +1,56 @@ # Change Log - @rushstack/heft-vscode-extension-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:57:54 GMT and should not be manually modified. + +## 1.0.12 +Wed, 12 Nov 2025 01:57:54 GMT + +_Version update only_ + +## 1.0.11 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.0.10 +Tue, 11 Nov 2025 16:13:26 GMT + +_Version update only_ + +## 1.0.9 +Mon, 10 Nov 2025 16:12:32 GMT + +_Version update only_ + +## 1.0.8 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 1.0.7 +Fri, 24 Oct 2025 11:22:09 GMT + +_Version update only_ + +## 1.0.6 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.0.5 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ + +## 1.0.4 +Tue, 14 Oct 2025 15:13:22 GMT + +_Version update only_ + +## 1.0.3 +Mon, 13 Oct 2025 15:13:02 GMT + +_Version update only_ ## 1.0.2 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/heft-plugins/heft-vscode-extension-plugin/package.json b/heft-plugins/heft-vscode-extension-plugin/package.json index 1db640a00c0..b7bb774b3f3 100644 --- a/heft-plugins/heft-vscode-extension-plugin/package.json +++ b/heft-plugins/heft-vscode-extension-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-vscode-extension-plugin", - "version": "1.0.2", + "version": "1.0.12", "description": "Heft plugin for building vscode extensions.", "repository": { "type": "git", @@ -18,7 +18,7 @@ "main": "lib/index.js", "types": "lib/index.d.ts", "peerDependencies": { - "@rushstack/heft": "^1.1.1" + "@rushstack/heft": "^1.1.5" }, "devDependencies": { "@rushstack/heft": "workspace:*", diff --git a/heft-plugins/heft-webpack4-plugin/CHANGELOG.json b/heft-plugins/heft-webpack4-plugin/CHANGELOG.json index 18a2bc7be87..db5d5523b38 100644 --- a/heft-plugins/heft-webpack4-plugin/CHANGELOG.json +++ b/heft-plugins/heft-webpack4-plugin/CHANGELOG.json @@ -1,6 +1,90 @@ { "name": "@rushstack/heft-webpack4-plugin", "entries": [ + { + "version": "1.1.5", + "tag": "@rushstack/heft-webpack4-plugin_v1.1.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/debug-certificate-manager\" to `1.6.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.4` to `1.1.5`" + } + ] + } + }, + { + "version": "1.1.4", + "tag": "@rushstack/heft-webpack4-plugin_v1.1.4", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/debug-certificate-manager\" to `1.6.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.3` to `1.1.4`" + } + ] + } + }, + { + "version": "1.1.3", + "tag": "@rushstack/heft-webpack4-plugin_v1.1.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/debug-certificate-manager\" to `1.6.3`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "1.1.2", + "tag": "@rushstack/heft-webpack4-plugin_v1.1.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/debug-certificate-manager\" to `1.6.2`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.1` to `1.1.2`" + } + ] + } + }, { "version": "1.1.1", "tag": "@rushstack/heft-webpack4-plugin_v1.1.1", diff --git a/heft-plugins/heft-webpack4-plugin/CHANGELOG.md b/heft-plugins/heft-webpack4-plugin/CHANGELOG.md index 1f22d9b239b..b7f86f62a62 100644 --- a/heft-plugins/heft-webpack4-plugin/CHANGELOG.md +++ b/heft-plugins/heft-webpack4-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/heft-webpack4-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:28 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.1.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.1.4 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 1.1.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.1.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 1.1.1 Wed, 08 Oct 2025 00:13:28 GMT diff --git a/heft-plugins/heft-webpack4-plugin/config/heft.json b/heft-plugins/heft-webpack4-plugin/config/heft.json new file mode 100644 index 00000000000..0e52387039a --- /dev/null +++ b/heft-plugins/heft-webpack4-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + "extends": "local-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/heft/v1"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/heft-plugins/heft-webpack4-plugin/package.json b/heft-plugins/heft-webpack4-plugin/package.json index d88d55452e7..37fb51c7b37 100644 --- a/heft-plugins/heft-webpack4-plugin/package.json +++ b/heft-plugins/heft-webpack4-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-webpack4-plugin", - "version": "1.1.1", + "version": "1.1.5", "description": "Heft plugin for Webpack 4", "repository": { "type": "git", @@ -23,7 +23,7 @@ } }, "peerDependencies": { - "@rushstack/heft": "^1.1.1", + "@rushstack/heft": "^1.1.5", "@types/webpack": "^4", "webpack": "~4.47.0" }, diff --git a/heft-plugins/heft-webpack5-plugin/CHANGELOG.json b/heft-plugins/heft-webpack5-plugin/CHANGELOG.json index f65f269e9e9..12c9f4f03ba 100644 --- a/heft-plugins/heft-webpack5-plugin/CHANGELOG.json +++ b/heft-plugins/heft-webpack5-plugin/CHANGELOG.json @@ -1,6 +1,105 @@ { "name": "@rushstack/heft-webpack5-plugin", "entries": [ + { + "version": "1.2.5", + "tag": "@rushstack/heft-webpack5-plugin_v1.2.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/debug-certificate-manager\" to `1.6.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.4` to `1.1.5`" + } + ] + } + }, + { + "version": "1.2.4", + "tag": "@rushstack/heft-webpack5-plugin_v1.2.4", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/debug-certificate-manager\" to `1.6.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.3` to `1.1.4`" + } + ] + } + }, + { + "version": "1.2.3", + "tag": "@rushstack/heft-webpack5-plugin_v1.2.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/debug-certificate-manager\" to `1.6.3`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "1.2.2", + "tag": "@rushstack/heft-webpack5-plugin_v1.2.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/debug-certificate-manager\" to `1.6.2`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.1` to `1.1.2`" + } + ] + } + }, + { + "version": "1.2.1", + "tag": "@rushstack/heft-webpack5-plugin_v1.2.1", + "date": "Fri, 17 Oct 2025 23:22:33 GMT", + "comments": { + "patch": [ + { + "comment": "dev-server: add ipv6 loopback address support in terminal output" + }, + { + "comment": "add debug log when Webpack is imported from the rig package" + } + ] + } + }, { "version": "1.2.0", "tag": "@rushstack/heft-webpack5-plugin_v1.2.0", diff --git a/heft-plugins/heft-webpack5-plugin/CHANGELOG.md b/heft-plugins/heft-webpack5-plugin/CHANGELOG.md index cd06e78f388..20380b9cc3b 100644 --- a/heft-plugins/heft-webpack5-plugin/CHANGELOG.md +++ b/heft-plugins/heft-webpack5-plugin/CHANGELOG.md @@ -1,6 +1,34 @@ # Change Log - @rushstack/heft-webpack5-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:28 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.2.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.2.4 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 1.2.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.2.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ + +## 1.2.1 +Fri, 17 Oct 2025 23:22:33 GMT + +### Patches + +- dev-server: add ipv6 loopback address support in terminal output +- add debug log when Webpack is imported from the rig package ## 1.2.0 Wed, 08 Oct 2025 00:13:28 GMT diff --git a/heft-plugins/heft-webpack5-plugin/config/heft.json b/heft-plugins/heft-webpack5-plugin/config/heft.json new file mode 100644 index 00000000000..0e52387039a --- /dev/null +++ b/heft-plugins/heft-webpack5-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + "extends": "local-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/heft/v1"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/heft-plugins/heft-webpack5-plugin/package.json b/heft-plugins/heft-webpack5-plugin/package.json index 0dca072d51d..a6fadcf91de 100644 --- a/heft-plugins/heft-webpack5-plugin/package.json +++ b/heft-plugins/heft-webpack5-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-webpack5-plugin", - "version": "1.2.0", + "version": "1.2.5", "description": "Heft plugin for Webpack 5", "repository": { "type": "git", @@ -18,7 +18,7 @@ "_phase:test": "heft run --only test -- --clean" }, "peerDependencies": { - "@rushstack/heft": "^1.1.1", + "@rushstack/heft": "^1.1.5", "webpack": "^5.82.1" }, "dependencies": { diff --git a/heft-plugins/heft-webpack5-plugin/src/Webpack5Plugin.ts b/heft-plugins/heft-webpack5-plugin/src/Webpack5Plugin.ts index d2d264d404c..796302e4cf7 100644 --- a/heft-plugins/heft-webpack5-plugin/src/Webpack5Plugin.ts +++ b/heft-plugins/heft-webpack5-plugin/src/Webpack5Plugin.ts @@ -142,6 +142,9 @@ export default class Webpack5Plugin implements IHeftTaskPlugin { const addressInfo: AddressInfo | string | undefined = server.server?.address() as AddressInfo; if (addressInfo) { - const address: string = - typeof addressInfo === 'string' ? addressInfo : `${addressInfo.address}:${addressInfo.port}`; - taskSession.logger.terminal.writeLine(`Started Webpack Dev Server at https://${address}`); + let url: string; + if (typeof addressInfo === 'string') { + url = addressInfo; + } else { + const address: string = + addressInfo.family === 'IPv6' + ? `[${addressInfo.address}]:${addressInfo.port}` + : `${addressInfo.address}:${addressInfo.port}`; + url = `https://${address}/`; + } + taskSession.logger.terminal.writeLine(`Started Webpack Dev Server at ${url}`); } } }; @@ -476,13 +487,13 @@ export default class Webpack5Plugin implements IHeftTaskPlugin/lib/index.d.ts", + + "apiReport": { + "enabled": true, + "reportFolder": "../../../common/reviews/api" + }, + + "docModel": { + "enabled": true, + "apiJsonFilePath": "../../../common/temp/api/.api.json" + }, + + "dtsRollup": { + "enabled": true + } +} diff --git a/libraries/credential-cache/config/heft.json b/libraries/credential-cache/config/heft.json new file mode 100644 index 00000000000..0922361a39e --- /dev/null +++ b/libraries/credential-cache/config/heft.json @@ -0,0 +1,28 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + + "extends": "local-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/rush/v5"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/libraries/credential-cache/config/rig.json b/libraries/credential-cache/config/rig.json new file mode 100644 index 00000000000..165ffb001f5 --- /dev/null +++ b/libraries/credential-cache/config/rig.json @@ -0,0 +1,7 @@ +{ + // The "rig.json" file directs tools to look for their config files in an external package. + // Documentation for this system: https://www.npmjs.com/package/@rushstack/rig-package + "$schema": "https://developer.microsoft.com/json-schemas/rig-package/rig.schema.json", + + "rigPackageName": "local-node-rig" +} diff --git a/libraries/credential-cache/eslint.config.js b/libraries/credential-cache/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/libraries/credential-cache/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/libraries/credential-cache/package.json b/libraries/credential-cache/package.json new file mode 100644 index 00000000000..9e2d0ab76eb --- /dev/null +++ b/libraries/credential-cache/package.json @@ -0,0 +1,26 @@ +{ + "name": "@rushstack/credential-cache", + "version": "0.1.2", + "description": "Cross-platform functionality to manage cached credentials.", + "main": "lib/index.js", + "typings": "dist/credential-cache.d.ts", + "license": "MIT", + "repository": { + "url": "https://github.com/microsoft/rushstack.git", + "type": "git", + "directory": "libraries/credential-cache" + }, + "scripts": { + "build": "heft build --clean", + "_phase:build": "heft run --only build -- --clean", + "_phase:test": "heft run --only test -- --clean" + }, + "dependencies": { + "@rushstack/node-core-library": "workspace:*" + }, + "devDependencies": { + "@rushstack/heft": "workspace:*", + "eslint": "~9.37.0", + "local-node-rig": "workspace:*" + } +} diff --git a/libraries/rush-lib/src/logic/CredentialCache.ts b/libraries/credential-cache/src/CredentialCache.ts similarity index 85% rename from libraries/rush-lib/src/logic/CredentialCache.ts rename to libraries/credential-cache/src/CredentialCache.ts index 0e52c9ad52c..bac9378e7a9 100644 --- a/libraries/rush-lib/src/logic/CredentialCache.ts +++ b/libraries/credential-cache/src/CredentialCache.ts @@ -3,12 +3,26 @@ import * as path from 'node:path'; -import { FileSystem, JsonFile, JsonSchema, LockFile } from '@rushstack/node-core-library'; +import { + Disposables, + FileSystem, + JsonFile, + JsonSchema, + LockFile, + User, + Objects +} from '@rushstack/node-core-library'; -import { Utilities } from '../utilities/Utilities'; -import { RushUserConfiguration } from '../api/RushUserConfiguration'; -import schemaJson from '../schemas/credentials.schema.json'; -import { objectsAreDeepEqual } from '../utilities/objectUtilities'; +import schemaJson from './schemas/credentials.schema.json'; + +// Polyfill for node 18 +Disposables.polyfillDisposeSymbols(); + +/** + * The name of the default folder in the user's home directory where Rush stores user-specific data. + * @public + */ +export const RUSH_USER_FOLDER_NAME: '.rush-user' = '.rush-user'; const DEFAULT_CACHE_FILENAME: 'credentials.json' = 'credentials.json'; const LATEST_CREDENTIALS_JSON_VERSION: string = '0.1.0'; @@ -27,7 +41,7 @@ interface ICacheEntryJson { } /** - * @beta + * @public */ export interface ICredentialCacheEntry { expires?: Date; @@ -36,25 +50,22 @@ export interface ICredentialCacheEntry { } /** - * @beta + * @public */ export interface ICredentialCacheOptions { supportEditing: boolean; - /** - * If specified, use the specified path instead of the default path of `~/.rush-user/credentials.json` - */ cacheFilePath?: string; } /** - * @beta + * @public */ -export class CredentialCache /* implements IDisposable */ { +export class CredentialCache implements Disposable { private readonly _cacheFilePath: string; private readonly _cacheEntries: Map; private _modified: boolean = false; private _disposed: boolean = false; - private _supportsEditing: boolean; + private readonly _supportsEditing: boolean; private readonly _lockfile: LockFile | undefined; private constructor( @@ -79,7 +90,7 @@ export class CredentialCache /* implements IDisposable */ { cacheDirectory = path.dirname(options.cacheFilePath); cacheFileName = options.cacheFilePath.slice(cacheDirectory.length + 1); } else { - cacheDirectory = RushUserConfiguration.getRushUserFolderPath(); + cacheDirectory = `${User.getHomeFolder()}/${RUSH_USER_FOLDER_NAME}`; cacheFileName = DEFAULT_CACHE_FILENAME; } const cacheFilePath: string = `${cacheDirectory}/${cacheFileName}`; @@ -108,7 +119,12 @@ export class CredentialCache /* implements IDisposable */ { options: ICredentialCacheOptions, doActionAsync: (credentialCache: CredentialCache) => Promise | void ): Promise { - await Utilities.usingAsync(async () => await CredentialCache.initializeAsync(options), doActionAsync); + const cache: CredentialCache = await CredentialCache.initializeAsync(options); + try { + await doActionAsync(cache); + } finally { + cache.dispose(); + } } public setCacheEntry(cacheId: string, entry: ICredentialCacheEntry): void { @@ -120,7 +136,7 @@ export class CredentialCache /* implements IDisposable */ { if ( existingCacheEntry?.credential !== credential || existingCacheEntry?.expires !== expiresMilliseconds || - !objectsAreDeepEqual(existingCacheEntry?.credentialMetadata, credentialMetadata) + !Objects.areDeepEqual(existingCacheEntry?.credentialMetadata, credentialMetadata) ) { this._modified = true; this._cacheEntries.set(cacheId, { @@ -192,6 +208,10 @@ export class CredentialCache /* implements IDisposable */ { } } + public [Symbol.dispose](): void { + this.dispose(); + } + public dispose(): void { this._lockfile?.release(); this._disposed = true; diff --git a/libraries/credential-cache/src/index.ts b/libraries/credential-cache/src/index.ts new file mode 100644 index 00000000000..00ce0172b53 --- /dev/null +++ b/libraries/credential-cache/src/index.ts @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +/** + * This package is used to manage persistent, per-user cached credentials. + * + * @packageDocumentation + */ + +export { + CredentialCache, + type ICredentialCacheEntry, + type ICredentialCacheOptions, + RUSH_USER_FOLDER_NAME +} from './CredentialCache'; diff --git a/libraries/rush-lib/src/schemas/credentials.schema.json b/libraries/credential-cache/src/schemas/credentials.schema.json similarity index 100% rename from libraries/rush-lib/src/schemas/credentials.schema.json rename to libraries/credential-cache/src/schemas/credentials.schema.json diff --git a/libraries/credential-cache/src/test/CredentialCache.mock.ts b/libraries/credential-cache/src/test/CredentialCache.mock.ts new file mode 100644 index 00000000000..5a4bcc29188 --- /dev/null +++ b/libraries/credential-cache/src/test/CredentialCache.mock.ts @@ -0,0 +1,9 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import type * as GetHomeFolderModule from '@rushstack/node-core-library/lib/user/getHomeFolder'; + +export const mockGetHomeFolder: jest.MockedFunction = jest.fn(); +jest.mock('@rushstack/node-core-library/lib/user/getHomeFolder', (): typeof GetHomeFolderModule => ({ + getHomeFolder: mockGetHomeFolder +})); diff --git a/libraries/rush-lib/src/logic/test/CredentialCache.test.ts b/libraries/credential-cache/src/test/CredentialCache.test.ts similarity index 97% rename from libraries/rush-lib/src/logic/test/CredentialCache.test.ts rename to libraries/credential-cache/src/test/CredentialCache.test.ts index 46ce1bf6ccd..5bdb13c49e6 100644 --- a/libraries/rush-lib/src/logic/test/CredentialCache.test.ts +++ b/libraries/credential-cache/src/test/CredentialCache.test.ts @@ -1,11 +1,12 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. +import { mockGetHomeFolder } from './CredentialCache.mock'; import { LockFile, Async, FileSystem } from '@rushstack/node-core-library'; -import { RushUserConfiguration } from '../../api/RushUserConfiguration'; -import { CredentialCache, type ICredentialCacheOptions } from '../CredentialCache'; +import { CredentialCache, type ICredentialCacheOptions, RUSH_USER_FOLDER_NAME } from '../CredentialCache'; -const FAKE_RUSH_USER_FOLDER: string = 'temp/.rush-user'; +const FAKE_HOME_FOLDER: string = 'temp'; +const FAKE_RUSH_USER_FOLDER: string = `${FAKE_HOME_FOLDER}/${RUSH_USER_FOLDER_NAME}`; interface IPathsTestCase extends Required> { testCaseName: string; @@ -23,7 +24,7 @@ describe(CredentialCache.name, () => { }); beforeEach(() => { - jest.spyOn(RushUserConfiguration, 'getRushUserFolderPath').mockReturnValue(FAKE_RUSH_USER_FOLDER); + mockGetHomeFolder.mockReturnValue(FAKE_HOME_FOLDER); // TODO: Consider expanding these mocks and moving them to node-core-library jest diff --git a/libraries/rush-lib/src/logic/test/__snapshots__/CredentialCache.test.ts.snap b/libraries/credential-cache/src/test/__snapshots__/CredentialCache.test.ts.snap similarity index 100% rename from libraries/rush-lib/src/logic/test/__snapshots__/CredentialCache.test.ts.snap rename to libraries/credential-cache/src/test/__snapshots__/CredentialCache.test.ts.snap diff --git a/libraries/credential-cache/tsconfig.json b/libraries/credential-cache/tsconfig.json new file mode 100644 index 00000000000..dac21d04081 --- /dev/null +++ b/libraries/credential-cache/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/local-node-rig/profiles/default/tsconfig-base.json" +} diff --git a/libraries/debug-certificate-manager/CHANGELOG.json b/libraries/debug-certificate-manager/CHANGELOG.json index 389c87351fc..0e6ea74aaf5 100644 --- a/libraries/debug-certificate-manager/CHANGELOG.json +++ b/libraries/debug-certificate-manager/CHANGELOG.json @@ -1,6 +1,66 @@ { "name": "@rushstack/debug-certificate-manager", "entries": [ + { + "version": "1.6.5", + "tag": "@rushstack/debug-certificate-manager_v1.6.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "1.6.4", + "tag": "@rushstack/debug-certificate-manager_v1.6.4", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "1.6.3", + "tag": "@rushstack/debug-certificate-manager_v1.6.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "1.6.2", + "tag": "@rushstack/debug-certificate-manager_v1.6.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "1.6.1", "tag": "@rushstack/debug-certificate-manager_v1.6.1", diff --git a/libraries/debug-certificate-manager/CHANGELOG.md b/libraries/debug-certificate-manager/CHANGELOG.md index b9e88fc2bba..5f4065c536e 100644 --- a/libraries/debug-certificate-manager/CHANGELOG.md +++ b/libraries/debug-certificate-manager/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/debug-certificate-manager -This log was last generated on Wed, 08 Oct 2025 00:13:28 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.6.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.6.4 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 1.6.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.6.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 1.6.1 Wed, 08 Oct 2025 00:13:28 GMT diff --git a/libraries/debug-certificate-manager/package.json b/libraries/debug-certificate-manager/package.json index de96fb229ba..85a9c8897e8 100644 --- a/libraries/debug-certificate-manager/package.json +++ b/libraries/debug-certificate-manager/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/debug-certificate-manager", - "version": "1.6.1", + "version": "1.6.5", "description": "Cross-platform functionality to create debug ssl certificates.", "main": "lib/index.js", "typings": "dist/debug-certificate-manager.d.ts", diff --git a/libraries/heft-config-file/CHANGELOG.json b/libraries/heft-config-file/CHANGELOG.json index b25b648ffbf..2d10a4c82cf 100644 --- a/libraries/heft-config-file/CHANGELOG.json +++ b/libraries/heft-config-file/CHANGELOG.json @@ -1,6 +1,36 @@ { "name": "@rushstack/heft-config-file", "entries": [ + { + "version": "0.19.3", + "tag": "@rushstack/heft-config-file_v0.19.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + } + ] + } + }, + { + "version": "0.19.2", + "tag": "@rushstack/heft-config-file_v0.19.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + } + ] + } + }, { "version": "0.19.1", "tag": "@rushstack/heft-config-file_v0.19.1", diff --git a/libraries/heft-config-file/CHANGELOG.md b/libraries/heft-config-file/CHANGELOG.md index 0b9f29b511e..91189bbfbed 100644 --- a/libraries/heft-config-file/CHANGELOG.md +++ b/libraries/heft-config-file/CHANGELOG.md @@ -1,6 +1,16 @@ # Change Log - @rushstack/heft-config-file -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Fri, 24 Oct 2025 00:13:38 GMT and should not be manually modified. + +## 0.19.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.19.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.19.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/libraries/heft-config-file/package.json b/libraries/heft-config-file/package.json index 41f992b50b9..82c82db1421 100644 --- a/libraries/heft-config-file/package.json +++ b/libraries/heft-config-file/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-config-file", - "version": "0.19.1", + "version": "0.19.3", "description": "Configuration file loader for @rushstack/heft", "repository": { "type": "git", @@ -28,7 +28,7 @@ "jsonpath-plus": "~10.3.0" }, "devDependencies": { - "@rushstack/heft": "1.1.0", + "@rushstack/heft": "1.1.4", "@types/ungap__structured-clone": "~1.2.0", "decoupled-local-node-rig": "workspace:*", "eslint": "~9.37.0" diff --git a/libraries/load-themed-styles/CHANGELOG.json b/libraries/load-themed-styles/CHANGELOG.json index 46fbe580aed..70fd19ddebc 100644 --- a/libraries/load-themed-styles/CHANGELOG.json +++ b/libraries/load-themed-styles/CHANGELOG.json @@ -1,6 +1,54 @@ { "name": "@microsoft/load-themed-styles", "entries": [ + { + "version": "2.1.20", + "tag": "@microsoft/load-themed-styles_v2.1.20", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "2.1.19", + "tag": "@microsoft/load-themed-styles_v2.1.19", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "2.1.18", + "tag": "@microsoft/load-themed-styles_v2.1.18", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "2.1.17", + "tag": "@microsoft/load-themed-styles_v2.1.17", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "2.1.16", "tag": "@microsoft/load-themed-styles_v2.1.16", diff --git a/libraries/load-themed-styles/CHANGELOG.md b/libraries/load-themed-styles/CHANGELOG.md index 83899a2b029..cee95836e68 100644 --- a/libraries/load-themed-styles/CHANGELOG.md +++ b/libraries/load-themed-styles/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @microsoft/load-themed-styles -This log was last generated on Wed, 08 Oct 2025 00:13:28 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 2.1.20 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 2.1.19 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 2.1.18 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 2.1.17 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 2.1.16 Wed, 08 Oct 2025 00:13:28 GMT diff --git a/libraries/load-themed-styles/package.json b/libraries/load-themed-styles/package.json index 2aab96375f4..51ee63fc70e 100644 --- a/libraries/load-themed-styles/package.json +++ b/libraries/load-themed-styles/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/load-themed-styles", - "version": "2.1.16", + "version": "2.1.20", "description": "Loads themed styles.", "license": "MIT", "repository": { diff --git a/libraries/localization-utilities/CHANGELOG.json b/libraries/localization-utilities/CHANGELOG.json index 21a945bdbc0..e4d2ed897ae 100644 --- a/libraries/localization-utilities/CHANGELOG.json +++ b/libraries/localization-utilities/CHANGELOG.json @@ -1,6 +1,78 @@ { "name": "@rushstack/localization-utilities", "entries": [ + { + "version": "0.14.5", + "tag": "@rushstack/localization-utilities_v0.14.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/typings-generator\" to `0.15.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.14.4", + "tag": "@rushstack/localization-utilities_v0.14.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/typings-generator\" to `0.15.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.14.3", + "tag": "@rushstack/localization-utilities_v0.14.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/typings-generator\" to `0.15.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.14.2", + "tag": "@rushstack/localization-utilities_v0.14.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/typings-generator\" to `0.15.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "0.14.1", "tag": "@rushstack/localization-utilities_v0.14.1", diff --git a/libraries/localization-utilities/CHANGELOG.md b/libraries/localization-utilities/CHANGELOG.md index 8c3080d064e..2bd8e58cd86 100644 --- a/libraries/localization-utilities/CHANGELOG.md +++ b/libraries/localization-utilities/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/localization-utilities -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.14.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.14.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.14.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.14.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.14.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/libraries/localization-utilities/package.json b/libraries/localization-utilities/package.json index a377b2b546d..7cb876a10c4 100644 --- a/libraries/localization-utilities/package.json +++ b/libraries/localization-utilities/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/localization-utilities", - "version": "0.14.1", + "version": "0.14.5", "description": "This plugin contains some useful functions for localization.", "main": "lib/index.js", "typings": "dist/localization-utilities.d.ts", diff --git a/libraries/lookup-by-path/CHANGELOG.json b/libraries/lookup-by-path/CHANGELOG.json index 7c232f46b28..fcfb9733906 100644 --- a/libraries/lookup-by-path/CHANGELOG.json +++ b/libraries/lookup-by-path/CHANGELOG.json @@ -1,6 +1,54 @@ { "name": "@rushstack/lookup-by-path", "entries": [ + { + "version": "0.8.7", + "tag": "@rushstack/lookup-by-path_v0.8.7", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.8.6", + "tag": "@rushstack/lookup-by-path_v0.8.6", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.8.5", + "tag": "@rushstack/lookup-by-path_v0.8.5", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.8.4", + "tag": "@rushstack/lookup-by-path_v0.8.4", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "0.8.3", "tag": "@rushstack/lookup-by-path_v0.8.3", diff --git a/libraries/lookup-by-path/CHANGELOG.md b/libraries/lookup-by-path/CHANGELOG.md index b0f76688aef..5c0f9e9c5bb 100644 --- a/libraries/lookup-by-path/CHANGELOG.md +++ b/libraries/lookup-by-path/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/lookup-by-path -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.8.7 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.8.6 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.8.5 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.8.4 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.8.3 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/libraries/lookup-by-path/package.json b/libraries/lookup-by-path/package.json index cdd5e78eec6..4c362ef866b 100644 --- a/libraries/lookup-by-path/package.json +++ b/libraries/lookup-by-path/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/lookup-by-path", - "version": "0.8.3", + "version": "0.8.7", "description": "Strongly typed trie data structure for path and URL-like strings.", "main": "lib/index.js", "typings": "dist/lookup-by-path.d.ts", diff --git a/libraries/module-minifier/CHANGELOG.json b/libraries/module-minifier/CHANGELOG.json index 62190bcf0fb..b68388ac092 100644 --- a/libraries/module-minifier/CHANGELOG.json +++ b/libraries/module-minifier/CHANGELOG.json @@ -1,6 +1,66 @@ { "name": "@rushstack/module-minifier", "entries": [ + { + "version": "0.8.5", + "tag": "@rushstack/module-minifier_v0.8.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/worker-pool\" to `0.6.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.8.4", + "tag": "@rushstack/module-minifier_v0.8.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/worker-pool\" to `0.6.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.8.3", + "tag": "@rushstack/module-minifier_v0.8.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/worker-pool\" to `0.6.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.8.2", + "tag": "@rushstack/module-minifier_v0.8.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/worker-pool\" to `0.6.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "0.8.1", "tag": "@rushstack/module-minifier_v0.8.1", diff --git a/libraries/module-minifier/CHANGELOG.md b/libraries/module-minifier/CHANGELOG.md index 6e1582eda21..d3c3b8adf00 100644 --- a/libraries/module-minifier/CHANGELOG.md +++ b/libraries/module-minifier/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/module-minifier -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.8.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.8.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.8.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.8.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.8.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/libraries/module-minifier/package.json b/libraries/module-minifier/package.json index 30bd00cf0ec..f341ee0ce35 100644 --- a/libraries/module-minifier/package.json +++ b/libraries/module-minifier/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/module-minifier", - "version": "0.8.1", + "version": "0.8.5", "description": "Wrapper for terser to support bulk parallel minification.", "main": "lib/index.js", "typings": "dist/module-minifier.d.ts", diff --git a/libraries/node-core-library/CHANGELOG.json b/libraries/node-core-library/CHANGELOG.json index e18edee8a88..193568c64f2 100644 --- a/libraries/node-core-library/CHANGELOG.json +++ b/libraries/node-core-library/CHANGELOG.json @@ -1,6 +1,30 @@ { "name": "@rushstack/node-core-library", "entries": [ + { + "version": "5.18.0", + "tag": "@rushstack/node-core-library_v5.18.0", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "minor": [ + { + "comment": "Add \"Objects.areDeepEqual\" and \"User.getHomeFolder\" APIs." + } + ] + } + }, + { + "version": "5.17.1", + "tag": "@rushstack/node-core-library_v5.17.1", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "patch": [ + { + "comment": "Update the return type of `Executable.waitForExitAsync` to omit `stdout` and `stderr` if an `encoding` parameter isn't passed to the options object." + } + ] + } + }, { "version": "5.17.0", "tag": "@rushstack/node-core-library_v5.17.0", diff --git a/libraries/node-core-library/CHANGELOG.md b/libraries/node-core-library/CHANGELOG.md index eb0fe23dd1a..2fcc5205d5b 100644 --- a/libraries/node-core-library/CHANGELOG.md +++ b/libraries/node-core-library/CHANGELOG.md @@ -1,6 +1,20 @@ # Change Log - @rushstack/node-core-library -This log was last generated on Wed, 08 Oct 2025 00:13:28 GMT and should not be manually modified. +This log was last generated on Fri, 24 Oct 2025 00:13:38 GMT and should not be manually modified. + +## 5.18.0 +Fri, 24 Oct 2025 00:13:38 GMT + +### Minor changes + +- Add "Objects.areDeepEqual" and "User.getHomeFolder" APIs. + +## 5.17.1 +Wed, 22 Oct 2025 00:57:54 GMT + +### Patches + +- Update the return type of `Executable.waitForExitAsync` to omit `stdout` and `stderr` if an `encoding` parameter isn't passed to the options object. ## 5.17.0 Wed, 08 Oct 2025 00:13:28 GMT diff --git a/libraries/node-core-library/package.json b/libraries/node-core-library/package.json index 15ceae154f4..c48a1e0b0f7 100644 --- a/libraries/node-core-library/package.json +++ b/libraries/node-core-library/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/node-core-library", - "version": "5.17.0", + "version": "5.18.0", "description": "Core libraries that every NodeJS toolchain project should use", "main": "lib/index.js", "typings": "dist/node-core-library.d.ts", @@ -26,7 +26,7 @@ "ajv-formats": "~3.0.1" }, "devDependencies": { - "@rushstack/heft": "1.1.0", + "@rushstack/heft": "1.1.4", "@rushstack/problem-matcher": "workspace:*", "@types/fs-extra": "7.0.0", "@types/jju": "1.4.1", diff --git a/libraries/node-core-library/src/Disposables.ts b/libraries/node-core-library/src/Disposables.ts new file mode 100644 index 00000000000..8edc3e0e794 --- /dev/null +++ b/libraries/node-core-library/src/Disposables.ts @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import * as Disposables from './disposables/index'; + +export { Disposables }; diff --git a/libraries/node-core-library/src/Executable.ts b/libraries/node-core-library/src/Executable.ts index 1d85b97e82c..f7f73603205 100644 --- a/libraries/node-core-library/src/Executable.ts +++ b/libraries/node-core-library/src/Executable.ts @@ -160,21 +160,12 @@ export interface IWaitForExitWithBufferOptions extends IWaitForExitOptions { } /** - * The result of running a process to completion using {@link Executable.(waitForExitAsync:3)}. + * The result of running a process to completion using {@link Executable.(waitForExitAsync:3)}. This + * interface does not include stdout or stderr output because an {@link IWaitForExitOptions.encoding} was not specified. * * @public */ -export interface IWaitForExitResult { - /** - * The process stdout output, if encoding was specified. - */ - stdout: T; - - /** - * The process stderr output, if encoding was specified. - */ - stderr: T; - +export interface IWaitForExitResultWithoutOutput { /** * The process exit code. If the process was terminated, this will be null. */ @@ -188,6 +179,25 @@ export interface IWaitForExitResult { signal: string | null; } +/** + * The result of running a process to completion using {@link Executable.(waitForExitAsync:1)}, + * or {@link Executable.(waitForExitAsync:2)}. + * + * @public + */ +export interface IWaitForExitResult + extends IWaitForExitResultWithoutOutput { + /** + * The process stdout output, if encoding was specified. + */ + stdout: T; + + /** + * The process stderr output, if encoding was specified. + */ + stderr: T; +} + // Common environmental state used by Executable members interface IExecutableContext { currentWorkingDirectory: string; @@ -554,12 +564,12 @@ export class Executable { public static async waitForExitAsync( childProcess: child_process.ChildProcess, options?: IWaitForExitOptions - ): Promise>; + ): Promise; - public static async waitForExitAsync( + public static async waitForExitAsync( childProcess: child_process.ChildProcess, options: IWaitForExitOptions = {} - ): Promise> { + ): Promise | IWaitForExitResultWithoutOutput> { const { throwOnNonZeroExitCode, throwOnSignal, encoding } = options; if (encoding && (!childProcess.stdout || !childProcess.stderr)) { throw new Error( @@ -611,22 +621,31 @@ export class Executable { } ); - let stdout: T | undefined; - let stderr: T | undefined; - if (encoding === 'buffer') { - stdout = Buffer.concat(collectedStdout as Buffer[]) as T; - stderr = Buffer.concat(collectedStderr as Buffer[]) as T; - } else if (encoding !== undefined) { - stdout = collectedStdout.join('') as T; - stderr = collectedStderr.join('') as T; - } + let result: IWaitForExitResult | IWaitForExitResultWithoutOutput; + if (encoding) { + let stdout: T | undefined; + let stderr: T | undefined; + + if (encoding === 'buffer') { + stdout = Buffer.concat(collectedStdout as Buffer[]) as T; + stderr = Buffer.concat(collectedStderr as Buffer[]) as T; + } else if (encoding !== undefined) { + stdout = collectedStdout.join('') as T; + stderr = collectedStderr.join('') as T; + } - const result: IWaitForExitResult = { - stdout: stdout as T, - stderr: stderr as T, - exitCode, - signal - }; + result = { + stdout: stdout as T, + stderr: stderr as T, + exitCode, + signal + }; + } else { + result = { + exitCode, + signal + }; + } return result; } diff --git a/libraries/node-core-library/src/Objects.ts b/libraries/node-core-library/src/Objects.ts new file mode 100644 index 00000000000..ac7923db5f7 --- /dev/null +++ b/libraries/node-core-library/src/Objects.ts @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import * as Objects from './objects/index'; + +export { Objects }; diff --git a/libraries/node-core-library/src/User.ts b/libraries/node-core-library/src/User.ts new file mode 100644 index 00000000000..3107da72bf6 --- /dev/null +++ b/libraries/node-core-library/src/User.ts @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import * as User from './user/index'; + +export { User }; diff --git a/libraries/node-core-library/src/disposables/index.ts b/libraries/node-core-library/src/disposables/index.ts new file mode 100644 index 00000000000..f3aa7768ad1 --- /dev/null +++ b/libraries/node-core-library/src/disposables/index.ts @@ -0,0 +1,4 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +export { polyfillDisposeSymbols } from './polyfillDisposeSymbols'; diff --git a/libraries/node-core-library/src/disposables/polyfillDisposeSymbols.ts b/libraries/node-core-library/src/disposables/polyfillDisposeSymbols.ts new file mode 100644 index 00000000000..621807aa12f --- /dev/null +++ b/libraries/node-core-library/src/disposables/polyfillDisposeSymbols.ts @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +/** + * @public + * Polyfill for `Symbol.dispose` and `Symbol.asyncDispose` for Node.js versions prior to 20 + */ +export function polyfillDisposeSymbols(): void { + (Symbol as { dispose?: typeof Symbol.dispose }).dispose ??= Symbol.for( + 'Symbol.dispose' + ) as typeof Symbol.dispose; + (Symbol as { asyncDispose?: typeof Symbol.asyncDispose }).asyncDispose ??= Symbol.for( + 'Symbol.asyncDispose' + ) as typeof Symbol.asyncDispose; +} diff --git a/libraries/node-core-library/src/index.ts b/libraries/node-core-library/src/index.ts index 9b359180b4e..c48a9c950a3 100644 --- a/libraries/node-core-library/src/index.ts +++ b/libraries/node-core-library/src/index.ts @@ -9,7 +9,10 @@ * @packageDocumentation */ +export type { IProblemPattern } from '@rushstack/problem-matcher'; + export { AlreadyReportedError } from './AlreadyReportedError'; + export { Async, AsyncQueue, @@ -18,10 +21,15 @@ export { type IRunWithTimeoutOptions, type IWeighted } from './Async'; -export type { Brand } from './PrimitiveTypes'; + export { FileConstants, FolderConstants } from './Constants'; + +export { Disposables } from './Disposables'; + export { Enum } from './Enum'; + export { EnvironmentMap, type IEnvironmentEntry } from './EnvironmentMap'; + export { type ExecutableStdioStreamMapping, type ExecutableStdioMapping, @@ -32,21 +40,36 @@ export { type IWaitForExitWithBufferOptions, type IWaitForExitWithStringOptions, type IWaitForExitResult, + type IWaitForExitResultWithoutOutput, type IProcessInfo, Executable } from './Executable'; + export { type IFileErrorOptions, type IFileErrorFormattingOptions, FileError } from './FileError'; -export type { IProblemPattern } from '@rushstack/problem-matcher'; -export type { - INodePackageJson, - IPackageJson, - IPackageJsonDependencyTable, - IPackageJsonScriptTable, - IPackageJsonRepository, - IPeerDependenciesMetaTable, - IDependenciesMetaTable, - IPackageJsonExports -} from './IPackageJson'; + +export { + AlreadyExistsBehavior, + FileSystem, + type FileSystemCopyFilesAsyncFilter, + type FileSystemCopyFilesFilter, + type FolderItem, + type FileSystemStats, + type IFileSystemCopyFileBaseOptions, + type IFileSystemCopyFileOptions, + type IFileSystemCopyFilesAsyncOptions, + type IFileSystemCopyFilesOptions, + type IFileSystemCreateLinkOptions, + type IFileSystemDeleteFileOptions, + type IFileSystemMoveOptions, + type IFileSystemReadFileOptions, + type IFileSystemReadFolderOptions, + type IFileSystemUpdateTimeParameters, + type IFileSystemWriteBinaryFileOptions, + type IFileSystemWriteFileOptions +} from './FileSystem'; + +export { FileWriter, type IFileWriterFlags } from './FileWriter'; + export { Import, type IImportResolveOptions, @@ -56,7 +79,20 @@ export { type IImportResolvePackageOptions, type IImportResolvePackageAsyncOptions } from './Import'; + export { InternalError } from './InternalError'; + +export type { + INodePackageJson, + IPackageJson, + IPackageJsonDependencyTable, + IPackageJsonScriptTable, + IPackageJsonRepository, + IPeerDependenciesMetaTable, + IDependenciesMetaTable, + IPackageJsonExports +} from './IPackageJson'; + export { type JsonObject, type JsonNull, @@ -67,6 +103,7 @@ export { type IJsonFileSaveOptions, JsonFile } from './JsonFile'; + export { type IJsonSchemaErrorInfo, type IJsonSchemaCustomFormat, @@ -78,12 +115,19 @@ export { JsonSchema, type JsonSchemaVersion } from './JsonSchema'; + +export { LegacyAdapters, type LegacyCallback } from './LegacyAdapters'; + export { LockFile } from './LockFile'; + export { MapExtensions } from './MapExtensions'; + export { MinimumHeap } from './MinimumHeap'; -export { PosixModeBits } from './PosixModeBits'; -export { ProtectableMap, type IProtectableMapParameters } from './ProtectableMap'; + +export { Objects } from './Objects'; + export { type IPackageJsonLookupParameters, PackageJsonLookup } from './PackageJsonLookup'; + export { PackageName, PackageNameParser, @@ -91,37 +135,30 @@ export { type IParsedPackageName, type IParsedPackageNameOrError } from './PackageName'; + export { Path, type FileLocationStyle, type IPathFormatFileLocationOptions, type IPathFormatConciselyOptions } from './Path'; + +export { PosixModeBits } from './PosixModeBits'; + +export type { Brand } from './PrimitiveTypes'; + +export { ProtectableMap, type IProtectableMapParameters } from './ProtectableMap'; + export { RealNodeModulePathResolver, type IRealNodeModulePathResolverOptions } from './RealNodeModulePath'; -export { Encoding, Text, NewlineKind, type IReadLinesFromIterableOptions } from './Text'; + export { Sort } from './Sort'; -export { - AlreadyExistsBehavior, - FileSystem, - type FileSystemCopyFilesAsyncFilter, - type FileSystemCopyFilesFilter, - type FolderItem, - type FileSystemStats, - type IFileSystemCopyFileBaseOptions, - type IFileSystemCopyFileOptions, - type IFileSystemCopyFilesAsyncOptions, - type IFileSystemCopyFilesOptions, - type IFileSystemCreateLinkOptions, - type IFileSystemDeleteFileOptions, - type IFileSystemMoveOptions, - type IFileSystemReadFileOptions, - type IFileSystemReadFolderOptions, - type IFileSystemUpdateTimeParameters, - type IFileSystemWriteBinaryFileOptions, - type IFileSystemWriteFileOptions -} from './FileSystem'; -export { FileWriter, type IFileWriterFlags } from './FileWriter'; -export { LegacyAdapters, type LegacyCallback } from './LegacyAdapters'; + export { StringBuilder, type IStringBuilder } from './StringBuilder'; + export { type ISubprocessOptions, SubprocessTerminator } from './SubprocessTerminator'; + +export { Encoding, Text, NewlineKind, type IReadLinesFromIterableOptions } from './Text'; + export { TypeUuid } from './TypeUuid'; + +export { User } from './User'; diff --git a/libraries/node-core-library/src/objects/areDeepEqual.ts b/libraries/node-core-library/src/objects/areDeepEqual.ts new file mode 100644 index 00000000000..09d618e588a --- /dev/null +++ b/libraries/node-core-library/src/objects/areDeepEqual.ts @@ -0,0 +1,63 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +/** + * Determines if two objects are deeply equal. + * @public + */ +export function areDeepEqual(a: TObject, b: TObject): boolean { + if (a === b) { + return true; + } else { + const aType: string = typeof a; + const bType: string = typeof b; + + if (aType !== bType) { + return false; + } else { + if (aType === 'object') { + if (a === null || b === null) { + // We already handled the case where a === b, so if either is null, they are not equal + return false; + } else if (Array.isArray(a)) { + if (!Array.isArray(b) || a.length !== b.length) { + return false; + } else { + for (let i: number = 0; i < a.length; ++i) { + if (!areDeepEqual(a[i], b[i])) { + return false; + } + } + + return true; + } + } else { + const aObjectProperties: Set = new Set(Object.getOwnPropertyNames(a)); + const bObjectProperties: Set = new Set(Object.getOwnPropertyNames(b)); + if (aObjectProperties.size !== bObjectProperties.size) { + return false; + } else { + for (const property of aObjectProperties) { + if (bObjectProperties.delete(property)) { + if ( + !areDeepEqual( + (a as Record)[property], + (b as Record)[property] + ) + ) { + return false; + } + } else { + return false; + } + } + + return bObjectProperties.size === 0; + } + } + } else { + return false; + } + } + } +} diff --git a/libraries/node-core-library/src/objects/index.ts b/libraries/node-core-library/src/objects/index.ts new file mode 100644 index 00000000000..77fdef00371 --- /dev/null +++ b/libraries/node-core-library/src/objects/index.ts @@ -0,0 +1,4 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +export { areDeepEqual } from './areDeepEqual'; diff --git a/libraries/node-core-library/src/objects/test/areDeepEqual.test.ts b/libraries/node-core-library/src/objects/test/areDeepEqual.test.ts new file mode 100644 index 00000000000..28f29790685 --- /dev/null +++ b/libraries/node-core-library/src/objects/test/areDeepEqual.test.ts @@ -0,0 +1,77 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import { areDeepEqual } from '../areDeepEqual'; + +describe(areDeepEqual.name, () => { + it('can compare primitives', () => { + expect(areDeepEqual(1, 1)).toEqual(true); + expect(areDeepEqual(1, undefined)).toEqual(false); + expect(areDeepEqual(1, null)).toEqual(false); + expect(areDeepEqual(undefined, 1)).toEqual(false); + expect(areDeepEqual(null, 1)).toEqual(false); + expect(areDeepEqual(1, 2)).toEqual(false); + + expect(areDeepEqual('a', 'a')).toEqual(true); + expect(areDeepEqual('a', undefined)).toEqual(false); + expect(areDeepEqual('a', null)).toEqual(false); + expect(areDeepEqual(undefined, 'a')).toEqual(false); + expect(areDeepEqual(null, 'a')).toEqual(false); + expect(areDeepEqual('a', 'b')).toEqual(false); + + expect(areDeepEqual(true, true)).toEqual(true); + expect(areDeepEqual(true, undefined)).toEqual(false); + expect(areDeepEqual(true, null)).toEqual(false); + expect(areDeepEqual(undefined, true)).toEqual(false); + expect(areDeepEqual(null, true)).toEqual(false); + expect(areDeepEqual(true, false)).toEqual(false); + + expect(areDeepEqual(undefined, undefined)).toEqual(true); + expect(areDeepEqual(undefined, null)).toEqual(false); + expect(areDeepEqual(null, null)).toEqual(true); + }); + + it('can compare arrays', () => { + expect(areDeepEqual([], [])).toEqual(true); + expect(areDeepEqual([], undefined)).toEqual(false); + expect(areDeepEqual([], null)).toEqual(false); + expect(areDeepEqual(undefined, [])).toEqual(false); + expect(areDeepEqual(null, [])).toEqual(false); + + expect(areDeepEqual([1], [1])).toEqual(true); + expect(areDeepEqual([1], [2])).toEqual(false); + + expect(areDeepEqual([1, 2], [1, 2])).toEqual(true); + expect(areDeepEqual([1, 2], [2, 1])).toEqual(false); + + expect(areDeepEqual([1, 2, 3], [1, 2, 3])).toEqual(true); + expect(areDeepEqual([1, 2, 3], [1, 2, 4])).toEqual(false); + }); + + it('can compare objects', () => { + expect(areDeepEqual({}, {})).toEqual(true); + expect(areDeepEqual({}, undefined)).toEqual(false); + expect(areDeepEqual({}, null)).toEqual(false); + expect(areDeepEqual(undefined, {})).toEqual(false); + expect(areDeepEqual(null, {})).toEqual(false); + + expect(areDeepEqual({ a: 1 }, { a: 1 })).toEqual(true); + expect(areDeepEqual({ a: 1 }, { a: 2 })).toEqual(false); + expect(areDeepEqual({ a: 1 }, {})).toEqual(false); + expect(areDeepEqual({}, { a: 1 })).toEqual(false); + expect(areDeepEqual({ a: 1 }, { b: 1 })).toEqual(false); + + expect(areDeepEqual({ a: 1, b: 2 }, { a: 1, b: 2 })).toEqual(true); + expect(areDeepEqual({ a: 1, b: 2 }, { a: 1, b: 3 })).toEqual(false); + expect(areDeepEqual({ a: 1, b: 2 }, { a: 1, c: 2 })).toEqual(false); + expect(areDeepEqual({ a: 1, b: 2 }, { b: 2, a: 1 })).toEqual(true); + }); + + it('can compare nested objects', () => { + expect(areDeepEqual({ a: { b: 1 } }, { a: { b: 1 } })).toEqual(true); + expect(areDeepEqual({ a: { b: 1 } }, { a: { b: 2 } })).toEqual(false); + expect(areDeepEqual({ a: { b: 1 } }, { a: { c: 1 } })).toEqual(false); + expect(areDeepEqual({ a: { b: 1 } }, { a: { b: 1, c: 2 } })).toEqual(false); + expect(areDeepEqual({ a: { b: 1 } }, { a: { b: 1 }, c: 2 })).toEqual(false); + }); +}); diff --git a/libraries/node-core-library/src/test/Executable.test.ts b/libraries/node-core-library/src/test/Executable.test.ts index d7a2b0ced81..97da9ed6f95 100644 --- a/libraries/node-core-library/src/test/Executable.test.ts +++ b/libraries/node-core-library/src/test/Executable.test.ts @@ -12,7 +12,8 @@ import { parseProcessListOutputAsync, type IProcessInfo, type IExecutableSpawnSyncOptions, - type IWaitForExitResult + type IWaitForExitResult, + type IWaitForExitResultWithoutOutput } from '../Executable'; import { FileSystem } from '../FileSystem'; import { PosixModeBits } from '../PosixModeBits'; @@ -236,11 +237,11 @@ describe('Executable process tests', () => { environment, currentWorkingDirectory: executableFolder }); - const result: IWaitForExitResult = await Executable.waitForExitAsync(childProcess); + const result: IWaitForExitResultWithoutOutput = await Executable.waitForExitAsync(childProcess); expect(result.exitCode).toEqual(0); expect(result.signal).toBeNull(); - expect(result.stderr).toBeUndefined(); - expect(result.stderr).toBeUndefined(); + expect('stdout' in result).toBe(false); + expect('stderr' in result).toBe(false); }); test('Executable.runToCompletion(Executable.spawn("npm-binary-wrapper")) with buffer output', async () => { diff --git a/libraries/node-core-library/src/user/getHomeFolder.ts b/libraries/node-core-library/src/user/getHomeFolder.ts new file mode 100644 index 00000000000..61db1b38714 --- /dev/null +++ b/libraries/node-core-library/src/user/getHomeFolder.ts @@ -0,0 +1,35 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import * as path from 'node:path'; + +import { FileSystem } from '../FileSystem'; + +let _cachedHomeFolder: string | undefined; + +/** + * Returns the current user's home folder path. + * Throws if it cannot be determined. Successful results are cached. + * @public + */ +export function getHomeFolder(): string { + if (_cachedHomeFolder !== undefined) { + return _cachedHomeFolder; + } + + const unresolvedUserFolder: string | undefined = + process.env[process.platform === 'win32' ? 'USERPROFILE' : 'HOME']; + const dirError: string = "Unable to determine the current user's home directory"; + if (unresolvedUserFolder === undefined) { + throw new Error(dirError); + } + + const homeFolder: string = path.resolve(unresolvedUserFolder); + if (!FileSystem.exists(homeFolder)) { + throw new Error(dirError); + } + + _cachedHomeFolder = homeFolder; + + return homeFolder; +} diff --git a/libraries/node-core-library/src/user/index.ts b/libraries/node-core-library/src/user/index.ts new file mode 100644 index 00000000000..9e4ef36360e --- /dev/null +++ b/libraries/node-core-library/src/user/index.ts @@ -0,0 +1,4 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +export { getHomeFolder } from './getHomeFolder'; diff --git a/libraries/npm-check-fork/.npmignore b/libraries/npm-check-fork/.npmignore new file mode 100644 index 00000000000..bc349f9a4be --- /dev/null +++ b/libraries/npm-check-fork/.npmignore @@ -0,0 +1,32 @@ +# THIS IS A STANDARD TEMPLATE FOR .npmignore FILES IN THIS REPO. + +# Ignore all files by default, to avoid accidentally publishing unintended files. +* + +# Use negative patterns to bring back the specific things we want to publish. +!/bin/** +!/lib/** +!/lib-*/** +!/dist/** + +!CHANGELOG.md +!CHANGELOG.json +!heft-plugin.json +!rush-plugin-manifest.json +!ThirdPartyNotice.txt + +# Ignore certain patterns that should not get published. +/dist/*.stats.* +/lib/**/test/ +/lib-*/**/test/ +*.test.js + +# NOTE: These don't need to be specified, because NPM includes them automatically. +# +# package.json +# README.md +# LICENSE + +# --------------------------------------------------------------------------- +# DO NOT MODIFY ABOVE THIS LINE! Add any project-specific overrides below. +# --------------------------------------------------------------------------- diff --git a/libraries/npm-check-fork/CHANGELOG.json b/libraries/npm-check-fork/CHANGELOG.json new file mode 100644 index 00000000000..6c3a086e0d4 --- /dev/null +++ b/libraries/npm-check-fork/CHANGELOG.json @@ -0,0 +1,65 @@ +{ + "name": "@rushstack/npm-check-fork", + "entries": [ + { + "version": "0.1.4", + "tag": "@rushstack/npm-check-fork_v0.1.4", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.1.3", + "tag": "@rushstack/npm-check-fork_v0.1.3", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.1.2", + "tag": "@rushstack/npm-check-fork_v0.1.2", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.1.1", + "tag": "@rushstack/npm-check-fork_v0.1.1", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, + { + "version": "0.1.0", + "tag": "@rushstack/npm-check-fork_v0.1.0", + "date": "Sat, 18 Oct 2025 00:06:19 GMT", + "comments": { + "minor": [ + { + "comment": "Initial fork of npm-check" + } + ] + } + } + ] +} diff --git a/libraries/npm-check-fork/CHANGELOG.md b/libraries/npm-check-fork/CHANGELOG.md new file mode 100644 index 00000000000..5a5de9da20c --- /dev/null +++ b/libraries/npm-check-fork/CHANGELOG.md @@ -0,0 +1,31 @@ +# Change Log - @rushstack/npm-check-fork + +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.1.4 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.1.3 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.1.2 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.1.1 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ + +## 0.1.0 +Sat, 18 Oct 2025 00:06:19 GMT + +### Minor changes + +- Initial fork of npm-check + diff --git a/libraries/npm-check-fork/LICENSE b/libraries/npm-check-fork/LICENSE new file mode 100644 index 00000000000..b7b33fb69c7 --- /dev/null +++ b/libraries/npm-check-fork/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Dylan Greene + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/libraries/npm-check-fork/README.md b/libraries/npm-check-fork/README.md new file mode 100644 index 00000000000..c4a6296956d --- /dev/null +++ b/libraries/npm-check-fork/README.md @@ -0,0 +1,31 @@ +# @rushstack/npm-check-fork + +This package is a temporary rushstack maintained fork of [`npm-check`](https://github.com/dylang/npm-check), used internally by `rush upgrade-interactive`. It exists to address security vulnerabilities and compatibility issues present in the latest upstream version. + +**Origin:** +- Forked from [`npm-check`](https://github.com/dylang/npm-check) +- Original copyright: + ``` + Copyright (c) 2015 Dylan Greene + Licensed under the MIT license. + ``` + +**Purpose:** +This fork is expected to be temporary and will be removed once upstream issues are resolved. + +## Changes from Upstream + +- **Removed unused state properties:** + Properties from the state object that were never set or used have been removed (see `INpmCheckState`). +- **Removed `peerDependencies` from `INpmCheckPackageSummary`:** + This property was deprecated in `npm-check` and was never set. +- **Removed emoji support:** + Emoji output was never used in rushstack/rush-lib and has been stripped out. +- **Downgraded `path-exists` dependency:** + The latest version of `path-exists` is ESM-only; this fork uses a compatible CommonJS version. +- **Removed `semverDiff` dependency:** + This was deprecated and its functionality has been replaced by direct usage of `semver`. + +## License + +This fork retains the original MIT license from `npm-check`. diff --git a/libraries/npm-check-fork/config/rig.json b/libraries/npm-check-fork/config/rig.json new file mode 100644 index 00000000000..165ffb001f5 --- /dev/null +++ b/libraries/npm-check-fork/config/rig.json @@ -0,0 +1,7 @@ +{ + // The "rig.json" file directs tools to look for their config files in an external package. + // Documentation for this system: https://www.npmjs.com/package/@rushstack/rig-package + "$schema": "https://developer.microsoft.com/json-schemas/rig-package/rig.schema.json", + + "rigPackageName": "local-node-rig" +} diff --git a/libraries/npm-check-fork/eslint.config.js b/libraries/npm-check-fork/eslint.config.js new file mode 100644 index 00000000000..9175fbaa4cd --- /dev/null +++ b/libraries/npm-check-fork/eslint.config.js @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + }, + rules: { + // This package is a fork, so it carries the original copyright. + 'headers/header-format': 'off' + } + } +]; diff --git a/libraries/npm-check-fork/package.json b/libraries/npm-check-fork/package.json new file mode 100644 index 00000000000..4b0c57fb192 --- /dev/null +++ b/libraries/npm-check-fork/package.json @@ -0,0 +1,34 @@ +{ + "name": "@rushstack/npm-check-fork", + "version": "0.1.4", + "description": "A fork of npm-check.", + "repository": { + "type": "git", + "url": "https://github.com/microsoft/rushstack.git", + "directory": "libraries/npm-check-fork" + }, + "homepage": "https://github.com/dylang/npm-check", + "main": "lib/index.js", + "typings": "lib/index.d.ts", + "license": "MIT", + "scripts": { + "build": "heft build --clean", + "test": "heft test --clean", + "_phase:build": "heft run --only build -- --clean", + "_phase:test": "heft run --only test -- --clean" + }, + "dependencies": { + "giturl": "^2.0.0", + "lodash": "~4.17.15", + "package-json": "^10.0.1", + "semver": "~7.5.4", + "throat": "^6.0.2" + }, + "devDependencies": { + "@rushstack/heft": "workspace:*", + "@types/lodash": "4.14.116", + "@types/semver": "7.5.0", + "local-node-rig": "workspace:*", + "eslint": "~9.37.0" + } +} diff --git a/libraries/npm-check-fork/src/BestGuessHomepage.ts b/libraries/npm-check-fork/src/BestGuessHomepage.ts new file mode 100644 index 00000000000..fd7a6380084 --- /dev/null +++ b/libraries/npm-check-fork/src/BestGuessHomepage.ts @@ -0,0 +1,23 @@ +/// + +import gitUrl from 'giturl'; + +import type { INpmCheckPackageVersion, INpmCheckRegistryData } from './interfaces/INpmCheckRegistry'; + +export default function bestGuessHomepage(data: INpmCheckRegistryData | undefined): string | false { + if (!data) { + return false; + } + const packageDataForLatest: INpmCheckPackageVersion = data.versions[data['dist-tags'].latest]; + + return packageDataForLatest + ? packageDataForLatest.homepage || + (packageDataForLatest.bugs && + packageDataForLatest.bugs.url && + gitUrl.parse(packageDataForLatest.bugs.url.trim())) || + (packageDataForLatest.repository && + packageDataForLatest.repository.url && + gitUrl.parse(packageDataForLatest.repository.url.trim())) || + false + : false; +} diff --git a/libraries/npm-check-fork/src/CreatePackageSummary.ts b/libraries/npm-check-fork/src/CreatePackageSummary.ts new file mode 100644 index 00000000000..5bdbf601037 --- /dev/null +++ b/libraries/npm-check-fork/src/CreatePackageSummary.ts @@ -0,0 +1,97 @@ +import { existsSync } from 'node:fs'; +import path from 'node:path'; + +import _ from 'lodash'; +import semver from 'semver'; + +import type { INpmCheckState, INpmCheckPackageJson } from './interfaces/INpmCheck.ts'; +import type { INpmCheckPackageSummary, INpmCheckVersionBumpType } from './interfaces/INpmCheckPackageSummary'; +import type { INpmRegistryInfo } from './interfaces/INpmCheckRegistry'; +import findModulePath from './FindModulePath'; +import getLatestFromRegistry from './GetLatestFromRegistry'; +import readPackageJson from './ReadPackageJson'; + +export default async function createPackageSummary( + moduleName: string, + state: INpmCheckState +): Promise { + const cwdPackageJson: INpmCheckPackageJson | undefined = state.cwdPackageJson; + + const modulePath: string = findModulePath(moduleName, state); + const packageIsInstalled: boolean = existsSync(modulePath); + const modulePackageJson: INpmCheckPackageJson = readPackageJson(path.join(modulePath, 'package.json')); + + // Ignore private packages + const isPrivate: boolean = Boolean(modulePackageJson.private); + if (isPrivate) { + return false; + } + + // Ignore packages that are using github or file urls + const packageJsonVersion: string | undefined = + cwdPackageJson?.dependencies[moduleName] || cwdPackageJson?.devDependencies[moduleName]; + if (packageJsonVersion && !semver.validRange(packageJsonVersion)) { + return false; + } + + return getLatestFromRegistry(moduleName).then((fromRegistry: INpmRegistryInfo) => { + const installedVersion: string | undefined = modulePackageJson.version; + const latest: string | undefined = + installedVersion && + fromRegistry.latest && + fromRegistry.next && + semver.gt(installedVersion, fromRegistry.latest) + ? fromRegistry.next + : fromRegistry.latest; + const versions: string[] = fromRegistry.versions || []; + let versionWanted: string | null = null; + if (packageJsonVersion) { + versionWanted = semver.maxSatisfying(versions, packageJsonVersion); + } + const versionToUse: string | undefined | null = installedVersion || versionWanted; + const usingNonSemver: boolean | '' | null = + latest !== undefined && semver.valid(latest) && semver.lt(latest, '1.0.0-pre'); + + let bump: INpmCheckVersionBumpType; + const bumpRaw: INpmCheckVersionBumpType = + semver.valid(latest) && + semver.valid(versionToUse) && + (usingNonSemver && versionToUse && latest + ? semver.diff(versionToUse, latest) + ? 'nonSemver' + : semver.diff(versionToUse, latest) + : versionToUse && latest + ? semver.diff(versionToUse, latest) + : undefined); + if (bumpRaw && bumpRaw !== null) { + bump = bumpRaw as INpmCheckVersionBumpType; + } else { + bump = undefined; + } + + return { + // info + moduleName: moduleName, + homepage: fromRegistry.homepage ?? '', + regError: new Error(fromRegistry.error), + pkgError: modulePackageJson.error, + + // versions + latest: latest ?? '', + installed: versionToUse === null ? '' : versionToUse, + notInstalled: !packageIsInstalled, + packageJson: packageJsonVersion ?? '', + + // meta + devDependency: _.has(cwdPackageJson?.devDependencies, moduleName), + mismatch: + packageJsonVersion !== undefined && + versionToUse !== null && + semver.validRange(packageJsonVersion) && + semver.valid(versionToUse) + ? !semver.satisfies(versionToUse, packageJsonVersion) + : false, + bump: bump + }; + }); +} diff --git a/libraries/npm-check-fork/src/FindModulePath.ts b/libraries/npm-check-fork/src/FindModulePath.ts new file mode 100644 index 00000000000..80aec8044d2 --- /dev/null +++ b/libraries/npm-check-fork/src/FindModulePath.ts @@ -0,0 +1,24 @@ +import { existsSync } from 'node:fs'; +import Module from 'node:module'; +import path from 'node:path'; + +import type { INpmCheckState } from './interfaces/INpmCheck.ts'; + +/** + * Searches the directory hierarchy to return the path to the requested node module. + * If the module can't be found, returns the initial (deepest) tried path. + */ +export default function findModulePath(moduleName: string, currentState: INpmCheckState): string { + const cwd: string = currentState.cwd; + + // Module._nodeModulePaths does not include some places the node module resolver searches, such as + // the global prefix or other special directories. This is desirable because if a module is missing + // in the project directory we want to be sure to report it as missing. + // We can't use require.resolve because it fails if the module doesn't have an entry point. + // @ts-ignore + const nodeModulesPaths: string[] = Module._nodeModulePaths(cwd); + const possibleModulePaths: string[] = nodeModulesPaths.map((x) => path.join(x, moduleName)); + const modulePath: string | undefined = possibleModulePaths.find((p) => existsSync(p)); + // if no existing path was found, return the first tried path anyway + return modulePath || path.join(cwd, moduleName); +} diff --git a/libraries/npm-check-fork/src/GetLatestFromRegistry.ts b/libraries/npm-check-fork/src/GetLatestFromRegistry.ts new file mode 100644 index 00000000000..d7dd2e97bf2 --- /dev/null +++ b/libraries/npm-check-fork/src/GetLatestFromRegistry.ts @@ -0,0 +1,45 @@ +import os from 'node:os'; + +import _ from 'lodash'; +import semver from 'semver'; +import packageJson from 'package-json'; +import throat from 'throat'; + +import bestGuessHomepage from './BestGuessHomepage'; +import type { INpmRegistryInfo } from './interfaces/INpmCheckRegistry'; + +const cpuCount: number = os.cpus().length; + +export default async function getNpmInfo(packageName: string): Promise { + const limit: () => Promise = throat(cpuCount, () => + packageJson(packageName, { fullMetadata: true, allVersions: true }) + ); + return limit() + .then((rawData: packageJson.FullMetadata) => { + const CRAZY_HIGH_SEMVER: string = '8000.0.0'; + const sortedVersions: string[] = _(rawData.versions) + .keys() + .remove(_.partial(semver.gt, CRAZY_HIGH_SEMVER)) + .sort(semver.compare) + .valueOf(); + + const latest: string = rawData['dist-tags'].latest; + const next: string = rawData['dist-tags'].next; + const latestStableRelease: string | undefined = semver.satisfies(latest, '*') + ? latest + : semver.maxSatisfying(sortedVersions, '*') || ''; + + return { + latest: latestStableRelease, + next: next, + versions: sortedVersions, + homepage: bestGuessHomepage(rawData) || '' + }; + }) + .catch((error) => { + const errorMessage: string = `Registry error ${error.message}`; + return { + error: errorMessage + }; + }); +} diff --git a/libraries/npm-check-fork/src/NpmCheck.ts b/libraries/npm-check-fork/src/NpmCheck.ts new file mode 100644 index 00000000000..aea2339a4c9 --- /dev/null +++ b/libraries/npm-check-fork/src/NpmCheck.ts @@ -0,0 +1,34 @@ +import _ from 'lodash'; + +import type { INpmCheckPackageJson, INpmCheckState } from './interfaces/INpmCheck.ts'; +import type { INpmCheckPackageSummary } from './interfaces/INpmCheckPackageSummary'; +import createPackageSummary from './CreatePackageSummary'; +import initializeState from './NpmCheckState'; + +export default async function NpmCheck(initialOptions?: INpmCheckState): Promise { + const state: INpmCheckState = await initializeState(initialOptions); + const cwdPackageJson: INpmCheckPackageJson | undefined = state.cwdPackageJson; + const allDependencies: Record | undefined = getDependencies(cwdPackageJson); + + let packages: INpmCheckPackageSummary[] = []; + if (allDependencies) { + const packageSummaryPromises: Promise[] = Object.keys( + allDependencies + ).map((moduleName: string) => createPackageSummary(moduleName, state)); + packages = await Promise.all(packageSummaryPromises).then( + (results: (INpmCheckPackageSummary | false)[]) => { + return results.filter((pkg): pkg is INpmCheckPackageSummary => pkg !== false); + } + ); + } + + return { ...state, packages }; +} + +function getDependencies(pkg: INpmCheckPackageJson | undefined): Record | undefined { + if (!pkg) { + return undefined; + } + + return _.extend(pkg.dependencies, pkg.devDependencies); +} diff --git a/libraries/npm-check-fork/src/NpmCheckState.ts b/libraries/npm-check-fork/src/NpmCheckState.ts new file mode 100644 index 00000000000..124a5b2f310 --- /dev/null +++ b/libraries/npm-check-fork/src/NpmCheckState.ts @@ -0,0 +1,27 @@ +import path from 'node:path'; + +import _ from 'lodash'; + +import { + DefaultNpmCheckOptions, + type INpmCheckPackageJson, + type INpmCheckState +} from './interfaces/INpmCheck'; +import readPackageJson from './ReadPackageJson'; + +export default async function initializeState(initialOptions?: INpmCheckState): Promise { + const state: INpmCheckState = _.extend(DefaultNpmCheckOptions, initialOptions); + + if (state.cwd) { + const cwd: string = path.resolve(state.cwd); + const pkg: INpmCheckPackageJson = readPackageJson(path.join(cwd, 'package.json')); + state.cwdPackageJson = pkg; + state.cwd = cwd; + } + + if (state.cwdPackageJson?.error) { + return Promise.reject(state.cwdPackageJson.error); + } + + return Promise.resolve(state); +} diff --git a/libraries/npm-check-fork/src/ReadPackageJson.ts b/libraries/npm-check-fork/src/ReadPackageJson.ts new file mode 100644 index 00000000000..b8166d486ca --- /dev/null +++ b/libraries/npm-check-fork/src/ReadPackageJson.ts @@ -0,0 +1,18 @@ +import _ from 'lodash'; + +import type { INpmCheckPackageJson } from './interfaces/INpmCheck.ts'; + +export default function readPackageJson(filename: string): INpmCheckPackageJson { + let pkg: INpmCheckPackageJson | undefined = undefined; + let error: Error | undefined = undefined; + try { + pkg = require(filename); + } catch (e: unknown) { + if (e && typeof e === 'object' && 'code' in e && e.code === 'MODULE_NOT_FOUND') { + error = new Error(`A package.json was not found at ${filename}`); + } else { + error = new Error(`A package.json was found at ${filename}, but it is not valid.`); + } + } + return _.extend({ devDependencies: {}, dependencies: {}, error: error }, pkg); +} diff --git a/libraries/npm-check-fork/src/index.ts b/libraries/npm-check-fork/src/index.ts new file mode 100644 index 00000000000..43444bb3484 --- /dev/null +++ b/libraries/npm-check-fork/src/index.ts @@ -0,0 +1,3 @@ +export { default as NpmCheck } from './NpmCheck'; +export type { INpmCheckPackageSummary } from './interfaces/INpmCheckPackageSummary'; +export type { INpmCheckState } from './interfaces/INpmCheck'; diff --git a/libraries/npm-check-fork/src/interfaces/INpmCheck.ts b/libraries/npm-check-fork/src/interfaces/INpmCheck.ts new file mode 100644 index 00000000000..77f2d2172f7 --- /dev/null +++ b/libraries/npm-check-fork/src/interfaces/INpmCheck.ts @@ -0,0 +1,24 @@ +import type { INpmCheckPackageSummary } from './INpmCheckPackageSummary'; + +export interface INpmCheckPackageJson { + name?: string; + version?: string; + devDependencies: Record; + dependencies: Record; + error?: Error; + scripts?: Record; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [key: string]: any; +} + +export interface INpmCheckState { + cwd: string; + cwdPackageJson?: INpmCheckPackageJson; + packages?: INpmCheckPackageSummary[]; +} + +export const DefaultNpmCheckOptions: INpmCheckState = { + cwd: process.cwd(), + cwdPackageJson: { devDependencies: {}, dependencies: {} }, + packages: undefined +}; diff --git a/libraries/npm-check-fork/src/interfaces/INpmCheckPackageSummary.ts b/libraries/npm-check-fork/src/interfaces/INpmCheckPackageSummary.ts new file mode 100644 index 00000000000..21d2aed3bd2 --- /dev/null +++ b/libraries/npm-check-fork/src/interfaces/INpmCheckPackageSummary.ts @@ -0,0 +1,28 @@ +export type INpmCheckVersionBumpType = + | '' + | 'build' + | 'major' + | 'premajor' + | 'minor' + | 'preminor' + | 'patch' + | 'prepatch' + | 'prerelease' + | 'nonSemver' + | undefined + // eslint-disable-next-line @rushstack/no-new-null + | null; + +export interface INpmCheckPackageSummary { + moduleName: string; // name of the module. + homepage: string; // url to the home page. + regError?: Error; // error communicating with the registry + pkgError?: Error; // error reading the package.json + latest: string; // latest according to the registry. + installed: string; // version installed + notInstalled: boolean; // Is it installed? + packageJson: string; // Version or range requested in the parent package.json. + devDependency: boolean; // Is this a devDependency? + mismatch: boolean; // Does the version installed not match the range in package.json? + bump?: INpmCheckVersionBumpType; // What kind of bump is required to get the latest +} diff --git a/libraries/npm-check-fork/src/interfaces/INpmCheckRegistry.ts b/libraries/npm-check-fork/src/interfaces/INpmCheckRegistry.ts new file mode 100644 index 00000000000..63f4e63e0dc --- /dev/null +++ b/libraries/npm-check-fork/src/interfaces/INpmCheckRegistry.ts @@ -0,0 +1,23 @@ +export interface INpmRegistryInfo { + latest?: string; + next?: string; + versions?: string[]; + homepage?: string; + error?: string; +} + +interface INpmCheckRegistryInfoBugs { + url?: string; +} +interface INpmCheckRepository { + url?: string; +} +export interface INpmCheckPackageVersion { + homepage?: string; + bugs?: INpmCheckRegistryInfoBugs; + repository?: INpmCheckRepository; +} +export interface INpmCheckRegistryData { + versions: Record; + ['dist-tags']: { latest: string }; +} diff --git a/libraries/npm-check-fork/src/tests/BestGuessHomepage.test.ts b/libraries/npm-check-fork/src/tests/BestGuessHomepage.test.ts new file mode 100644 index 00000000000..e8499b92ce2 --- /dev/null +++ b/libraries/npm-check-fork/src/tests/BestGuessHomepage.test.ts @@ -0,0 +1,57 @@ +// Mock gitUrl.parse +jest.mock('giturl', () => ({ parse: (url: string) => url })); + +import bestGuessHomepage from '../BestGuessHomepage'; +import type { INpmCheckRegistryData } from '../interfaces/INpmCheckRegistry'; + +describe('bestGuessHomepage', () => { + it('returns false if data is undefined', () => { + expect(bestGuessHomepage(undefined)).toBe(false); + }); + + it('returns homepage if present', () => { + const data: INpmCheckRegistryData = { + versions: { + latest: { + homepage: 'https://homepage.com' + } + }, + 'dist-tags': { latest: 'latest' } + }; + expect(bestGuessHomepage(data)).toBe('https://homepage.com'); + }); + + it('returns bugs.url if homepage is missing', () => { + const data: INpmCheckRegistryData = { + versions: { + latest: { + bugs: { url: 'https://bugs.com' } + } + }, + 'dist-tags': { latest: 'latest' } + }; + expect(bestGuessHomepage(data)).toBe('https://bugs.com'); + }); + + it('returns repository.url if homepage and bugs.url are missing', () => { + const data: INpmCheckRegistryData = { + versions: { + latest: { + repository: { url: 'https://repo.com' } + } + }, + 'dist-tags': { latest: 'latest' } + }; + expect(bestGuessHomepage(data)).toBe('https://repo.com'); + }); + + it('returns false if no homepage, bugs.url, or repository.url', () => { + const data: INpmCheckRegistryData = { + versions: { + latest: {} + }, + 'dist-tags': { latest: 'latest' } + }; + expect(bestGuessHomepage(data)).toBe(false); + }); +}); diff --git a/libraries/npm-check-fork/src/tests/CreatePackageSummary.test.ts b/libraries/npm-check-fork/src/tests/CreatePackageSummary.test.ts new file mode 100644 index 00000000000..9dce1cc11e1 --- /dev/null +++ b/libraries/npm-check-fork/src/tests/CreatePackageSummary.test.ts @@ -0,0 +1,79 @@ +jest.mock('../GetLatestFromRegistry'); +jest.mock('../ReadPackageJson'); +jest.mock('../FindModulePath'); + +import createPackageSummary from '../CreatePackageSummary'; +import getLatestFromRegistry from '../GetLatestFromRegistry'; +import readPackageJson from '../ReadPackageJson'; +import findModulePath from '../FindModulePath'; +import type { INpmCheckState, INpmCheckPackageJson } from '../interfaces/INpmCheck'; +import type { INpmRegistryInfo } from '../interfaces/INpmCheckRegistry'; +import type { INpmCheckPackageSummary } from '../interfaces/INpmCheckPackageSummary'; + +const mockGetLatestFromRegistry = getLatestFromRegistry as jest.MockedFunction; +const mockReadPackageJson = readPackageJson as jest.MockedFunction; +const mockFindModulePath = findModulePath as jest.MockedFunction; + +describe('createPackageSummary', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + it('returns false for private package', async () => { + mockFindModulePath.mockReturnValue('/mock/path/private-pkg'); + mockReadPackageJson.mockReturnValue({ + dependencies: {}, + devDependencies: {}, + private: true + } as INpmCheckPackageJson); + const state: INpmCheckState = { + cwd: process.cwd(), + cwdPackageJson: { dependencies: {}, devDependencies: {} } + }; + const result: INpmCheckPackageSummary | boolean = await createPackageSummary('private-pkg', state); + expect(result).toBe(false); + }); + + it('returns false for invalid semver range', async () => { + mockFindModulePath.mockReturnValue('/mock/path'); + mockReadPackageJson.mockReturnValue({ + dependencies: {}, + devDependencies: {} + } as INpmCheckPackageJson); + const state: INpmCheckState = { + cwd: process.cwd(), + cwdPackageJson: { + dependencies: { 'bad-pkg': 'github:foo/bar' }, + devDependencies: {} + } + }; + const result: INpmCheckPackageSummary | boolean = await createPackageSummary('bad-pkg', state); + expect(result).toBe(false); + }); + + it('returns summary for valid package', async () => { + mockFindModulePath.mockReturnValue('/mock/path'); + mockReadPackageJson.mockReturnValue({ + dependencies: {}, + devDependencies: {} + } as INpmCheckPackageJson); + mockGetLatestFromRegistry.mockResolvedValue({ + latest: '2.0.0', + next: '3.0.0', + versions: ['1.0.0', '2.0.0', '3.0.0'], + homepage: 'https://homepage.com' + } as INpmRegistryInfo); + const state: INpmCheckState = { + cwd: process.cwd(), + cwdPackageJson: { dependencies: { 'good-pkg': '1.0.0' }, devDependencies: {} }, + unusedDependencies: ['good-pkg'], + missingFromPackageJson: {} + } as INpmCheckState; + const result: INpmCheckPackageSummary | boolean = await createPackageSummary('good-pkg', state); + expect(result).toBeTruthy(); + expect(result).toHaveProperty('moduleName', 'good-pkg'); + expect(result).toHaveProperty('homepage', 'https://homepage.com'); + expect(result).toHaveProperty('latest', '2.0.0'); + expect(result).toHaveProperty('installed', '1.0.0'); + }); +}); diff --git a/libraries/npm-check-fork/src/tests/FindModulePath.test.ts b/libraries/npm-check-fork/src/tests/FindModulePath.test.ts new file mode 100644 index 00000000000..bf9ddeca78a --- /dev/null +++ b/libraries/npm-check-fork/src/tests/FindModulePath.test.ts @@ -0,0 +1,34 @@ +jest.mock('path', () => ({ + join: jest.fn((...args) => args.join('/')) + // Add other path methods as needed +})); + +import findModulePath from '../FindModulePath'; +import type { INpmCheckState } from '../interfaces/INpmCheck'; +import path from 'node:path'; + +const Module = require('node:module'); + +describe('findModulePath', () => { + beforeAll(() => { + jest + .spyOn(Module, '_nodeModulePaths') + .mockImplementation(() => ['/mock/path/node_modules', '/another/mock/path/node_modules']); + }); + + afterAll(() => { + jest.restoreAllMocks(); + }); + + it('returns found path', () => { + const state: INpmCheckState = { cwd: '/test/cwd', global: false } as INpmCheckState; + const result = findModulePath('my-module', state); + expect(result).toBe(path.join('/test/cwd', 'my-module')); + }); + + it('returns first tried path', () => { + const state: INpmCheckState = { cwd: '/test/cwd', global: false } as INpmCheckState; + const result = findModulePath('missing-module', state); + expect(result).toBe(path.join('/test/cwd', 'missing-module')); + }); +}); diff --git a/libraries/npm-check-fork/src/tests/GetLatestFromRegistry.test.ts b/libraries/npm-check-fork/src/tests/GetLatestFromRegistry.test.ts new file mode 100644 index 00000000000..9490c34b926 --- /dev/null +++ b/libraries/npm-check-fork/src/tests/GetLatestFromRegistry.test.ts @@ -0,0 +1,51 @@ +jest.mock('package-json'); + +import getNpmInfo from '../GetLatestFromRegistry'; +import packageJson from 'package-json'; +import type { INpmRegistryInfo } from '../interfaces/INpmCheckRegistry'; + +const mockPackageJson = packageJson as jest.MockedFunction; + +describe('getNpmInfo', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('returns registry info with homepage', async () => { + mockPackageJson.mockResolvedValue({ + versions: { + '1.0.0': { + homepage: 'https://homepage.com' + }, + '2.0.0': { + bugs: { url: 'https://bugs.com' } + } + }, + 'dist-tags': { latest: '1.0.0', next: '2.0.0' } + } as unknown as packageJson.FullMetadata); + const result: INpmRegistryInfo = await getNpmInfo('test-package'); + expect(result).toHaveProperty('latest', '1.0.0'); + expect(result).toHaveProperty('next', '2.0.0'); + expect(result).toHaveProperty('versions', ['1.0.0', '2.0.0']); + expect(result).toHaveProperty('homepage', 'https://homepage.com'); + }); + + it('returns error if packageJson throws', async () => { + mockPackageJson.mockRejectedValue(new Error('Registry down')); + const result: INpmRegistryInfo = await getNpmInfo('test-package'); + expect(result).toHaveProperty('error'); + expect(result.error).toBe('Registry error Registry down'); + }); + + it('returns "" homepage if not present', async () => { + mockPackageJson.mockResolvedValue({ + versions: { + '1.0.0': {}, + '2.0.0': {} + }, + 'dist-tags': { latest: '1.0.0', next: '2.0.0' } + } as unknown as packageJson.FullMetadata); + const result: INpmRegistryInfo = await getNpmInfo('test-package'); + expect(result).toHaveProperty('homepage', ''); + }); +}); diff --git a/libraries/npm-check-fork/src/tests/NpmCheck.test.ts b/libraries/npm-check-fork/src/tests/NpmCheck.test.ts new file mode 100644 index 00000000000..6fea389f076 --- /dev/null +++ b/libraries/npm-check-fork/src/tests/NpmCheck.test.ts @@ -0,0 +1,36 @@ +jest.mock('../CreatePackageSummary', () => ({ + __esModule: true, + default: jest.fn(async () => ({})) +})); + +import createPackageSummary from '../CreatePackageSummary'; +const mockCreatePackageSummary = createPackageSummary as jest.MockedFunction; + +import type { INpmCheckState } from '../interfaces/INpmCheck'; +import NpmCheck from '../NpmCheck'; + +describe('NpmCheck', () => { + it('should mimic rush initial options', async () => { + mockCreatePackageSummary.mockImplementation(async (moduleName) => ({ + moduleName, + homepage: '', + latest: '', + installed: '', + notInstalled: true, + packageWanted: '', + packageJson: '', + notInPackageJson: undefined, + devDependency: false, + peerDependency: false, + mismatch: false, + bump: undefined + })); + const result: INpmCheckState = await NpmCheck({ + cwd: process.cwd() + }); + expect(result.packages).toBeDefined(); + if (result.packages && result.packages.length > 0) { + expect(result.packages[0]).toHaveProperty('moduleName'); + } + }); +}); diff --git a/libraries/npm-check-fork/src/tests/NpmCheckState.test.ts b/libraries/npm-check-fork/src/tests/NpmCheckState.test.ts new file mode 100644 index 00000000000..68ad0d0ff3f --- /dev/null +++ b/libraries/npm-check-fork/src/tests/NpmCheckState.test.ts @@ -0,0 +1,12 @@ +import type { INpmCheckState } from '../interfaces/INpmCheck'; +import initializeState from '../NpmCheckState'; + +describe('NpmCheckState', () => { + it('should create with default options', async () => { + const state: INpmCheckState = await initializeState(); + expect(state).toBeDefined(); + expect(state.cwd).toBe(process.cwd()); + expect(state.cwdPackageJson).toHaveProperty('name'); + expect(state.cwdPackageJson).toHaveProperty('version'); + }); +}); diff --git a/libraries/npm-check-fork/src/tests/ReadPackageJson.test.ts b/libraries/npm-check-fork/src/tests/ReadPackageJson.test.ts new file mode 100644 index 00000000000..28e75e35cdd --- /dev/null +++ b/libraries/npm-check-fork/src/tests/ReadPackageJson.test.ts @@ -0,0 +1,14 @@ +import path from 'node:path'; + +import readPackageJson from '../ReadPackageJson'; +import type { INpmCheckPackageJson } from '../interfaces/INpmCheck'; + +describe('readPackageJson', () => { + it('should return valid packageJson if it exists', async () => { + const fileName: string = path.join(process.cwd(), 'package.json'); + const result: INpmCheckPackageJson = await readPackageJson(fileName); + + expect(result).toBeDefined(); + expect(result).toHaveProperty('name'); + }); +}); diff --git a/libraries/npm-check-fork/src/types/giturl-typings.d.ts b/libraries/npm-check-fork/src/types/giturl-typings.d.ts new file mode 100644 index 00000000000..3202ff78a60 --- /dev/null +++ b/libraries/npm-check-fork/src/types/giturl-typings.d.ts @@ -0,0 +1,4 @@ +declare module 'giturl' { + function parse(url: string): string; + export { parse }; +} diff --git a/libraries/npm-check-fork/tsconfig.json b/libraries/npm-check-fork/tsconfig.json new file mode 100644 index 00000000000..f9b633dca52 --- /dev/null +++ b/libraries/npm-check-fork/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "./node_modules/local-node-rig/profiles/default/tsconfig-base.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": false, + "outDir": "./lib" + } +} diff --git a/libraries/operation-graph/CHANGELOG.json b/libraries/operation-graph/CHANGELOG.json index 3c6528384b1..fe1f32199ac 100644 --- a/libraries/operation-graph/CHANGELOG.json +++ b/libraries/operation-graph/CHANGELOG.json @@ -1,6 +1,36 @@ { "name": "@rushstack/operation-graph", "entries": [ + { + "version": "0.5.3", + "tag": "@rushstack/operation-graph_v0.5.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + } + ] + } + }, + { + "version": "0.5.2", + "tag": "@rushstack/operation-graph_v0.5.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + } + ] + } + }, { "version": "0.5.1", "tag": "@rushstack/operation-graph_v0.5.1", diff --git a/libraries/operation-graph/CHANGELOG.md b/libraries/operation-graph/CHANGELOG.md index 2de3a39acbb..5fd41b25254 100644 --- a/libraries/operation-graph/CHANGELOG.md +++ b/libraries/operation-graph/CHANGELOG.md @@ -1,6 +1,16 @@ # Change Log - @rushstack/operation-graph -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Fri, 24 Oct 2025 00:13:38 GMT and should not be manually modified. + +## 0.5.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.5.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.5.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/libraries/operation-graph/package.json b/libraries/operation-graph/package.json index eba8d459c93..38187f38b27 100644 --- a/libraries/operation-graph/package.json +++ b/libraries/operation-graph/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/operation-graph", - "version": "0.5.1", + "version": "0.5.3", "description": "Library for managing and executing operations in a directed acyclic graph.", "main": "lib/index.js", "typings": "dist/operation-graph.d.ts", @@ -20,7 +20,7 @@ "@rushstack/terminal": "workspace:*" }, "devDependencies": { - "@rushstack/heft": "1.1.0", + "@rushstack/heft": "1.1.4", "decoupled-local-node-rig": "workspace:*", "eslint": "~9.37.0" }, diff --git a/libraries/package-deps-hash/CHANGELOG.json b/libraries/package-deps-hash/CHANGELOG.json index a7da81e8bda..66969290019 100644 --- a/libraries/package-deps-hash/CHANGELOG.json +++ b/libraries/package-deps-hash/CHANGELOG.json @@ -1,6 +1,60 @@ { "name": "@rushstack/package-deps-hash", "entries": [ + { + "version": "4.5.5", + "tag": "@rushstack/package-deps-hash_v4.5.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "4.5.4", + "tag": "@rushstack/package-deps-hash_v4.5.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "4.5.3", + "tag": "@rushstack/package-deps-hash_v4.5.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "4.5.2", + "tag": "@rushstack/package-deps-hash_v4.5.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "4.5.1", "tag": "@rushstack/package-deps-hash_v4.5.1", diff --git a/libraries/package-deps-hash/CHANGELOG.md b/libraries/package-deps-hash/CHANGELOG.md index a341d17849b..fd1a51b1007 100644 --- a/libraries/package-deps-hash/CHANGELOG.md +++ b/libraries/package-deps-hash/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/package-deps-hash -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 4.5.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 4.5.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 4.5.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 4.5.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 4.5.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/libraries/package-deps-hash/package.json b/libraries/package-deps-hash/package.json index 899b310e291..8b29f01eaec 100644 --- a/libraries/package-deps-hash/package.json +++ b/libraries/package-deps-hash/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/package-deps-hash", - "version": "4.5.1", + "version": "4.5.5", "description": "", "main": "lib/index.js", "typings": "dist/package-deps-hash.d.ts", diff --git a/libraries/package-extractor/CHANGELOG.json b/libraries/package-extractor/CHANGELOG.json index 72c385becd8..c65b0da529a 100644 --- a/libraries/package-extractor/CHANGELOG.json +++ b/libraries/package-extractor/CHANGELOG.json @@ -1,6 +1,108 @@ { "name": "@rushstack/package-extractor", "entries": [ + { + "version": "0.11.6", + "tag": "@rushstack/package-extractor_v0.11.6", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/webpack-preserve-dynamic-require-plugin\" to `0.11.116`" + } + ] + } + }, + { + "version": "0.11.5", + "tag": "@rushstack/package-extractor_v0.11.5", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/webpack-preserve-dynamic-require-plugin\" to `0.11.115`" + } + ] + } + }, + { + "version": "0.11.4", + "tag": "@rushstack/package-extractor_v0.11.4", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/webpack-preserve-dynamic-require-plugin\" to `0.11.114`" + } + ] + } + }, + { + "version": "0.11.3", + "tag": "@rushstack/package-extractor_v0.11.3", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/ts-command-line\" to `5.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/webpack-preserve-dynamic-require-plugin\" to `0.11.113`" + } + ] + } + }, + { + "version": "0.11.2", + "tag": "@rushstack/package-extractor_v0.11.2", + "date": "Fri, 17 Oct 2025 23:22:33 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.1`" + } + ] + } + }, { "version": "0.11.1", "tag": "@rushstack/package-extractor_v0.11.1", diff --git a/libraries/package-extractor/CHANGELOG.md b/libraries/package-extractor/CHANGELOG.md index a57decccc67..e2b2c3e7776 100644 --- a/libraries/package-extractor/CHANGELOG.md +++ b/libraries/package-extractor/CHANGELOG.md @@ -1,6 +1,31 @@ # Change Log - @rushstack/package-extractor -This log was last generated on Wed, 08 Oct 2025 00:13:28 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.11.6 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.11.5 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.11.4 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.11.3 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ + +## 0.11.2 +Fri, 17 Oct 2025 23:22:33 GMT + +_Version update only_ ## 0.11.1 Wed, 08 Oct 2025 00:13:28 GMT diff --git a/libraries/package-extractor/package.json b/libraries/package-extractor/package.json index b52c9c5b537..d7bbc56b05e 100644 --- a/libraries/package-extractor/package.json +++ b/libraries/package-extractor/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/package-extractor", - "version": "0.11.1", + "version": "0.11.6", "description": "A library for bundling selected files and dependencies into a deployable package.", "main": "lib/index.js", "typings": "dist/package-extractor.d.ts", diff --git a/libraries/problem-matcher/package.json b/libraries/problem-matcher/package.json index b552686cadd..c9e8d5d83b8 100644 --- a/libraries/problem-matcher/package.json +++ b/libraries/problem-matcher/package.json @@ -16,7 +16,7 @@ "_phase:test": "heft run --only test -- --clean" }, "devDependencies": { - "@rushstack/heft": "1.1.0", + "@rushstack/heft": "1.1.4", "decoupled-local-node-rig": "workspace:*", "eslint": "~9.37.0" }, diff --git a/libraries/rig-package/config/heft.json b/libraries/rig-package/config/heft.json new file mode 100644 index 00000000000..2fc245813e5 --- /dev/null +++ b/libraries/rig-package/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + + "extends": "decoupled-local-node-rig/profiles/default/config/heft.json", + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/rig-package"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/libraries/rig-package/package.json b/libraries/rig-package/package.json index 17e30da0a28..d85a7533344 100644 --- a/libraries/rig-package/package.json +++ b/libraries/rig-package/package.json @@ -20,7 +20,7 @@ "strip-json-comments": "~3.1.1" }, "devDependencies": { - "@rushstack/heft": "1.1.0", + "@rushstack/heft": "1.1.4", "@types/resolve": "1.20.2", "ajv": "~8.13.0", "decoupled-local-node-rig": "workspace:*", diff --git a/libraries/rush-lib/config/heft.json b/libraries/rush-lib/config/heft.json index cb203be79e0..e260d7e35e9 100644 --- a/libraries/rush-lib/config/heft.json +++ b/libraries/rush-lib/config/heft.json @@ -63,6 +63,23 @@ "taskPlugin": { "pluginPackage": "@rushstack/heft-webpack5-plugin" } + }, + + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/rush/v5"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } } } } diff --git a/libraries/rush-lib/package.json b/libraries/rush-lib/package.json index a43efe5232c..99563d59046 100644 --- a/libraries/rush-lib/package.json +++ b/libraries/rush-lib/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/rush-lib", - "version": "5.160.1", + "version": "5.162.0", "description": "A library for writing scripts that interact with the Rush tool", "repository": { "type": "git", @@ -33,9 +33,11 @@ "@pnpm/dependency-path-lockfile-pre-v10": "npm:@pnpm/dependency-path@~5.1.7", "@pnpm/dependency-path": "~1000.0.9", "@pnpm/link-bins": "~5.3.7", + "@rushstack/credential-cache": "workspace:*", "@rushstack/heft-config-file": "workspace:*", "@rushstack/lookup-by-path": "workspace:*", "@rushstack/node-core-library": "workspace:*", + "@rushstack/npm-check-fork": "workspace:*", "@rushstack/package-deps-hash": "workspace:*", "@rushstack/package-extractor": "workspace:*", "@rushstack/rig-package": "workspace:*", @@ -55,7 +57,6 @@ "ignore": "~5.1.6", "inquirer": "~8.2.7", "js-yaml": "~4.1.0", - "npm-check": "~6.0.1", "npm-package-arg": "~6.1.0", "object-hash": "3.0.0", "pnpm-sync-lib": "0.3.2", diff --git a/libraries/rush-lib/src/api/FlagFile.ts b/libraries/rush-lib/src/api/FlagFile.ts index 13466552817..535029943c9 100644 --- a/libraries/rush-lib/src/api/FlagFile.ts +++ b/libraries/rush-lib/src/api/FlagFile.ts @@ -1,9 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -import { FileSystem, JsonFile, type JsonObject } from '@rushstack/node-core-library'; - -import { objectsAreDeepEqual } from '../utilities/objectUtilities'; +import { FileSystem, JsonFile, type JsonObject, Objects } from '@rushstack/node-core-library'; /** * A base class for flag file. @@ -38,7 +36,7 @@ export class FlagFile { try { oldState = await JsonFile.loadAsync(this.path); const newState: JsonObject = this._state; - return objectsAreDeepEqual(oldState, newState); + return Objects.areDeepEqual(oldState, newState); } catch (err) { return false; } diff --git a/libraries/rush-lib/src/api/LastInstallFlag.ts b/libraries/rush-lib/src/api/LastInstallFlag.ts index a20688cca32..ab854ac6ef7 100644 --- a/libraries/rush-lib/src/api/LastInstallFlag.ts +++ b/libraries/rush-lib/src/api/LastInstallFlag.ts @@ -3,7 +3,7 @@ import { pnpmSyncGetJsonVersion } from 'pnpm-sync-lib'; -import { JsonFile, type JsonObject, Path, type IPackageJson } from '@rushstack/node-core-library'; +import { JsonFile, type JsonObject, Path, type IPackageJson, Objects } from '@rushstack/node-core-library'; import type { PackageManagerName } from './packageManager/PackageManager'; import type { RushConfiguration } from './RushConfiguration'; @@ -124,7 +124,7 @@ export class LastInstallFlag extends FlagFile> { } } - if (!objectUtilities.objectsAreDeepEqual(oldState, newState)) { + if (!Objects.areDeepEqual(oldState, newState)) { if (checkValidAndReportStoreIssues) { const pkgManager: PackageManagerName = newState.packageManager as PackageManagerName; if (pkgManager === 'pnpm') { diff --git a/libraries/rush-lib/src/api/RushGlobalFolder.ts b/libraries/rush-lib/src/api/RushGlobalFolder.ts index e1081f2d4f7..18f77f7f938 100644 --- a/libraries/rush-lib/src/api/RushGlobalFolder.ts +++ b/libraries/rush-lib/src/api/RushGlobalFolder.ts @@ -3,7 +3,8 @@ import * as path from 'node:path'; -import { Utilities } from '../utilities/Utilities'; +import { User } from '@rushstack/node-core-library'; + import { EnvironmentConfiguration } from './EnvironmentConfiguration'; /** @@ -45,7 +46,7 @@ export class RushGlobalFolder { if (rushGlobalFolderOverride !== undefined) { this.path = rushGlobalFolderOverride; } else { - this.path = path.join(Utilities.getHomeFolder(), '.rush'); + this.path = path.join(User.getHomeFolder(), '.rush'); } const normalizedNodeVersion: string = process.version.match(/^[a-z0-9\-\.]+$/i) diff --git a/libraries/rush-lib/src/api/RushProjectConfiguration.ts b/libraries/rush-lib/src/api/RushProjectConfiguration.ts index 6a1bb5ad3a1..7dd28c3c789 100644 --- a/libraries/rush-lib/src/api/RushProjectConfiguration.ts +++ b/libraries/rush-lib/src/api/RushProjectConfiguration.ts @@ -11,7 +11,7 @@ import { RushConstants } from '../logic/RushConstants'; import type { IPhase } from './CommandLineConfiguration'; import { OverlappingPathAnalyzer } from '../utilities/OverlappingPathAnalyzer'; import schemaJson from '../schemas/rush-project.schema.json'; -import anythingSchemaJson from '../schemas/rush-project.schema.json'; +import anythingSchemaJson from '../schemas/anything.schema.json'; import { HotlinkManager } from '../utilities/HotlinkManager'; import type { RushConfiguration } from './RushConfiguration'; @@ -146,6 +146,14 @@ export interface IOperationSettings { * If true, this operation will never be skipped by the `--changed-projects-only` flag. */ ignoreChangedProjectsOnlyFlag?: boolean; + + /** + * An optional list of custom command-line parameter names (their `parameterLongName` values from + * command-line.json) that should be ignored when invoking the command for this operation. + * This allows a project to opt out of parameters that don't affect its operation, preventing + * unnecessary cache invalidation for this operation and its consumers. + */ + parameterNamesToIgnore?: string[]; } interface IOldRushProjectJson { @@ -333,6 +341,35 @@ export class RushProjectConfiguration { } } } + + // Validate that parameter names to ignore actually exist for this operation + if (operationSettings.parameterNamesToIgnore) { + // Build a set of valid parameter names for this phase + const validParameterNames: Set = new Set(); + for (const parameter of phase.associatedParameters) { + validParameterNames.add(parameter.longName); + } + + // Collect all invalid parameter names + const invalidParameterNames: string[] = []; + for (const parameterName of operationSettings.parameterNamesToIgnore) { + if (!validParameterNames.has(parameterName)) { + invalidParameterNames.push(parameterName); + } + } + + // Report all invalid parameters in a single message + if (invalidParameterNames.length > 0) { + terminal.writeErrorLine( + `The project "${project.packageName}" has a ` + + `"${RUSH_PROJECT_CONFIGURATION_FILE.projectRelativeFilePath}" configuration that specifies ` + + `invalid parameter(s) in "parameterNamesToIgnore" for operation "${operationName}": ` + + `${invalidParameterNames.join(', ')}. ` + + `Valid parameters for this operation are: ${Array.from(validParameterNames).sort().join(', ') || '(none)'}.` + ); + hasErrors = true; + } + } } } diff --git a/libraries/rush-lib/src/api/RushUserConfiguration.ts b/libraries/rush-lib/src/api/RushUserConfiguration.ts index 6b20ace19a3..cdf767363bb 100644 --- a/libraries/rush-lib/src/api/RushUserConfiguration.ts +++ b/libraries/rush-lib/src/api/RushUserConfiguration.ts @@ -3,9 +3,8 @@ import * as path from 'node:path'; -import { FileSystem, JsonFile, JsonSchema } from '@rushstack/node-core-library'; +import { FileSystem, JsonFile, JsonSchema, User } from '@rushstack/node-core-library'; -import { Utilities } from '../utilities/Utilities'; import { RushConstants } from '../logic/RushConstants'; import schemaJson from '../schemas/rush-user-settings.schema.json'; @@ -52,7 +51,7 @@ export class RushUserConfiguration { } public static getRushUserFolderPath(): string { - const homeFolderPath: string = Utilities.getHomeFolder(); + const homeFolderPath: string = User.getHomeFolder(); return `${homeFolderPath}/${RushConstants.rushUserConfigurationFolderName}`; } } diff --git a/libraries/rush-lib/src/api/test/RushConfiguration.test.ts b/libraries/rush-lib/src/api/test/RushConfiguration.test.ts index a70ebc19b35..f7513eb4a01 100644 --- a/libraries/rush-lib/src/api/test/RushConfiguration.test.ts +++ b/libraries/rush-lib/src/api/test/RushConfiguration.test.ts @@ -77,7 +77,7 @@ describe(RushConfiguration.name, () => { expect(rushConfiguration.projectFolderMinDepth).toEqual(1); expect(rushConfiguration.hotfixChangeEnabled).toEqual(true); - expect(rushConfiguration.projects).toHaveLength(3); + expect(rushConfiguration.projects).toHaveLength(5); // "approvedPackagesPolicy" feature const approvedPackagesPolicy: ApprovedPackagesPolicy = rushConfiguration.approvedPackagesPolicy; diff --git a/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts b/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts index e4bbc4971fd..f3dbbe02506 100644 --- a/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts +++ b/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts @@ -2,6 +2,7 @@ // See LICENSE in the project root for license information. import { StringBufferTerminalProvider, Terminal } from '@rushstack/terminal'; +import type { CommandLineParameter } from '@rushstack/ts-command-line'; import type { IPhase } from '../CommandLineConfiguration'; import type { RushConfigurationProject } from '../RushConfigurationProject'; @@ -57,7 +58,37 @@ function validateConfiguration(rushProjectConfiguration: RushProjectConfiguratio try { rushProjectConfiguration.validatePhaseConfiguration( Array.from(rushProjectConfiguration.operationSettingsByOperationName.keys()).map( - (phaseName) => ({ name: phaseName }) as IPhase + (phaseName) => ({ name: phaseName, associatedParameters: new Set() }) as IPhase + ), + terminal + ); + } finally { + expect(terminalProvider.getOutput()).toMatchSnapshot('validation: terminal output'); + expect(terminalProvider.getErrorOutput()).toMatchSnapshot('validation: terminal error'); + expect(terminalProvider.getWarningOutput()).toMatchSnapshot('validation: terminal warning'); + expect(terminalProvider.getVerboseOutput()).toMatchSnapshot('validation: terminal verbose'); + } + } +} + +function validateConfigurationWithParameters( + rushProjectConfiguration: RushProjectConfiguration | undefined, + parameterNames: string[] +): void { + const terminalProvider: StringBufferTerminalProvider = new StringBufferTerminalProvider(); + const terminal: Terminal = new Terminal(terminalProvider); + + if (rushProjectConfiguration) { + try { + // Create mock parameters with the specified names + const mockParameters = new Set( + parameterNames.map((name) => ({ longName: name }) as CommandLineParameter) + ); + + rushProjectConfiguration.validatePhaseConfiguration( + Array.from( + rushProjectConfiguration.operationSettingsByOperationName.keys(), + (phaseName) => ({ name: phaseName, associatedParameters: mockParameters }) as IPhase ), terminal ); @@ -100,6 +131,33 @@ describe(RushProjectConfiguration.name, () => { expect(() => validateConfiguration(rushProjectConfiguration)).toThrowError(); }); + + it('validates that parameters in parameterNamesToIgnore exist for the operation', async () => { + const rushProjectConfiguration: RushProjectConfiguration | undefined = + await loadProjectConfigurationAsync('test-project-e'); + + expect(() => validateConfiguration(rushProjectConfiguration)).toThrowError(); + }); + + it('validates nonexistent parameters when operation has valid parameters', async () => { + const rushProjectConfiguration: RushProjectConfiguration | undefined = + await loadProjectConfigurationAsync('test-project-f'); + + // Provide some valid parameters for the operation + expect(() => + validateConfigurationWithParameters(rushProjectConfiguration, ['--production', '--verbose']) + ).toThrowError(); + }); + + it('validates mix of existent and nonexistent parameters', async () => { + const rushProjectConfiguration: RushProjectConfiguration | undefined = + await loadProjectConfigurationAsync('test-project-g'); + + // Provide some valid parameters, test-project-g references both valid and invalid ones + expect(() => + validateConfigurationWithParameters(rushProjectConfiguration, ['--production', '--verbose']) + ).toThrowError(); + }); }); describe(RushProjectConfiguration.prototype.getCacheDisabledReason.name, () => { diff --git a/libraries/rush-lib/src/api/test/__snapshots__/RushProjectConfiguration.test.ts.snap b/libraries/rush-lib/src/api/test/__snapshots__/RushProjectConfiguration.test.ts.snap index a5ff1832598..2ebe9d5908a 100644 --- a/libraries/rush-lib/src/api/test/__snapshots__/RushProjectConfiguration.test.ts.snap +++ b/libraries/rush-lib/src/api/test/__snapshots__/RushProjectConfiguration.test.ts.snap @@ -71,3 +71,27 @@ exports[`RushProjectConfiguration operationSettingsByOperationName loads a rush- exports[`RushProjectConfiguration operationSettingsByOperationName loads a rush-project.json config that extends another config file: validation: terminal warning 1`] = `""`; exports[`RushProjectConfiguration operationSettingsByOperationName throws an error when loading a rush-project.json config that lists an operation twice 1`] = `"The operation \\"_phase:a\\" occurs multiple times in the \\"operationSettings\\" array in \\"/config/rush-project.json\\"."`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates mix of existent and nonexistent parameters: validation: terminal error 1`] = `"The project \\"test-project-g\\" has a \\"config/rush-project.json\\" configuration that specifies invalid parameter(s) in \\"parameterNamesToIgnore\\" for operation \\"_phase:build\\": --nonexistent-param. Valid parameters for this operation are: --production, --verbose.[n]"`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates mix of existent and nonexistent parameters: validation: terminal output 1`] = `""`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates mix of existent and nonexistent parameters: validation: terminal verbose 1`] = `""`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates mix of existent and nonexistent parameters: validation: terminal warning 1`] = `""`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates nonexistent parameters when operation has valid parameters: validation: terminal error 1`] = `"The project \\"test-project-f\\" has a \\"config/rush-project.json\\" configuration that specifies invalid parameter(s) in \\"parameterNamesToIgnore\\" for operation \\"_phase:build\\": --nonexistent-param, --another-nonexistent. Valid parameters for this operation are: --production, --verbose.[n]"`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates nonexistent parameters when operation has valid parameters: validation: terminal output 1`] = `""`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates nonexistent parameters when operation has valid parameters: validation: terminal verbose 1`] = `""`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates nonexistent parameters when operation has valid parameters: validation: terminal warning 1`] = `""`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates that parameters in parameterNamesToIgnore exist for the operation: validation: terminal error 1`] = `"The project \\"test-project-e\\" has a \\"config/rush-project.json\\" configuration that specifies invalid parameter(s) in \\"parameterNamesToIgnore\\" for operation \\"_phase:build\\": --invalid-parameter, --another-invalid, -malformed-parameter. Valid parameters for this operation are: (none).[n]"`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates that parameters in parameterNamesToIgnore exist for the operation: validation: terminal output 1`] = `""`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates that parameters in parameterNamesToIgnore exist for the operation: validation: terminal verbose 1`] = `""`; + +exports[`RushProjectConfiguration operationSettingsByOperationName validates that parameters in parameterNamesToIgnore exist for the operation: validation: terminal warning 1`] = `""`; diff --git a/libraries/rush-lib/src/api/test/jsonFiles/test-project-e/config/rush-project.json b/libraries/rush-lib/src/api/test/jsonFiles/test-project-e/config/rush-project.json new file mode 100644 index 00000000000..0dfe8b808e0 --- /dev/null +++ b/libraries/rush-lib/src/api/test/jsonFiles/test-project-e/config/rush-project.json @@ -0,0 +1,9 @@ +{ + "operationSettings": [ + { + "operationName": "_phase:build", + "outputFolderNames": ["lib"], + "parameterNamesToIgnore": ["--invalid-parameter", "--another-invalid", "-malformed-parameter"] + } + ] +} diff --git a/libraries/rush-lib/src/api/test/jsonFiles/test-project-f/config/rush-project.json b/libraries/rush-lib/src/api/test/jsonFiles/test-project-f/config/rush-project.json new file mode 100644 index 00000000000..fe9cc4909ae --- /dev/null +++ b/libraries/rush-lib/src/api/test/jsonFiles/test-project-f/config/rush-project.json @@ -0,0 +1,9 @@ +{ + "operationSettings": [ + { + "operationName": "_phase:build", + "outputFolderNames": ["lib"], + "parameterNamesToIgnore": ["--nonexistent-param", "--another-nonexistent"] + } + ] +} diff --git a/libraries/rush-lib/src/api/test/jsonFiles/test-project-g/config/rush-project.json b/libraries/rush-lib/src/api/test/jsonFiles/test-project-g/config/rush-project.json new file mode 100644 index 00000000000..ab34f9ea349 --- /dev/null +++ b/libraries/rush-lib/src/api/test/jsonFiles/test-project-g/config/rush-project.json @@ -0,0 +1,9 @@ +{ + "operationSettings": [ + { + "operationName": "_phase:build", + "outputFolderNames": ["lib"], + "parameterNamesToIgnore": ["--production", "--nonexistent-param", "--verbose"] + } + ] +} diff --git a/libraries/rush-lib/src/api/test/repo/apps/app1/package.json b/libraries/rush-lib/src/api/test/repo/apps/app1/package.json new file mode 100644 index 00000000000..571970cfa29 --- /dev/null +++ b/libraries/rush-lib/src/api/test/repo/apps/app1/package.json @@ -0,0 +1,5 @@ +{ + "name": "app1", + "version": "1.0.0", + "description": "Test app 1" +} diff --git a/libraries/rush-lib/src/api/test/repo/apps/app2/package.json b/libraries/rush-lib/src/api/test/repo/apps/app2/package.json new file mode 100644 index 00000000000..a030c5e5775 --- /dev/null +++ b/libraries/rush-lib/src/api/test/repo/apps/app2/package.json @@ -0,0 +1,5 @@ +{ + "name": "app2", + "version": "1.0.0", + "description": "Test app 2" +} diff --git a/libraries/rush-lib/src/api/test/repo/common/config/rush/version-policies.json b/libraries/rush-lib/src/api/test/repo/common/config/rush/version-policies.json new file mode 100644 index 00000000000..ad3bf99e03d --- /dev/null +++ b/libraries/rush-lib/src/api/test/repo/common/config/rush/version-policies.json @@ -0,0 +1,8 @@ +[ + { + "definitionName": "lockStepVersion", + "policyName": "testPolicy", + "version": "1.0.0", + "nextBump": "minor" + } +] diff --git a/libraries/rush-lib/src/api/test/repo/rush-npm.json b/libraries/rush-lib/src/api/test/repo/rush-npm.json index a1bead19121..5f448332dcd 100644 --- a/libraries/rush-lib/src/api/test/repo/rush-npm.json +++ b/libraries/rush-lib/src/api/test/repo/rush-npm.json @@ -27,20 +27,37 @@ { "packageName": "project1", "projectFolder": "project1", - "reviewCategory": "third-party" + "reviewCategory": "third-party", + "tags": ["frontend", "ui"], + "versionPolicyName": "testPolicy" }, { "packageName": "project2", "projectFolder": "project2", "reviewCategory": "third-party", - "skipRushCheck": true + "skipRushCheck": true, + "tags": ["backend"] }, { "packageName": "project3", "projectFolder": "project3", - "reviewCategory": "prototype" + "reviewCategory": "prototype", + "tags": ["frontend"], + "versionPolicyName": "testPolicy" + }, + + { + "packageName": "app1", + "projectFolder": "apps/app1", + "reviewCategory": "first-party" + }, + + { + "packageName": "app2", + "projectFolder": "apps/app2", + "reviewCategory": "first-party" } ] } diff --git a/libraries/rush-lib/src/cli/RushCommandLineParser.ts b/libraries/rush-lib/src/cli/RushCommandLineParser.ts index 807eb94ef34..7828eb1e90d 100644 --- a/libraries/rush-lib/src/cli/RushCommandLineParser.ts +++ b/libraries/rush-lib/src/cli/RushCommandLineParser.ts @@ -88,6 +88,13 @@ export class RushCommandLineParser extends CommandLineParser { private readonly _terminal: Terminal; private readonly _autocreateBuildCommand: boolean; + /** + * The current working directory that was used to find the Rush configuration. + */ + public get cwd(): string { + return this._rushOptions.cwd; + } + public constructor(options?: Partial) { super({ toolFilename: 'rush', diff --git a/libraries/rush-lib/src/cli/RushPnpmCommandLineParser.ts b/libraries/rush-lib/src/cli/RushPnpmCommandLineParser.ts index 51ef8e7c703..7c7787a4362 100644 --- a/libraries/rush-lib/src/cli/RushPnpmCommandLineParser.ts +++ b/libraries/rush-lib/src/cli/RushPnpmCommandLineParser.ts @@ -9,16 +9,17 @@ import { FileConstants, FileSystem, JsonFile, - type JsonObject + type JsonObject, + Objects } from '@rushstack/node-core-library'; import { Colorize, ConsoleTerminalProvider, type ITerminal, type ITerminalProvider, - Terminal + Terminal, + PrintUtilities } from '@rushstack/terminal'; -import { PrintUtilities } from '@rushstack/terminal'; import { RushConfiguration } from '../api/RushConfiguration'; import { NodeJsCompatibility } from '../logic/NodeJsCompatibility'; @@ -28,7 +29,6 @@ import { PurgeManager } from '../logic/PurgeManager'; import type { IBuiltInPluginConfiguration } from '../pluginFramework/PluginLoader/BuiltInPluginLoader'; import type { BaseInstallManager } from '../logic/base/BaseInstallManager'; import type { IInstallManagerOptions } from '../logic/base/BaseInstallManagerTypes'; -import { objectsAreDeepEqual } from '../utilities/objectUtilities'; import { Utilities } from '../utilities/Utilities'; import type { Subspace } from '../api/Subspace'; import type { PnpmOptionsConfiguration } from '../logic/pnpm/PnpmOptionsConfiguration'; @@ -495,7 +495,7 @@ export class RushPnpmCommandLineParser { const currentGlobalPatchedDependencies: Record | undefined = pnpmOptions?.globalPatchedDependencies; - if (!objectsAreDeepEqual(currentGlobalPatchedDependencies, newGlobalPatchedDependencies)) { + if (!Objects.areDeepEqual(currentGlobalPatchedDependencies, newGlobalPatchedDependencies)) { const commonTempPnpmPatchesFolder: string = `${subspaceTempFolder}/${RushConstants.pnpmPatchesFolderName}`; const rushPnpmPatchesFolder: string = this._subspace.getSubspacePnpmPatchesFolderPath(); diff --git a/libraries/rush-lib/src/cli/actions/InstallAction.ts b/libraries/rush-lib/src/cli/actions/InstallAction.ts index 5bee42f2205..ebc828c33b1 100644 --- a/libraries/rush-lib/src/cli/actions/InstallAction.ts +++ b/libraries/rush-lib/src/cli/actions/InstallAction.ts @@ -41,7 +41,8 @@ export class InstallAction extends BaseInstallAction { // Disable filtering because rush-project.json is riggable and therefore may not be available enableFiltering: false }, - includeSubspaceSelector: true + includeSubspaceSelector: true, + cwd: this.parser.cwd }); this._checkOnlyParameter = this.defineFlagParameter({ diff --git a/libraries/rush-lib/src/cli/actions/ListAction.ts b/libraries/rush-lib/src/cli/actions/ListAction.ts index 70d891fb83f..021f3008f86 100644 --- a/libraries/rush-lib/src/cli/actions/ListAction.ts +++ b/libraries/rush-lib/src/cli/actions/ListAction.ts @@ -116,7 +116,8 @@ export class ListAction extends BaseRushAction { // Disable filtering because rush-project.json is riggable and therefore may not be available enableFiltering: false }, - includeSubspaceSelector: false + includeSubspaceSelector: false, + cwd: this.parser.cwd }); } diff --git a/libraries/rush-lib/src/cli/actions/UpdateAction.ts b/libraries/rush-lib/src/cli/actions/UpdateAction.ts index 89490d575e2..f503656bfcc 100644 --- a/libraries/rush-lib/src/cli/actions/UpdateAction.ts +++ b/libraries/rush-lib/src/cli/actions/UpdateAction.ts @@ -45,7 +45,8 @@ export class UpdateAction extends BaseInstallAction { // Disable filtering because rush-project.json is riggable and therefore may not be available enableFiltering: false }, - includeSubspaceSelector: true + includeSubspaceSelector: true, + cwd: this.parser.cwd }); } diff --git a/libraries/rush-lib/src/cli/parsing/SelectionParameterSet.ts b/libraries/rush-lib/src/cli/parsing/SelectionParameterSet.ts index cfa1c545788..c8d90bf1a1b 100644 --- a/libraries/rush-lib/src/cli/parsing/SelectionParameterSet.ts +++ b/libraries/rush-lib/src/cli/parsing/SelectionParameterSet.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -import { AlreadyReportedError, PackageJsonLookup, type IPackageJson } from '@rushstack/node-core-library'; +import { AlreadyReportedError } from '@rushstack/node-core-library'; import { Colorize, type ITerminal } from '@rushstack/terminal'; import type { CommandLineParameterProvider, @@ -21,7 +21,7 @@ import { NamedProjectSelectorParser } from '../../logic/selectors/NamedProjectSe import { TagProjectSelectorParser } from '../../logic/selectors/TagProjectSelectorParser'; import { VersionPolicyProjectSelectorParser } from '../../logic/selectors/VersionPolicyProjectSelectorParser'; import { SubspaceSelectorParser } from '../../logic/selectors/SubspaceSelectorParser'; -import { RushConstants } from '../../logic/RushConstants'; +import { PathProjectSelectorParser } from '../../logic/selectors/PathProjectSelectorParser'; import type { Subspace } from '../../api/Subspace'; export const SUBSPACE_LONG_ARG_NAME: '--subspace' = '--subspace'; @@ -29,6 +29,11 @@ export const SUBSPACE_LONG_ARG_NAME: '--subspace' = '--subspace'; interface ISelectionParameterSetOptions { gitOptions: IGitSelectorParserOptions; includeSubspaceSelector: boolean; + /** + * The working directory used to resolve relative paths. + * This should be the same directory that was used to find the Rush configuration. + */ + cwd: string; } /** @@ -58,7 +63,7 @@ export class SelectionParameterSet { action: CommandLineParameterProvider, options: ISelectionParameterSetOptions ) { - const { gitOptions, includeSubspaceSelector } = options; + const { gitOptions, includeSubspaceSelector, cwd } = options; this._rushConfiguration = rushConfiguration; const selectorParsers: Map> = new Map< @@ -72,6 +77,7 @@ export class SelectionParameterSet { selectorParsers.set('tag', new TagProjectSelectorParser(rushConfiguration)); selectorParsers.set('version-policy', new VersionPolicyProjectSelectorParser(rushConfiguration)); selectorParsers.set('subspace', new SubspaceSelectorParser(rushConfiguration)); + selectorParsers.set('path', new PathProjectSelectorParser(rushConfiguration, cwd)); this._selectorParserByScope = selectorParsers; @@ -416,40 +422,36 @@ export class SelectionParameterSet { const selection: Set = new Set(); for (const rawSelector of listParameter.values) { - // Handle the special case of "current project" without a scope - if (rawSelector === '.') { - const packageJsonLookup: PackageJsonLookup = PackageJsonLookup.instance; - const packageJson: IPackageJson | undefined = packageJsonLookup.tryLoadPackageJsonFor(process.cwd()); - if (packageJson) { - const project: RushConfigurationProject | undefined = this._rushConfiguration.getProjectByName( - packageJson.name - ); - - if (project) { - selection.add(project); - } else { - terminal.writeErrorLine( - `Rush is not currently running in a project directory specified in ${RushConstants.rushJsonFilename}. ` + - `The "." value for the ${parameterName} parameter is not allowed.` - ); - throw new AlreadyReportedError(); - } + const scopeIndex: number = rawSelector.indexOf(':'); + + let scope: string; + let unscopedSelector: string; + + if (scopeIndex < 0) { + // No explicit scope - determine if this looks like a path + // Check for relative paths: '.', '..', or those followed by '/' and more + // Check for absolute POSIX paths: starting with '/' + const isRelativePath: boolean = + rawSelector === '.' || + rawSelector === '..' || + rawSelector.startsWith('./') || + rawSelector.startsWith('../'); + const isAbsolutePosixPath: boolean = rawSelector.startsWith('/'); + + if (isRelativePath || isAbsolutePosixPath) { + // Route to path: selector + scope = 'path'; + unscopedSelector = rawSelector; } else { - terminal.writeErrorLine( - 'Rush is not currently running in a project directory. ' + - `The "." value for the ${parameterName} parameter is not allowed.` - ); - throw new AlreadyReportedError(); + // Default to name: selector + scope = 'name'; + unscopedSelector = rawSelector; } - - continue; + } else { + scope = rawSelector.slice(0, scopeIndex); + unscopedSelector = rawSelector.slice(scopeIndex + 1); } - const scopeIndex: number = rawSelector.indexOf(':'); - - const scope: string = scopeIndex < 0 ? 'name' : rawSelector.slice(0, scopeIndex); - const unscopedSelector: string = scopeIndex < 0 ? rawSelector : rawSelector.slice(scopeIndex + 1); - const handler: ISelectorParser | undefined = this._selectorParserByScope.get(scope); if (!handler) { diff --git a/libraries/rush-lib/src/cli/parsing/associateParametersByPhase.ts b/libraries/rush-lib/src/cli/parsing/associateParametersByPhase.ts new file mode 100644 index 00000000000..408b1f27910 --- /dev/null +++ b/libraries/rush-lib/src/cli/parsing/associateParametersByPhase.ts @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import { InternalError } from '@rushstack/node-core-library'; +import type { CommandLineParameter } from '@rushstack/ts-command-line'; + +import type { IParameterJson, IPhase } from '../../api/CommandLineConfiguration'; + +/** + * Associates command line parameters with their associated phases. + * This helper is used to populate the `associatedParameters` set on each phase + * based on the `associatedPhases` property of each parameter. + * + * @param customParameters - Map of parameter definitions to their CommandLineParameter instances + * @param knownPhases - Map of phase names to IPhase objects + */ +export function associateParametersByPhase( + customParameters: ReadonlyMap, + knownPhases: ReadonlyMap +): void { + for (const [parameterJson, tsCommandLineParameter] of customParameters) { + if (parameterJson.associatedPhases) { + for (const phaseName of parameterJson.associatedPhases) { + const phase: IPhase | undefined = knownPhases.get(phaseName); + if (!phase) { + throw new InternalError(`Could not find a phase matching ${phaseName}.`); + } + phase.associatedParameters.add(tsCommandLineParameter); + } + } + } +} diff --git a/libraries/rush-lib/src/cli/parsing/defineCustomParameters.ts b/libraries/rush-lib/src/cli/parsing/defineCustomParameters.ts new file mode 100644 index 00000000000..bd5b80758dc --- /dev/null +++ b/libraries/rush-lib/src/cli/parsing/defineCustomParameters.ts @@ -0,0 +1,100 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import type { CommandLineAction, CommandLineParameter } from '@rushstack/ts-command-line'; + +import type { IParameterJson } from '../../api/CommandLineConfiguration'; +import { RushConstants } from '../../logic/RushConstants'; +import type { ParameterJson } from '../../api/CommandLineJson'; + +/** + * Helper function to create CommandLineParameter instances from parameter definitions. + * This centralizes the logic for defining parameters based on their kind. + * + * @param action - The CommandLineAction to define the parameters on + * @param associatedParameters - The set of parameter definitions + * @param targetMap - The map to populate with parameter definitions to CommandLineParameter instances + */ +export function defineCustomParameters( + action: CommandLineAction, + associatedParameters: Iterable, + targetMap: Map +): void { + for (const parameter of associatedParameters) { + let tsCommandLineParameter: CommandLineParameter | undefined; + + switch (parameter.parameterKind) { + case 'flag': + tsCommandLineParameter = action.defineFlagParameter({ + parameterShortName: parameter.shortName, + parameterLongName: parameter.longName, + description: parameter.description, + required: parameter.required + }); + break; + case 'choice': + tsCommandLineParameter = action.defineChoiceParameter({ + parameterShortName: parameter.shortName, + parameterLongName: parameter.longName, + description: parameter.description, + required: parameter.required, + alternatives: parameter.alternatives.map((x) => x.name), + defaultValue: parameter.defaultValue + }); + break; + case 'string': + tsCommandLineParameter = action.defineStringParameter({ + parameterLongName: parameter.longName, + parameterShortName: parameter.shortName, + description: parameter.description, + required: parameter.required, + argumentName: parameter.argumentName + }); + break; + case 'integer': + tsCommandLineParameter = action.defineIntegerParameter({ + parameterLongName: parameter.longName, + parameterShortName: parameter.shortName, + description: parameter.description, + required: parameter.required, + argumentName: parameter.argumentName + }); + break; + case 'stringList': + tsCommandLineParameter = action.defineStringListParameter({ + parameterLongName: parameter.longName, + parameterShortName: parameter.shortName, + description: parameter.description, + required: parameter.required, + argumentName: parameter.argumentName + }); + break; + case 'integerList': + tsCommandLineParameter = action.defineIntegerListParameter({ + parameterLongName: parameter.longName, + parameterShortName: parameter.shortName, + description: parameter.description, + required: parameter.required, + argumentName: parameter.argumentName + }); + break; + case 'choiceList': + tsCommandLineParameter = action.defineChoiceListParameter({ + parameterShortName: parameter.shortName, + parameterLongName: parameter.longName, + description: parameter.description, + required: parameter.required, + alternatives: parameter.alternatives.map((x) => x.name) + }); + break; + default: + throw new Error( + `${RushConstants.commandLineFilename} defines a parameter "${ + (parameter as ParameterJson).longName + }" using an unsupported parameter kind "${(parameter as ParameterJson).parameterKind}"` + ); + } + + targetMap.set(parameter, tsCommandLineParameter); + } +} diff --git a/libraries/rush-lib/src/cli/scriptActions/BaseScriptAction.ts b/libraries/rush-lib/src/cli/scriptActions/BaseScriptAction.ts index 2da245a5b7a..3d22215e517 100644 --- a/libraries/rush-lib/src/cli/scriptActions/BaseScriptAction.ts +++ b/libraries/rush-lib/src/cli/scriptActions/BaseScriptAction.ts @@ -5,8 +5,7 @@ import type { CommandLineParameter } from '@rushstack/ts-command-line'; import { BaseRushAction, type IBaseRushActionOptions } from '../actions/BaseRushAction'; import type { Command, CommandLineConfiguration, IParameterJson } from '../../api/CommandLineConfiguration'; -import { RushConstants } from '../../logic/RushConstants'; -import type { ParameterJson } from '../../api/CommandLineJson'; +import { defineCustomParameters } from '../parsing/defineCustomParameters'; /** * Constructor parameters for BaseScriptAction @@ -42,83 +41,7 @@ export abstract class BaseScriptAction extends BaseRus return; } - // Find any parameters that are associated with this command - for (const parameter of this.command.associatedParameters) { - let tsCommandLineParameter: CommandLineParameter | undefined; - - switch (parameter.parameterKind) { - case 'flag': - tsCommandLineParameter = this.defineFlagParameter({ - parameterShortName: parameter.shortName, - parameterLongName: parameter.longName, - description: parameter.description, - required: parameter.required - }); - break; - case 'choice': - tsCommandLineParameter = this.defineChoiceParameter({ - parameterShortName: parameter.shortName, - parameterLongName: parameter.longName, - description: parameter.description, - required: parameter.required, - alternatives: parameter.alternatives.map((x) => x.name), - defaultValue: parameter.defaultValue - }); - break; - case 'string': - tsCommandLineParameter = this.defineStringParameter({ - parameterLongName: parameter.longName, - parameterShortName: parameter.shortName, - description: parameter.description, - required: parameter.required, - argumentName: parameter.argumentName - }); - break; - case 'integer': - tsCommandLineParameter = this.defineIntegerParameter({ - parameterLongName: parameter.longName, - parameterShortName: parameter.shortName, - description: parameter.description, - required: parameter.required, - argumentName: parameter.argumentName - }); - break; - case 'stringList': - tsCommandLineParameter = this.defineStringListParameter({ - parameterLongName: parameter.longName, - parameterShortName: parameter.shortName, - description: parameter.description, - required: parameter.required, - argumentName: parameter.argumentName - }); - break; - case 'integerList': - tsCommandLineParameter = this.defineIntegerListParameter({ - parameterLongName: parameter.longName, - parameterShortName: parameter.shortName, - description: parameter.description, - required: parameter.required, - argumentName: parameter.argumentName - }); - break; - case 'choiceList': - tsCommandLineParameter = this.defineChoiceListParameter({ - parameterShortName: parameter.shortName, - parameterLongName: parameter.longName, - description: parameter.description, - required: parameter.required, - alternatives: parameter.alternatives.map((x) => x.name) - }); - break; - default: - throw new Error( - `${RushConstants.commandLineFilename} defines a parameter "${ - (parameter as ParameterJson).longName - }" using an unsupported parameter kind "${(parameter as ParameterJson).parameterKind}"` - ); - } - - this.customParameters.set(parameter, tsCommandLineParameter); - } + // Use the centralized helper to create CommandLineParameter instances + defineCustomParameters(this, this.command.associatedParameters, this.customParameters); } } diff --git a/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts b/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts index 906a3ca89ea..b7d7ef8a692 100644 --- a/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts +++ b/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts @@ -3,7 +3,7 @@ import type { AsyncSeriesHook } from 'tapable'; -import { AlreadyReportedError, InternalError } from '@rushstack/node-core-library'; +import { AlreadyReportedError } from '@rushstack/node-core-library'; import { type ITerminal, Terminal, Colorize } from '@rushstack/terminal'; import type { CommandLineFlagParameter, @@ -33,6 +33,7 @@ import { SelectionParameterSet } from '../parsing/SelectionParameterSet'; import type { IPhase, IPhasedCommandConfig } from '../../api/CommandLineConfiguration'; import type { Operation } from '../../logic/operations/Operation'; import type { OperationExecutionRecord } from '../../logic/operations/OperationExecutionRecord'; +import { associateParametersByPhase } from '../parsing/associateParametersByPhase'; import { PhasedOperationPlugin } from '../../logic/operations/PhasedOperationPlugin'; import { ShellOperationRunnerPlugin } from '../../logic/operations/ShellOperationRunnerPlugin'; import { Event } from '../../api/EventHooks'; @@ -235,7 +236,8 @@ export class PhasedScriptAction extends BaseScriptAction i // Enable filtering to reduce evaluation cost enableFiltering: true }, - includeSubspaceSelector: false + includeSubspaceSelector: false, + cwd: this.parser.cwd }); this._verboseParameter = this.defineFlagParameter({ @@ -327,17 +329,8 @@ export class PhasedScriptAction extends BaseScriptAction i this.defineScriptParameters(); - for (const [{ associatedPhases }, tsCommandLineParameter] of this.customParameters) { - if (associatedPhases) { - for (const phaseName of associatedPhases) { - const phase: IPhase | undefined = this._knownPhases.get(phaseName); - if (!phase) { - throw new InternalError(`Could not find a phase matching ${phaseName}.`); - } - phase.associatedParameters.add(tsCommandLineParameter); - } - } - } + // Associate parameters with their respective phases + associateParametersByPhase(this.customParameters, this._knownPhases); } public async runAsync(): Promise { diff --git a/libraries/rush-lib/src/index.ts b/libraries/rush-lib/src/index.ts index 85a59f9ad77..88dfb89789e 100644 --- a/libraries/rush-lib/src/index.ts +++ b/libraries/rush-lib/src/index.ts @@ -8,9 +8,16 @@ * @packageDocumentation */ -// For backwards compatibility +// #region Backwards compatibility export { LookupByPath as LookupByPath, type IPrefixMatch } from '@rushstack/lookup-by-path'; +export { + type ICredentialCacheOptions, + type ICredentialCacheEntry, + CredentialCache +} from '@rushstack/credential-cache'; +// #endregion + export { ApprovedPackagesPolicy } from './api/ApprovedPackagesPolicy'; export { RushConfiguration, type ITryFindRushJsonLocationOptions } from './api/RushConfiguration'; @@ -176,12 +183,6 @@ export type { ICobuildCompletedState } from './logic/cobuild/ICobuildLockProvider'; -export { - type ICredentialCacheOptions, - type ICredentialCacheEntry, - CredentialCache -} from './logic/CredentialCache'; - export type { ITelemetryData, ITelemetryMachineInfo, ITelemetryOperationResult } from './logic/Telemetry'; export type { IStopwatchResult } from './utilities/Stopwatch'; diff --git a/libraries/rush-lib/src/logic/InteractiveUpgrader.ts b/libraries/rush-lib/src/logic/InteractiveUpgrader.ts index 3eb8d238a7e..493a2a25ffc 100644 --- a/libraries/rush-lib/src/logic/InteractiveUpgrader.ts +++ b/libraries/rush-lib/src/logic/InteractiveUpgrader.ts @@ -1,12 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -/// - -import npmCheck from 'npm-check'; -import type * as NpmCheck from 'npm-check'; import Prompt from 'inquirer/lib/ui/prompt'; +import { NpmCheck, type INpmCheckState, type INpmCheckPackageSummary } from '@rushstack/npm-check-fork'; import { Colorize } from '@rushstack/terminal'; import type { RushConfiguration } from '../api/RushConfiguration'; @@ -29,7 +26,7 @@ export class InteractiveUpgrader { public async upgradeAsync(): Promise { const rushProject: RushConfigurationProject = await this._getUserSelectedProjectForUpgradeAsync(); - const dependenciesState: NpmCheck.INpmCheckPackage[] = + const dependenciesState: INpmCheckPackageSummary[] = await this._getPackageDependenciesStatusAsync(rushProject); const depsToUpgrade: IDepsToUpgradeAnswers = @@ -38,7 +35,7 @@ export class InteractiveUpgrader { } private async _getUserSelectedDependenciesToUpgradeAsync( - packages: NpmCheck.INpmCheckPackage[] + packages: INpmCheckPackageSummary[] ): Promise { return upgradeInteractive(packages); } @@ -69,14 +66,13 @@ export class InteractiveUpgrader { private async _getPackageDependenciesStatusAsync( rushProject: RushConfigurationProject - ): Promise { + ): Promise { const { projectFolder } = rushProject; - const currentState: NpmCheck.INpmCheckCurrentState = await npmCheck({ - cwd: projectFolder, - skipUnused: true + const currentState: INpmCheckState = await NpmCheck({ + cwd: projectFolder }); - return currentState.get('packages'); + return currentState.packages ?? []; } } diff --git a/libraries/rush-lib/src/logic/PackageJsonUpdater.ts b/libraries/rush-lib/src/logic/PackageJsonUpdater.ts index 270dcfc87bc..cc56e90c7ed 100644 --- a/libraries/rush-lib/src/logic/PackageJsonUpdater.ts +++ b/libraries/rush-lib/src/logic/PackageJsonUpdater.ts @@ -1,11 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -/// - import * as semver from 'semver'; -import type * as NpmCheck from 'npm-check'; +import type { INpmCheckPackageSummary } from '@rushstack/npm-check-fork'; import { Colorize, type ITerminal } from '@rushstack/terminal'; import type { RushConfiguration } from '../api/RushConfiguration'; @@ -44,7 +42,7 @@ export interface IPackageJsonUpdaterRushUpgradeOptions { /** * The dependencies to be added. */ - packagesToAdd: NpmCheck.INpmCheckPackage[]; + packagesToAdd: INpmCheckPackageSummary[]; /** * If specified, other packages that use this dependency will also have their package.json's updated. */ @@ -138,13 +136,7 @@ export class PackageJsonUpdater { const devDependenciesToUpdate: Record = {}; const peerDependenciesToUpdate: Record = {}; - for (const { - moduleName, - latest: latestVersion, - packageJson, - devDependency, - peerDependency - } of packagesToAdd) { + for (const { moduleName, latest: latestVersion, packageJson, devDependency } of packagesToAdd) { const inferredRangeStyle: SemVerStyle = this._cheaplyDetectSemVerRangeStyle(packageJson); const implicitlyPreferredVersion: string | undefined = implicitlyPreferredVersionByPackageName.get(moduleName); @@ -164,8 +156,6 @@ export class PackageJsonUpdater { if (devDependency) { devDependenciesToUpdate[moduleName] = version; - } else if (peerDependency) { - peerDependenciesToUpdate[moduleName] = version; } else { dependenciesToUpdate[moduleName] = version; } @@ -903,7 +893,7 @@ export class PackageJsonUpdater { } } - private _normalizeDepsToUpgrade(deps: NpmCheck.INpmCheckPackage[]): IPackageForRushAdd[] { + private _normalizeDepsToUpgrade(deps: INpmCheckPackageSummary[]): IPackageForRushAdd[] { return deps.map((dep) => { return { packageName: dep.moduleName, diff --git a/libraries/rush-lib/src/logic/RushConstants.ts b/libraries/rush-lib/src/logic/RushConstants.ts index e04c03d2f2e..0f5ed03c8e8 100644 --- a/libraries/rush-lib/src/logic/RushConstants.ts +++ b/libraries/rush-lib/src/logic/RushConstants.ts @@ -1,6 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. +import type { RUSH_USER_FOLDER_NAME } from '@rushstack/credential-cache'; + +// Use the typing here to enforce consistency between the two libraries +const rushUserConfigurationFolderName: typeof RUSH_USER_FOLDER_NAME = '.rush-user'; + /** * Constants used by the Rush tool. * @beta @@ -298,7 +303,7 @@ export class RushConstants { /** * The name of the per-user Rush configuration data folder. */ - public static readonly rushUserConfigurationFolderName: '.rush-user' = '.rush-user'; + public static readonly rushUserConfigurationFolderName: '.rush-user' = rushUserConfigurationFolderName; /** * The name of the project `rush-logs` folder. diff --git a/libraries/rush-lib/src/logic/installManager/WorkspaceInstallManager.ts b/libraries/rush-lib/src/logic/installManager/WorkspaceInstallManager.ts index 8343b6c8fc9..9411c549e43 100644 --- a/libraries/rush-lib/src/logic/installManager/WorkspaceInstallManager.ts +++ b/libraries/rush-lib/src/logic/installManager/WorkspaceInstallManager.ts @@ -13,6 +13,7 @@ import { AlreadyReportedError, Async, type IDependenciesMetaTable, + Objects, Path, Sort } from '@rushstack/node-core-library'; @@ -39,7 +40,6 @@ import { ShrinkwrapFileFactory } from '../ShrinkwrapFileFactory'; import { BaseProjectShrinkwrapFile } from '../base/BaseProjectShrinkwrapFile'; import { type CustomTipId, type ICustomTipInfo, PNPM_CUSTOM_TIPS } from '../../api/CustomTipsConfiguration'; import type { PnpmShrinkwrapFile } from '../pnpm/PnpmShrinkwrapFile'; -import { objectsAreDeepEqual } from '../../utilities/objectUtilities'; import type { Subspace } from '../../api/Subspace'; import { BaseLinkManager, SymlinkKind } from '../base/BaseLinkManager'; import { FlagFile } from '../../api/FlagFile'; @@ -372,7 +372,7 @@ export class WorkspaceInstallManager extends BaseInstallManager { } // Now, we compare these two objects to see if they are equal or not - const dependenciesMetaAreEqual: boolean = objectsAreDeepEqual( + const dependenciesMetaAreEqual: boolean = Objects.areDeepEqual( expectedDependenciesMetaByProjectRelativePath, lockfileDependenciesMetaByProjectRelativePath ); @@ -388,7 +388,7 @@ export class WorkspaceInstallManager extends BaseInstallManager { const pnpmOptions: PnpmOptionsConfiguration = subspace.getPnpmOptions() || this.rushConfiguration.pnpmOptions; - const overridesAreEqual: boolean = objectsAreDeepEqual>( + const overridesAreEqual: boolean = Objects.areDeepEqual>( pnpmOptions.globalOverrides ?? {}, shrinkwrapFile?.overrides ? Object.fromEntries(shrinkwrapFile?.overrides) : {} ); diff --git a/libraries/rush-lib/src/logic/operations/CacheableOperationPlugin.ts b/libraries/rush-lib/src/logic/operations/CacheableOperationPlugin.ts index 25103ee9220..bedb37d64c4 100644 --- a/libraries/rush-lib/src/logic/operations/CacheableOperationPlugin.ts +++ b/libraries/rush-lib/src/logic/operations/CacheableOperationPlugin.ts @@ -5,8 +5,14 @@ import * as crypto from 'node:crypto'; import { InternalError, NewlineKind, Sort } from '@rushstack/node-core-library'; import { CollatedTerminal, type CollatedWriter } from '@rushstack/stream-collator'; -import { DiscardStdoutTransform, TextRewriterTransform } from '@rushstack/terminal'; -import { SplitterTransform, type TerminalWritable, type ITerminal, Terminal } from '@rushstack/terminal'; +import { + DiscardStdoutTransform, + TextRewriterTransform, + SplitterTransform, + type TerminalWritable, + type ITerminal, + Terminal +} from '@rushstack/terminal'; import { CollatedTerminalProvider } from '../../utilities/CollatedTerminalProvider'; import { OperationStatus } from './OperationStatus'; diff --git a/libraries/rush-lib/src/logic/operations/IPCOperationRunner.ts b/libraries/rush-lib/src/logic/operations/IPCOperationRunner.ts index b72151fdb11..6fbc924d87e 100644 --- a/libraries/rush-lib/src/logic/operations/IPCOperationRunner.ts +++ b/libraries/rush-lib/src/logic/operations/IPCOperationRunner.ts @@ -30,6 +30,7 @@ export interface IIPCOperationRunnerOptions { commandForHash: string; persist: boolean; requestRun: OperationRequestRunCallback; + ignoredParameterValues: ReadonlyArray; } function isAfterExecuteEventMessage(message: unknown): message is IAfterExecuteEventMessage { @@ -59,6 +60,7 @@ export class IPCOperationRunner implements IOperationRunner { private readonly _commandForHash: string; private readonly _persist: boolean; private readonly _requestRun: OperationRequestRunCallback; + private readonly _ignoredParameterValues: ReadonlyArray; private _ipcProcess: ChildProcess | undefined; private _processReadyPromise: Promise | undefined; @@ -75,6 +77,7 @@ export class IPCOperationRunner implements IOperationRunner { this._persist = options.persist; this._requestRun = options.requestRun; + this._ignoredParameterValues = options.ignoredParameterValues; } public async executeAsync(context: IOperationRunnerContext): Promise { @@ -82,6 +85,13 @@ export class IPCOperationRunner implements IOperationRunner { async (terminal: ITerminal, terminalProvider: ITerminalProvider): Promise => { let isConnected: boolean = false; if (!this._ipcProcess || typeof this._ipcProcess.exitCode === 'number') { + // Log any ignored parameters + if (this._ignoredParameterValues.length > 0) { + terminal.writeLine( + `These parameters were ignored for this operation by project-level configuration: ${this._ignoredParameterValues.join(' ')}` + ); + } + // Run the operation terminal.writeLine('Invoking: ' + this._commandToRun); diff --git a/libraries/rush-lib/src/logic/operations/IPCOperationRunnerPlugin.ts b/libraries/rush-lib/src/logic/operations/IPCOperationRunnerPlugin.ts index 550cc726889..f87dcb1685a 100644 --- a/libraries/rush-lib/src/logic/operations/IPCOperationRunnerPlugin.ts +++ b/libraries/rush-lib/src/logic/operations/IPCOperationRunnerPlugin.ts @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -import type { IPhase } from '../../api/CommandLineConfiguration'; import type { ICreateOperationsContext, IPhasedCommandPlugin, @@ -14,7 +13,8 @@ import { OperationStatus } from './OperationStatus'; import { PLUGIN_NAME as ShellOperationPluginName, formatCommand, - getCustomParameterValuesByPhase, + getCustomParameterValuesByOperation, + type ICustomParameterValuesForOperation, getDisplayName } from './ShellOperationRunnerPlugin'; @@ -45,8 +45,8 @@ export class IPCOperationRunnerPlugin implements IPhasedCommandPlugin { currentContext = context; - const getCustomParameterValuesForPhase: (phase: IPhase) => ReadonlyArray = - getCustomParameterValuesByPhase(); + const getCustomParameterValues: (operation: Operation) => ICustomParameterValuesForOperation = + getCustomParameterValuesByOperation(); for (const operation of operations) { const { associatedPhase: phase, associatedProject: project, runner } = operation; @@ -73,7 +73,8 @@ export class IPCOperationRunnerPlugin implements IPhasedCommandPlugin { // for this operation (or downstream operations) to be restored from the build cache. const commandForHash: string | undefined = phase.shellCommand ?? scripts?.[phaseName]; - const customParameterValues: ReadonlyArray = getCustomParameterValuesForPhase(phase); + const { parameterValues: customParameterValues, ignoredParameterValues } = + getCustomParameterValues(operation); const commandToRun: string = formatCommand(rawScript, customParameterValues); const operationName: string = getDisplayName(phase, project); @@ -86,6 +87,7 @@ export class IPCOperationRunnerPlugin implements IPhasedCommandPlugin { commandToRun, commandForHash, persist: true, + ignoredParameterValues, requestRun: (requestor: string, detail?: string) => { const operationState: IOperationExecutionResult | undefined = operationStatesByRunner.get(ipcOperationRunner); diff --git a/libraries/rush-lib/src/logic/operations/ShardedPhaseOperationPlugin.ts b/libraries/rush-lib/src/logic/operations/ShardedPhaseOperationPlugin.ts index 20a0ce44dbd..b4f017dfe3f 100644 --- a/libraries/rush-lib/src/logic/operations/ShardedPhaseOperationPlugin.ts +++ b/libraries/rush-lib/src/logic/operations/ShardedPhaseOperationPlugin.ts @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -import type { IPhase } from '../../api/CommandLineConfiguration'; import type { IOperationSettings, RushProjectConfiguration } from '../../api/RushProjectConfiguration'; import type { ICreateOperationsContext, @@ -13,7 +12,8 @@ import { NullOperationRunner } from './NullOperationRunner'; import { Operation } from './Operation'; import { OperationStatus } from './OperationStatus'; import { - getCustomParameterValuesByPhase, + getCustomParameterValuesByOperation, + type ICustomParameterValuesForOperation, getDisplayName, initializeShellOperationRunner } from './ShellOperationRunnerPlugin'; @@ -46,8 +46,8 @@ export class ShardedPhasedOperationPlugin implements IPhasedCommandPlugin { function spliceShards(existingOperations: Set, context: ICreateOperationsContext): Set { const { rushConfiguration, projectConfigurations } = context; - const getCustomParameterValuesForPhase: (phase: IPhase) => ReadonlyArray = - getCustomParameterValuesByPhase(); + const getCustomParameterValues: (operation: Operation) => ICustomParameterValuesForOperation = + getCustomParameterValuesByOperation(); for (const operation of existingOperations) { const { @@ -119,10 +119,12 @@ function spliceShards(existingOperations: Set, context: ICreateOperat const collatorDisplayName: string = `${getDisplayName(phase, project)} - collate`; - const customParameters: readonly string[] = getCustomParameterValuesForPhase(phase); + // Get the custom parameter values for the collator, filtered according to the operation settings + const { parameterValues: customParameterValues, ignoredParameterValues } = + getCustomParameterValues(operation); const collatorParameters: string[] = [ - ...customParameters, + ...customParameterValues, `--shard-parent-folder="${parentFolder}"`, `--shard-count="${shards}"` ]; @@ -137,7 +139,8 @@ function spliceShards(existingOperations: Set, context: ICreateOperat displayName: collatorDisplayName, rushConfiguration, commandToRun, - customParameterValues: collatorParameters + customParameterValues: collatorParameters, + ignoredParameterValues }); const shardOperationName: string = `${phase.name}:shard`; @@ -194,7 +197,7 @@ function spliceShards(existingOperations: Set, context: ICreateOperat ); const shardedParameters: string[] = [ - ...customParameters, + ...customParameterValues, shardArgument, outputDirectoryArgumentWithShard ]; @@ -207,7 +210,8 @@ function spliceShards(existingOperations: Set, context: ICreateOperat commandToRun: baseCommand, customParameterValues: shardedParameters, displayName: shardDisplayName, - rushConfiguration + rushConfiguration, + ignoredParameterValues }); shardOperation.addDependency(preShardOperation); diff --git a/libraries/rush-lib/src/logic/operations/ShellOperationRunner.ts b/libraries/rush-lib/src/logic/operations/ShellOperationRunner.ts index 5e3200c1bdf..3f9f5dc6ddb 100644 --- a/libraries/rush-lib/src/logic/operations/ShellOperationRunner.ts +++ b/libraries/rush-lib/src/logic/operations/ShellOperationRunner.ts @@ -20,6 +20,7 @@ export interface IShellOperationRunnerOptions { displayName: string; commandToRun: string; commandForHash: string; + ignoredParameterValues: ReadonlyArray; } /** @@ -44,6 +45,8 @@ export class ShellOperationRunner implements IOperationRunner { private readonly _rushProject: RushConfigurationProject; + private readonly _ignoredParameterValues: ReadonlyArray; + public constructor(options: IShellOperationRunnerOptions) { const { phase } = options; @@ -53,6 +56,7 @@ export class ShellOperationRunner implements IOperationRunner { this._rushProject = options.rushProject; this.commandToRun = options.commandToRun; this._commandForHash = options.commandForHash; + this._ignoredParameterValues = options.ignoredParameterValues; } public async executeAsync(context: IOperationRunnerContext): Promise { @@ -72,6 +76,13 @@ export class ShellOperationRunner implements IOperationRunner { async (terminal: ITerminal, terminalProvider: ITerminalProvider) => { let hasWarningOrError: boolean = false; + // Log any ignored parameters + if (this._ignoredParameterValues.length > 0) { + terminal.writeLine( + `These parameters were ignored for this operation by project-level configuration: ${this._ignoredParameterValues.join(' ')}` + ); + } + // Run the operation terminal.writeLine(`Invoking: ${this.commandToRun}`); diff --git a/libraries/rush-lib/src/logic/operations/ShellOperationRunnerPlugin.ts b/libraries/rush-lib/src/logic/operations/ShellOperationRunnerPlugin.ts index 96186d9e0d8..e48a52482f6 100644 --- a/libraries/rush-lib/src/logic/operations/ShellOperationRunnerPlugin.ts +++ b/libraries/rush-lib/src/logic/operations/ShellOperationRunnerPlugin.ts @@ -31,15 +31,17 @@ export class ShellOperationRunnerPlugin implements IPhasedCommandPlugin { ): Set { const { rushConfiguration, isInitial } = context; - const getCustomParameterValuesForPhase: (phase: IPhase) => ReadonlyArray = - getCustomParameterValuesByPhase(); + const getCustomParameterValues: (operation: Operation) => ICustomParameterValuesForOperation = + getCustomParameterValuesByOperation(); + for (const operation of operations) { const { associatedPhase: phase, associatedProject: project } = operation; if (!operation.runner) { // This is a shell command. In the future, may consider having a property on the initial operation // to specify a runner type requested in rush-project.json - const customParameterValues: ReadonlyArray = getCustomParameterValuesForPhase(phase); + const { parameterValues: customParameterValues, ignoredParameterValues } = + getCustomParameterValues(operation); const displayName: string = getDisplayName(phase, project); const { name: phaseName, shellCommand } = phase; @@ -63,6 +65,7 @@ export class ShellOperationRunnerPlugin implements IPhasedCommandPlugin { commandForHash, commandToRun, customParameterValues, + ignoredParameterValues, rushConfiguration }); } @@ -82,8 +85,9 @@ export function initializeShellOperationRunner(options: { commandToRun: string | undefined; commandForHash?: string; customParameterValues: ReadonlyArray; + ignoredParameterValues: ReadonlyArray; }): IOperationRunner { - const { phase, project, commandToRun: rawCommandToRun, displayName } = options; + const { phase, project, commandToRun: rawCommandToRun, displayName, ignoredParameterValues } = options; if (typeof rawCommandToRun !== 'string' && phase.missingScriptBehavior === 'error') { throw new Error( @@ -104,7 +108,8 @@ export function initializeShellOperationRunner(options: { commandForHash, displayName, phase, - rushProject: project + rushProject: project, + ignoredParameterValues }); } else { // Empty build script indicates a no-op, so use a no-op runner @@ -116,6 +121,31 @@ export function initializeShellOperationRunner(options: { } } +/** + * Result of filtering custom parameters for an operation + */ +export interface ICustomParameterValuesForOperation { + /** + * The serialized custom parameter values that should be included in the command + */ + parameterValues: ReadonlyArray; + /** + * The serialized custom parameter values that were ignored for this operation + */ + ignoredParameterValues: ReadonlyArray; +} + +/** + * Helper function to collect all parameter arguments for a phase + */ +function collectPhaseParameterArguments(phase: IPhase): string[] { + const customParameterList: string[] = []; + for (const tsCommandLineParameter of phase.associatedParameters) { + tsCommandLineParameter.appendToArgList(customParameterList); + } + return customParameterList; +} + /** * Memoizer for custom parameter values by phase * @returns A function that returns the custom parameter values for a given phase @@ -124,20 +154,69 @@ export function getCustomParameterValuesByPhase(): (phase: IPhase) => ReadonlyAr const customParametersByPhase: Map = new Map(); function getCustomParameterValuesForPhase(phase: IPhase): ReadonlyArray { - let customParameterValues: string[] | undefined = customParametersByPhase.get(phase); - if (!customParameterValues) { - customParameterValues = []; - for (const tsCommandLineParameter of phase.associatedParameters) { - tsCommandLineParameter.appendToArgList(customParameterValues); + let customParameterList: string[] | undefined = customParametersByPhase.get(phase); + if (!customParameterList) { + customParameterList = collectPhaseParameterArguments(phase); + customParametersByPhase.set(phase, customParameterList); + } + + return customParameterList; + } + + return getCustomParameterValuesForPhase; +} + +/** + * Gets custom parameter values for an operation, filtering out any parameters that should be ignored + * based on the operation's settings. + * @returns A function that returns the filtered custom parameter values and ignored parameter values for a given operation + */ +export function getCustomParameterValuesByOperation(): ( + operation: Operation +) => ICustomParameterValuesForOperation { + const customParametersByPhase: Map = new Map(); + + function getCustomParameterValuesForOp(operation: Operation): ICustomParameterValuesForOperation { + const { associatedPhase: phase, settings } = operation; + + // Check if there are any parameters to ignore + const parameterNamesToIgnore: string[] | undefined = settings?.parameterNamesToIgnore; + if (!parameterNamesToIgnore || parameterNamesToIgnore.length === 0) { + // No filtering needed - use the cached parameter list for efficiency + let customParameterList: string[] | undefined = customParametersByPhase.get(phase); + if (!customParameterList) { + customParameterList = collectPhaseParameterArguments(phase); + customParametersByPhase.set(phase, customParameterList); } - customParametersByPhase.set(phase, customParameterValues); + return { + parameterValues: customParameterList, + ignoredParameterValues: [] + }; + } + + // Filtering is needed - we must iterate through parameter objects to check longName + // Note: We cannot use the cached parameter list here because we need access to + // the parameter objects to get their longName property for filtering + const ignoreSet: Set = new Set(parameterNamesToIgnore); + const filteredParameterValues: string[] = []; + const ignoredParameterValues: string[] = []; + + for (const tsCommandLineParameter of phase.associatedParameters) { + const parameterLongName: string = tsCommandLineParameter.longName; + + tsCommandLineParameter.appendToArgList( + ignoreSet.has(parameterLongName) ? ignoredParameterValues : filteredParameterValues + ); } - return customParameterValues; + return { + parameterValues: filteredParameterValues, + ignoredParameterValues + }; } - return getCustomParameterValuesForPhase; + return getCustomParameterValuesForOp; } export function formatCommand(rawCommand: string, customParameterValues: ReadonlyArray): string { diff --git a/libraries/rush-lib/src/logic/operations/test/OperationExecutionManager.test.ts b/libraries/rush-lib/src/logic/operations/test/OperationExecutionManager.test.ts index b8168a8e232..094db7caf5a 100644 --- a/libraries/rush-lib/src/logic/operations/test/OperationExecutionManager.test.ts +++ b/libraries/rush-lib/src/logic/operations/test/OperationExecutionManager.test.ts @@ -16,9 +16,8 @@ jest.mock('@rushstack/terminal', () => { }; }); -import { Terminal } from '@rushstack/terminal'; +import { Terminal, MockWritable, PrintUtilities } from '@rushstack/terminal'; import { CollatedTerminal } from '@rushstack/stream-collator'; -import { MockWritable, PrintUtilities } from '@rushstack/terminal'; import type { IPhase } from '../../../api/CommandLineConfiguration'; import type { RushConfigurationProject } from '../../../api/RushConfigurationProject'; diff --git a/libraries/rush-lib/src/logic/operations/test/ShellOperationRunnerPlugin.test.ts b/libraries/rush-lib/src/logic/operations/test/ShellOperationRunnerPlugin.test.ts index 912531e3eef..818144e85df 100644 --- a/libraries/rush-lib/src/logic/operations/test/ShellOperationRunnerPlugin.test.ts +++ b/libraries/rush-lib/src/logic/operations/test/ShellOperationRunnerPlugin.test.ts @@ -3,9 +3,16 @@ import path from 'node:path'; import { JsonFile } from '@rushstack/node-core-library'; +import { ConsoleTerminalProvider, Terminal } from '@rushstack/terminal'; +import { CommandLineAction, CommandLineParser, type CommandLineParameter } from '@rushstack/ts-command-line'; import { RushConfiguration } from '../../../api/RushConfiguration'; -import { CommandLineConfiguration, type IPhasedCommandConfig } from '../../../api/CommandLineConfiguration'; +import { + CommandLineConfiguration, + type IPhasedCommandConfig, + type IParameterJson, + type IPhase +} from '../../../api/CommandLineConfiguration'; import type { Operation } from '../Operation'; import type { ICommandLineJson } from '../../../api/CommandLineJson'; import { PhasedOperationPlugin } from '../PhasedOperationPlugin'; @@ -14,6 +21,9 @@ import { type ICreateOperationsContext, PhasedCommandHooks } from '../../../pluginFramework/PhasedCommandHooks'; +import { RushProjectConfiguration } from '../../../api/RushProjectConfiguration'; +import { defineCustomParameters } from '../../../cli/parsing/defineCustomParameters'; +import { associateParametersByPhase } from '../../../cli/parsing/associateParametersByPhase'; interface ISerializedOperation { name: string; @@ -27,6 +37,27 @@ function serializeOperation(operation: Operation): ISerializedOperation { }; } +/** + * Test implementation of CommandLineAction for testing parameter handling + */ +class TestCommandLineAction extends CommandLineAction { + protected async onExecuteAsync(): Promise { + // No-op for testing + } +} + +/** + * Test implementation of CommandLineParser for testing parameter handling + */ +class TestCommandLineParser extends CommandLineParser { + public constructor() { + super({ + toolFilename: 'test-tool', + toolDescription: 'Test tool for parameter parsing' + }); + } +} + describe(ShellOperationRunnerPlugin.name, () => { it('shellCommand "echo custom shellCommand" should be set to commandToRun', async () => { const rushJsonFile: string = path.resolve(__dirname, `../../test/customShellCommandinBulkRepo/rush.json`); @@ -121,4 +152,127 @@ describe(ShellOperationRunnerPlugin.name, () => { // All projects expect(Array.from(operations, serializeOperation)).toMatchSnapshot(); }); + + it('parameters should be filtered when parameterNamesToIgnore is specified', async () => { + const rushJsonFile: string = path.resolve(__dirname, `../../test/parameterIgnoringRepo/rush.json`); + const commandLineJsonFile: string = path.resolve( + __dirname, + `../../test/parameterIgnoringRepo/common/config/rush/command-line.json` + ); + + const rushConfiguration = RushConfiguration.loadFromConfigurationFile(rushJsonFile); + const commandLineJson: ICommandLineJson = JsonFile.load(commandLineJsonFile); + + const commandLineConfiguration = new CommandLineConfiguration(commandLineJson); + const buildCommand: IPhasedCommandConfig = commandLineConfiguration.commands.get( + 'build' + )! as IPhasedCommandConfig; + + // Load project configurations + const terminalProvider: ConsoleTerminalProvider = new ConsoleTerminalProvider(); + const terminal: Terminal = new Terminal(terminalProvider); + + const projectConfigurations = await RushProjectConfiguration.tryLoadForProjectsAsync( + rushConfiguration.projects, + terminal + ); + + // Create CommandLineParser and action to parse parameter values + const parser: TestCommandLineParser = new TestCommandLineParser(); + const action: TestCommandLineAction = new TestCommandLineAction({ + actionName: 'build', + summary: 'Test build action', + documentation: 'Test' + }); + parser.addAction(action); + + // Create CommandLineParameter instances from the parameter definitions + const customParametersMap: Map = new Map(); + defineCustomParameters(action, buildCommand.associatedParameters, customParametersMap); + + // Parse parameter values using the parser + await parser.executeWithoutErrorHandlingAsync([ + 'build', + '--production', + '--verbose', + '--config', + '/path/to/config.json', + '--mode', + 'prod', + '--tags', + 'tag1', + '--tags', + 'tag2' + ]); + + // Associate parameters with phases using the helper + // Create a map of phase names to phases for the helper + const phasesMap: Map = new Map(); + for (const phase of buildCommand.phases) { + phasesMap.set(phase.name, phase); + } + associateParametersByPhase(customParametersMap, phasesMap); + + // Create customParameters map for ICreateOperationsContext (keyed by longName) + const customParametersForContext: Map = new Map(); + for (const [param, cli] of customParametersMap) { + customParametersForContext.set(param.longName, cli); + } + + const fakeCreateOperationsContext: Pick< + ICreateOperationsContext, + | 'phaseOriginal' + | 'phaseSelection' + | 'projectSelection' + | 'projectsInUnknownState' + | 'projectConfigurations' + | 'rushConfiguration' + | 'customParameters' + > = { + phaseOriginal: buildCommand.phases, + phaseSelection: buildCommand.phases, + projectSelection: new Set(rushConfiguration.projects), + projectsInUnknownState: new Set(rushConfiguration.projects), + projectConfigurations, + rushConfiguration, + customParameters: customParametersForContext + }; + + const hooks: PhasedCommandHooks = new PhasedCommandHooks(); + + // Generates the default operation graph + new PhasedOperationPlugin().apply(hooks); + // Applies the Shell Operation Runner to selected operations + new ShellOperationRunnerPlugin().apply(hooks); + + const operations: Set = await hooks.createOperations.promise( + new Set(), + fakeCreateOperationsContext as ICreateOperationsContext + ); + + // Verify that project 'a' has the --production parameter filtered out + const operationA = Array.from(operations).find((op) => op.name === 'a'); + expect(operationA).toBeDefined(); + const commandHashA = operationA!.runner!.getConfigHash(); + // Should not contain --production but should contain other parameters + expect(commandHashA).not.toContain('--production'); + expect(commandHashA).toContain('--verbose'); + expect(commandHashA).toContain('--config'); + expect(commandHashA).toContain('--mode'); + expect(commandHashA).toContain('--tags'); + + // Verify that project 'b' has --verbose, --config, --mode, and --tags filtered out + const operationB = Array.from(operations).find((op) => op.name === 'b'); + expect(operationB).toBeDefined(); + const commandHashB = operationB!.runner!.getConfigHash(); + // Should contain --production but not the other parameters since they are filtered + expect(commandHashB).toContain('--production'); + expect(commandHashB).not.toContain('--verbose'); + expect(commandHashB).not.toContain('--config'); + expect(commandHashB).not.toContain('--mode'); + expect(commandHashB).not.toContain('--tags'); + + // All projects snapshot + expect(Array.from(operations, serializeOperation)).toMatchSnapshot(); + }); }); diff --git a/libraries/rush-lib/src/logic/operations/test/__snapshots__/ShellOperationRunnerPlugin.test.ts.snap b/libraries/rush-lib/src/logic/operations/test/__snapshots__/ShellOperationRunnerPlugin.test.ts.snap index f5990af4d43..346ce7e87b4 100644 --- a/libraries/rush-lib/src/logic/operations/test/__snapshots__/ShellOperationRunnerPlugin.test.ts.snap +++ b/libraries/rush-lib/src/logic/operations/test/__snapshots__/ShellOperationRunnerPlugin.test.ts.snap @@ -1,5 +1,18 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`ShellOperationRunnerPlugin parameters should be filtered when parameterNamesToIgnore is specified 1`] = ` +Array [ + Object { + "commandToRun": "echo building a --verbose --config /path/to/config.json --mode prod --tags tag1 --tags tag2", + "name": "a", + }, + Object { + "commandToRun": "echo building b --production", + "name": "b", + }, +] +`; + exports[`ShellOperationRunnerPlugin shellCommand "echo custom shellCommand" should be set to commandToRun 1`] = ` Array [ Object { diff --git a/libraries/rush-lib/src/logic/selectors/PathProjectSelectorParser.ts b/libraries/rush-lib/src/logic/selectors/PathProjectSelectorParser.ts new file mode 100644 index 00000000000..eb91e176b2d --- /dev/null +++ b/libraries/rush-lib/src/logic/selectors/PathProjectSelectorParser.ts @@ -0,0 +1,71 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import * as nodePath from 'node:path'; + +import { AlreadyReportedError, Path } from '@rushstack/node-core-library'; +import type { LookupByPath } from '@rushstack/lookup-by-path'; + +import type { RushConfiguration } from '../../api/RushConfiguration'; +import type { RushConfigurationProject } from '../../api/RushConfigurationProject'; +import type { IEvaluateSelectorOptions, ISelectorParser } from './ISelectorParser'; +import { RushConstants } from '../RushConstants'; + +export class PathProjectSelectorParser implements ISelectorParser { + private readonly _rushConfiguration: RushConfiguration; + private readonly _workingDirectory: string; + + public constructor(rushConfiguration: RushConfiguration, workingDirectory: string) { + this._rushConfiguration = rushConfiguration; + this._workingDirectory = workingDirectory; + } + + public async evaluateSelectorAsync({ + unscopedSelector, + terminal, + parameterName + }: IEvaluateSelectorOptions): Promise> { + // Resolve the input path against the working directory + const absolutePath: string = nodePath.resolve(this._workingDirectory, unscopedSelector); + + // Relativize it to the rushJsonFolder + const relativePath: string = nodePath.relative(this._rushConfiguration.rushJsonFolder, absolutePath); + + // Normalize path separators to forward slashes for LookupByPath + const normalizedPath: string = Path.convertToSlashes(relativePath); + + // Get the LookupByPath instance for the Rush root + const lookupByPath: LookupByPath = + this._rushConfiguration.getProjectLookupForRoot(this._rushConfiguration.rushJsonFolder); + + // Check if this path is within a project or matches a project exactly + const containingProject: RushConfigurationProject | undefined = + lookupByPath.findChildPath(normalizedPath); + + if (containingProject) { + return [containingProject]; + } + + // Check if there are any projects under this path (i.e., it's a directory containing projects) + const projectsUnderPath: Set = new Set(); + for (const [, project] of lookupByPath.entries(normalizedPath)) { + projectsUnderPath.add(project); + } + + if (projectsUnderPath.size > 0) { + return projectsUnderPath; + } + + // No projects found + terminal.writeErrorLine( + `The path "${unscopedSelector}" passed to "${parameterName}" does not match any project in ` + + `${RushConstants.rushJsonFilename}. The resolved path relative to the Rush root is "${relativePath}".` + ); + throw new AlreadyReportedError(); + } + + public getCompletions(): Iterable { + // Return empty completions as path completions are typically handled by the shell + return []; + } +} diff --git a/libraries/rush-lib/src/logic/selectors/test/NamedProjectSelectorParser.test.ts b/libraries/rush-lib/src/logic/selectors/test/NamedProjectSelectorParser.test.ts new file mode 100644 index 00000000000..9ae8d75cbb5 --- /dev/null +++ b/libraries/rush-lib/src/logic/selectors/test/NamedProjectSelectorParser.test.ts @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import * as path from 'node:path'; + +import { StringBufferTerminalProvider, Terminal } from '@rushstack/terminal'; + +import { RushConfiguration } from '../../../api/RushConfiguration'; +import { NamedProjectSelectorParser } from '../NamedProjectSelectorParser'; + +describe(NamedProjectSelectorParser.name, () => { + let rushConfiguration: RushConfiguration; + let terminal: Terminal; + let terminalProvider: StringBufferTerminalProvider; + let parser: NamedProjectSelectorParser; + + beforeEach(() => { + const rushJsonFile: string = path.resolve(__dirname, '../../../api/test/repo/rush-npm.json'); + rushConfiguration = RushConfiguration.loadFromConfigurationFile(rushJsonFile); + terminalProvider = new StringBufferTerminalProvider(); + terminal = new Terminal(terminalProvider); + parser = new NamedProjectSelectorParser(rushConfiguration); + }); + + it('should select a project by exact package name', async () => { + const result = await parser.evaluateSelectorAsync({ + unscopedSelector: 'project1', + terminal, + parameterName: '--only' + }); + + const projects = Array.from(result); + expect(projects).toHaveLength(1); + expect(projects[0].packageName).toBe('project1'); + }); + + it('should throw error for non-existent project', async () => { + await expect( + parser.evaluateSelectorAsync({ + unscopedSelector: 'nonexistent', + terminal, + parameterName: '--only' + }) + ).rejects.toThrow(); + }); + + it('should provide completions for all projects', () => { + const completions = Array.from(parser.getCompletions()); + expect(completions).toContain('project1'); + expect(completions).toContain('project2'); + expect(completions).toContain('project3'); + }); +}); diff --git a/libraries/rush-lib/src/logic/selectors/test/PathProjectSelectorParser.test.ts b/libraries/rush-lib/src/logic/selectors/test/PathProjectSelectorParser.test.ts new file mode 100644 index 00000000000..982b852f23c --- /dev/null +++ b/libraries/rush-lib/src/logic/selectors/test/PathProjectSelectorParser.test.ts @@ -0,0 +1,132 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import * as path from 'node:path'; + +import { StringBufferTerminalProvider, Terminal } from '@rushstack/terminal'; + +import { RushConfiguration } from '../../../api/RushConfiguration'; +import { PathProjectSelectorParser } from '../PathProjectSelectorParser'; + +describe(PathProjectSelectorParser.name, () => { + let rushConfiguration: RushConfiguration; + let terminal: Terminal; + let terminalProvider: StringBufferTerminalProvider; + let parser: PathProjectSelectorParser; + + beforeEach(() => { + const rushJsonFile: string = path.resolve(__dirname, '../../../api/test/repo/rush-npm.json'); + rushConfiguration = RushConfiguration.loadFromConfigurationFile(rushJsonFile); + terminalProvider = new StringBufferTerminalProvider(); + terminal = new Terminal(terminalProvider); + parser = new PathProjectSelectorParser(rushConfiguration, rushConfiguration.rushJsonFolder); + }); + + it('should select a project by exact path', async () => { + const result = await parser.evaluateSelectorAsync({ + unscopedSelector: 'project1', + terminal, + parameterName: '--only' + }); + + const projects = Array.from(result); + expect(projects).toHaveLength(1); + expect(projects[0].packageName).toBe('project1'); + }); + + it('should select a project by path within the project', async () => { + const result = await parser.evaluateSelectorAsync({ + unscopedSelector: 'project1/src/index.ts', + terminal, + parameterName: '--only' + }); + + const projects = Array.from(result); + expect(projects).toHaveLength(1); + expect(projects[0].packageName).toBe('project1'); + }); + + it('should select multiple projects from a parent directory', async () => { + const result = await parser.evaluateSelectorAsync({ + unscopedSelector: '.', + terminal, + parameterName: '--only' + }); + + const projects = Array.from(result); + expect(projects.length).toBeGreaterThan(0); + // Should include all projects in the test repo + const packageNames = projects.map((p) => p.packageName).sort(); + expect(packageNames).toContain('project1'); + expect(packageNames).toContain('project2'); + expect(packageNames).toContain('project3'); + }); + + it('should select multiple projects from a shared subfolder', async () => { + const result = await parser.evaluateSelectorAsync({ + unscopedSelector: 'apps', + terminal, + parameterName: '--only' + }); + + const projects = Array.from(result); + expect(projects).toHaveLength(2); + const packageNames = projects.map((p) => p.packageName).sort(); + expect(packageNames).toEqual(['app1', 'app2']); + }); + + it('should select project from specified directory', async () => { + const project1Path = path.join(rushConfiguration.rushJsonFolder, 'project1'); + const parserWithCustomCwd = new PathProjectSelectorParser(rushConfiguration, project1Path); + + const result = await parserWithCustomCwd.evaluateSelectorAsync({ + unscopedSelector: '.', + terminal, + parameterName: '--only' + }); + + const projects = Array.from(result); + expect(projects).toHaveLength(1); + expect(projects[0].packageName).toBe('project1'); + }); + + it('should handle absolute paths', async () => { + const absolutePath = path.join(rushConfiguration.rushJsonFolder, 'project2'); + + const result = await parser.evaluateSelectorAsync({ + unscopedSelector: absolutePath, + terminal, + parameterName: '--only' + }); + + const projects = Array.from(result); + expect(projects).toHaveLength(1); + expect(projects[0].packageName).toBe('project2'); + }); + + it('should throw error for paths that do not match any project', async () => { + await expect( + parser.evaluateSelectorAsync({ + unscopedSelector: 'nonexistent/path', + terminal, + parameterName: '--only' + }) + ).rejects.toThrow(); + }); + + it('should handle paths outside workspace', async () => { + // Paths outside the workspace should not match any project and throw + await expect( + parser.evaluateSelectorAsync({ + unscopedSelector: '../outside', + terminal, + parameterName: '--only' + }) + ).rejects.toThrow(); + }); + + it('should return empty completions', () => { + const completions = Array.from(parser.getCompletions()); + expect(completions).toHaveLength(0); + }); +}); diff --git a/libraries/rush-lib/src/logic/selectors/test/SubspaceSelectorParser.test.ts b/libraries/rush-lib/src/logic/selectors/test/SubspaceSelectorParser.test.ts new file mode 100644 index 00000000000..7508ec45a60 --- /dev/null +++ b/libraries/rush-lib/src/logic/selectors/test/SubspaceSelectorParser.test.ts @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import * as path from 'node:path'; + +import { StringBufferTerminalProvider, Terminal } from '@rushstack/terminal'; + +import { RushConfiguration } from '../../../api/RushConfiguration'; +import { SubspaceSelectorParser } from '../SubspaceSelectorParser'; + +describe(SubspaceSelectorParser.name, () => { + let rushConfiguration: RushConfiguration; + let terminal: Terminal; + let terminalProvider: StringBufferTerminalProvider; + let parser: SubspaceSelectorParser; + + beforeEach(() => { + const rushJsonFile: string = path.resolve(__dirname, '../../../api/test/repo/rush-npm.json'); + rushConfiguration = RushConfiguration.loadFromConfigurationFile(rushJsonFile); + terminalProvider = new StringBufferTerminalProvider(); + terminal = new Terminal(terminalProvider); + parser = new SubspaceSelectorParser(rushConfiguration); + }); + + it('should return completions based on configuration', () => { + const completions = Array.from(parser.getCompletions()); + // The test fixture doesn't have subspaces configured, so completions may be empty + expect(Array.isArray(completions)).toBe(true); + }); + + it('should select projects from default subspace', async () => { + const result = await parser.evaluateSelectorAsync({ + unscopedSelector: 'default', + terminal, + parameterName: '--only' + }); + + const projects = Array.from(result); + // Should get projects from the default subspace + expect(projects.length).toBeGreaterThan(0); + }); +}); diff --git a/libraries/rush-lib/src/logic/selectors/test/TagProjectSelectorParser.test.ts b/libraries/rush-lib/src/logic/selectors/test/TagProjectSelectorParser.test.ts new file mode 100644 index 00000000000..1c78cd5765f --- /dev/null +++ b/libraries/rush-lib/src/logic/selectors/test/TagProjectSelectorParser.test.ts @@ -0,0 +1,67 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import * as path from 'node:path'; + +import { StringBufferTerminalProvider, Terminal } from '@rushstack/terminal'; + +import { RushConfiguration } from '../../../api/RushConfiguration'; +import { TagProjectSelectorParser } from '../TagProjectSelectorParser'; + +describe(TagProjectSelectorParser.name, () => { + let rushConfiguration: RushConfiguration; + let terminal: Terminal; + let terminalProvider: StringBufferTerminalProvider; + let parser: TagProjectSelectorParser; + + beforeEach(() => { + const rushJsonFile: string = path.resolve(__dirname, '../../../api/test/repo/rush-npm.json'); + rushConfiguration = RushConfiguration.loadFromConfigurationFile(rushJsonFile); + terminalProvider = new StringBufferTerminalProvider(); + terminal = new Terminal(terminalProvider); + parser = new TagProjectSelectorParser(rushConfiguration); + }); + + it('should provide completions for tags', () => { + const completions = Array.from(parser.getCompletions()); + expect(completions.length).toBeGreaterThan(0); + expect(completions).toContain('frontend'); + expect(completions).toContain('backend'); + expect(completions).toContain('ui'); + }); + + it('should select projects by tag', async () => { + const result = await parser.evaluateSelectorAsync({ + unscopedSelector: 'frontend', + terminal, + parameterName: '--only' + }); + + const projects = Array.from(result); + expect(projects.length).toBe(2); + const packageNames = projects.map((p) => p.packageName).sort(); + expect(packageNames).toEqual(['project1', 'project3']); + }); + + it('should select single project by unique tag', async () => { + const result = await parser.evaluateSelectorAsync({ + unscopedSelector: 'backend', + terminal, + parameterName: '--only' + }); + + const projects = Array.from(result); + expect(projects).toHaveLength(1); + expect(projects[0].packageName).toBe('project2'); + }); + + it('should throw error for non-existent tag', async () => { + await expect( + parser.evaluateSelectorAsync({ + unscopedSelector: 'nonexistent-tag', + terminal, + parameterName: '--only' + }) + ).rejects.toThrow(); + }); +}); diff --git a/libraries/rush-lib/src/logic/selectors/test/VersionPolicyProjectSelectorParser.test.ts b/libraries/rush-lib/src/logic/selectors/test/VersionPolicyProjectSelectorParser.test.ts new file mode 100644 index 00000000000..e84c355cc8c --- /dev/null +++ b/libraries/rush-lib/src/logic/selectors/test/VersionPolicyProjectSelectorParser.test.ts @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import * as path from 'node:path'; + +import { StringBufferTerminalProvider, Terminal } from '@rushstack/terminal'; + +import { RushConfiguration } from '../../../api/RushConfiguration'; +import { VersionPolicyProjectSelectorParser } from '../VersionPolicyProjectSelectorParser'; + +describe(VersionPolicyProjectSelectorParser.name, () => { + let rushConfiguration: RushConfiguration; + let terminal: Terminal; + let terminalProvider: StringBufferTerminalProvider; + let parser: VersionPolicyProjectSelectorParser; + + beforeEach(() => { + const rushJsonFile: string = path.resolve(__dirname, '../../../api/test/repo/rush-npm.json'); + rushConfiguration = RushConfiguration.loadFromConfigurationFile(rushJsonFile); + terminalProvider = new StringBufferTerminalProvider(); + terminal = new Terminal(terminalProvider); + parser = new VersionPolicyProjectSelectorParser(rushConfiguration); + }); + + it('should return completions for version policies', () => { + const completions = Array.from(parser.getCompletions()); + expect(completions.length).toBeGreaterThan(0); + expect(completions).toContain('testPolicy'); + }); + + it('should select projects by version policy', async () => { + const result = await parser.evaluateSelectorAsync({ + unscopedSelector: 'testPolicy', + terminal, + parameterName: '--only' + }); + + const projects = Array.from(result); + expect(projects).toHaveLength(2); + const packageNames = projects.map((p) => p.packageName).sort(); + expect(packageNames).toEqual(['project1', 'project3']); + }); + + it('should throw error for non-existent version policy', async () => { + await expect( + parser.evaluateSelectorAsync({ + unscopedSelector: 'nonexistent-policy', + terminal, + parameterName: '--only' + }) + ).rejects.toThrow(); + }); +}); diff --git a/libraries/rush-lib/src/logic/setup/SetupPackageRegistry.ts b/libraries/rush-lib/src/logic/setup/SetupPackageRegistry.ts index 3a681a5b75e..ffbabe9e18b 100644 --- a/libraries/rush-lib/src/logic/setup/SetupPackageRegistry.ts +++ b/libraries/rush-lib/src/logic/setup/SetupPackageRegistry.ts @@ -11,7 +11,8 @@ import { InternalError, type JsonObject, NewlineKind, - Text + Text, + User } from '@rushstack/node-core-library'; import { PrintUtilities, Colorize, ConsoleTerminalProvider, Terminal } from '@rushstack/terminal'; @@ -353,7 +354,7 @@ export class SetupPackageRegistry { // ...then append the stuff we got from the REST API, but discard any junk that isn't a proper key/value linesToAdd.push(...responseLines.filter((x) => SetupPackageRegistry._getNpmrcKey(x) !== undefined)); - const npmrcPath: string = path.join(Utilities.getHomeFolder(), '.npmrc'); + const npmrcPath: string = path.join(User.getHomeFolder(), '.npmrc'); this._mergeLinesIntoNpmrc(npmrcPath, linesToAdd); } diff --git a/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/a/config/rush-project.json b/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/a/config/rush-project.json new file mode 100644 index 00000000000..103f06da2e0 --- /dev/null +++ b/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/a/config/rush-project.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json", + "operationSettings": [ + { + "operationName": "build", + "parameterNamesToIgnore": ["--production"] + } + ] +} diff --git a/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/a/package.json b/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/a/package.json new file mode 100644 index 00000000000..d77de36cc7b --- /dev/null +++ b/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/a/package.json @@ -0,0 +1,7 @@ +{ + "name": "a", + "version": "1.0.0", + "scripts": { + "build": "echo building a" + } +} diff --git a/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/b/config/rush-project.json b/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/b/config/rush-project.json new file mode 100644 index 00000000000..e6f27ab1857 --- /dev/null +++ b/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/b/config/rush-project.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json", + "operationSettings": [ + { + "operationName": "build", + "parameterNamesToIgnore": ["--verbose", "--config", "--mode", "--tags"] + } + ] +} diff --git a/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/b/package.json b/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/b/package.json new file mode 100644 index 00000000000..41a4b66e358 --- /dev/null +++ b/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/b/package.json @@ -0,0 +1,7 @@ +{ + "name": "b", + "version": "1.0.0", + "scripts": { + "build": "echo building b" + } +} diff --git a/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/common/config/rush/command-line.json b/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/common/config/rush/command-line.json new file mode 100644 index 00000000000..0f2df3fd189 --- /dev/null +++ b/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/common/config/rush/command-line.json @@ -0,0 +1,48 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/command-line.schema.json", + "commands": [], + "parameters": [ + { + "longName": "--production", + "description": "A production flag", + "parameterKind": "flag", + "associatedCommands": ["build"] + }, + { + "longName": "--verbose", + "description": "A verbose flag", + "parameterKind": "flag", + "associatedCommands": ["build"] + }, + { + "longName": "--config", + "description": "Config file path", + "parameterKind": "string", + "argumentName": "PATH", + "associatedCommands": ["build"] + }, + { + "longName": "--mode", + "description": "Build mode", + "parameterKind": "choice", + "alternatives": [ + { + "name": "dev", + "description": "Development mode" + }, + { + "name": "prod", + "description": "Production mode" + } + ], + "associatedCommands": ["build"] + }, + { + "longName": "--tags", + "description": "Build tags", + "parameterKind": "stringList", + "argumentName": "TAG", + "associatedCommands": ["build"] + } + ] +} diff --git a/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/rush.json b/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/rush.json new file mode 100644 index 00000000000..529024b893c --- /dev/null +++ b/libraries/rush-lib/src/logic/test/parameterIgnoringRepo/rush.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json", + "rushVersion": "5.162.0", + "pnpmVersion": "8.15.9", + "nodeSupportedVersionRange": ">=18.0.0", + "projects": [ + { + "packageName": "a", + "projectFolder": "a" + }, + { + "packageName": "b", + "projectFolder": "b" + } + ] +} diff --git a/libraries/rush-lib/src/schemas/rush-project.schema.json b/libraries/rush-lib/src/schemas/rush-project.schema.json index 52883eaa6c1..acf1b20e5ae 100644 --- a/libraries/rush-lib/src/schemas/rush-project.schema.json +++ b/libraries/rush-lib/src/schemas/rush-project.schema.json @@ -110,6 +110,14 @@ "ignoreChangedProjectsOnlyFlag": { "type": "boolean", "description": "If true, this operation never be skipped by the `--changed-projects-only` flag. This is useful for projects that bundle code from other packages." + }, + "parameterNamesToIgnore": { + "type": "array", + "description": "An optional list of custom command-line parameter names that should be ignored when invoking the command for this operation. The parameter names should match the exact longName field values from the command-line.json parameters array (e.g., '--production', '--verbose'). This allows a project to opt out of parameters that don't affect its operation, preventing unnecessary cache invalidation for this operation and its consumers.", + "items": { + "type": "string" + }, + "uniqueItems": true } } } diff --git a/libraries/rush-lib/src/utilities/HotlinkManager.ts b/libraries/rush-lib/src/utilities/HotlinkManager.ts index 677e2b770f8..24d0ad027c6 100644 --- a/libraries/rush-lib/src/utilities/HotlinkManager.ts +++ b/libraries/rush-lib/src/utilities/HotlinkManager.ts @@ -198,7 +198,7 @@ export class HotlinkManager { const packageSourcePath: string = `${consumerPackagePnpmDependenciesFolderPath}/${dirName}/${RushConstants.nodeModulesFolderName}/${packageName}`; if (await FileSystem.existsAsync(packageSourcePath)) { const { version } = await JsonFile.loadAsync(`${packageSourcePath}/${FileConstants.PackageJson}`); - if (semver.satisfies(version, versionRange)) { + if (semver.satisfies(version, versionRange, { includePrerelease: true })) { packageSourcePathSet.add(packageSourcePath); } } diff --git a/libraries/rush-lib/src/utilities/InteractiveUpgradeUI.ts b/libraries/rush-lib/src/utilities/InteractiveUpgradeUI.ts index 11e9640de3c..9e5d9bf1c06 100644 --- a/libraries/rush-lib/src/utilities/InteractiveUpgradeUI.ts +++ b/libraries/rush-lib/src/utilities/InteractiveUpgradeUI.ts @@ -5,14 +5,12 @@ // https://github.com/dylang/npm-check/blob/master/lib/out/interactive-update.js // Extended to use one type of text table -/// - import inquirer from 'inquirer'; import CliTable from 'cli-table'; import type Separator from 'inquirer/lib/objects/separator'; -import type * as NpmCheck from 'npm-check'; import { AnsiEscape, Colorize } from '@rushstack/terminal'; +import type { INpmCheckPackageSummary } from '@rushstack/npm-check-fork'; export interface IUIGroup { title: string; @@ -25,11 +23,11 @@ export interface IUIGroup { } export interface IDepsToUpgradeAnswers { - packages: NpmCheck.INpmCheckPackage[]; + packages: INpmCheckPackageSummary[]; } export interface IUpgradeInteractiveDepChoice { - value: NpmCheck.INpmCheckPackage; + value: INpmCheckPackageSummary; name: string | string[]; short: string; } @@ -82,7 +80,7 @@ export const UI_GROUPS: IUIGroup[] = [ } ]; -function label(dep: NpmCheck.INpmCheckPackage): string[] { +function label(dep: INpmCheckPackageSummary): string[] { const bumpInstalled: string = dep.bump ? dep.installed : ''; const installed: string = dep.mismatch ? dep.packageJson : bumpInstalled; const name: string = Colorize.yellow(dep.moduleName); @@ -95,15 +93,25 @@ function label(dep: NpmCheck.INpmCheckPackage): string[] { installed, installed && '>', Colorize.bold(dep.latest || ''), - dep.latest ? homepage : dep.regError || dep.pkgError + dep.latest ? homepage : getErrorDep(dep) ]; } -function short(dep: NpmCheck.INpmCheckPackage): string { +function getErrorDep(dep: INpmCheckPackageSummary): string { + if (dep.regError !== undefined && dep.regError && dep.regError instanceof Error) { + return dep.regError.message; + } else if (dep.pkgError !== undefined && dep.pkgError && dep.pkgError instanceof Error) { + return dep.pkgError.message; + } + + return ''; +} + +function short(dep: INpmCheckPackageSummary): string { return `${dep.moduleName}@${dep.latest}`; } -function getChoice(dep: NpmCheck.INpmCheckPackage): IUpgradeInteractiveDepChoice | boolean | Separator { +function getChoice(dep: INpmCheckPackageSummary): IUpgradeInteractiveDepChoice | boolean | Separator { if (!dep.mismatch && !dep.bump && !dep.notInstalled) { return false; } @@ -119,9 +127,9 @@ function unselectable(options?: { title: string }): Separator { return new inquirer.Separator(AnsiEscape.removeCodes(options ? options.title : '')); } -function createChoices(packages: NpmCheck.INpmCheckPackage[], options: IUIGroup): ChoiceTable { +function createChoices(packages: INpmCheckPackageSummary[], options: IUIGroup): ChoiceTable { const { filter } = options; - const filteredChoices: NpmCheck.INpmCheckPackage[] = packages.filter((pkg: NpmCheck.INpmCheckPackage) => { + const filteredChoices: INpmCheckPackageSummary[] = packages.filter((pkg: INpmCheckPackageSummary) => { if ('mismatch' in filter && pkg.mismatch !== filter.mismatch) { return false; } else if ('bump' in filter && pkg.bump !== filter.bump) { @@ -131,7 +139,7 @@ function createChoices(packages: NpmCheck.INpmCheckPackage[], options: IUIGroup) } else { return true; } - }) as NpmCheck.INpmCheckPackage[]; + }) as INpmCheckPackageSummary[]; const choices: (IUpgradeInteractiveDepChoice | Separator | boolean)[] = filteredChoices .map(getChoice) @@ -179,9 +187,7 @@ function createChoices(packages: NpmCheck.INpmCheckPackage[], options: IUIGroup) } } -export const upgradeInteractive = async ( - pkgs: NpmCheck.INpmCheckPackage[] -): Promise => { +export const upgradeInteractive = async (pkgs: INpmCheckPackageSummary[]): Promise => { const choicesGrouped: ChoiceTable[] = UI_GROUPS.map((group) => createChoices(pkgs, group)).filter(Boolean); const choices: ChoiceTable = []; diff --git a/libraries/rush-lib/src/utilities/Utilities.ts b/libraries/rush-lib/src/utilities/Utilities.ts index e403ccacbd2..f339fdb5ce9 100644 --- a/libraries/rush-lib/src/utilities/Utilities.ts +++ b/libraries/rush-lib/src/utilities/Utilities.ts @@ -16,7 +16,8 @@ import { SubprocessTerminator, Executable, type IWaitForExitResult, - Async + Async, + type IWaitForExitResultWithoutOutput } from '@rushstack/node-core-library'; import type { RushConfiguration } from '../api/RushConfiguration'; @@ -161,6 +162,11 @@ export type OptionalToUndefined = Omit> & { [K in OptionalKeys]-?: Exclude | undefined; }; +type IExecuteCommandInternalOptions = Omit & { + stdio: child_process.SpawnSyncOptions['stdio']; + captureOutput: boolean; +}; + export class Utilities { public static syncNpmrc: typeof syncNpmrc = syncNpmrc; @@ -781,6 +787,16 @@ export class Utilities { * Executes the command with the specified command-line parameters, and waits for it to complete. * The current directory will be set to the specified workingDirectory. */ + private static async _executeCommandInternalAsync( + options: IExecuteCommandInternalOptions & { captureOutput: true } + ): Promise>; + /** + * Executes the command with the specified command-line parameters, and waits for it to complete. + * The current directory will be set to the specified workingDirectory. This does not capture output. + */ + private static async _executeCommandInternalAsync( + options: IExecuteCommandInternalOptions & { captureOutput: false | undefined } + ): Promise; private static async _executeCommandInternalAsync({ command, args, @@ -791,10 +807,7 @@ export class Utilities { onStdoutStreamChunk, captureOutput, captureExitCodeAndSignal - }: Omit & { - stdio: child_process.SpawnSyncOptions['stdio']; - captureOutput: boolean; - }): Promise { + }: IExecuteCommandInternalOptions): Promise | IWaitForExitResultWithoutOutput> { const options: child_process.SpawnSyncOptions = { cwd: workingDirectory, shell: true, diff --git a/libraries/rush-lib/src/utilities/WebClient.ts b/libraries/rush-lib/src/utilities/WebClient.ts index 668a4253998..bdd16823332 100644 --- a/libraries/rush-lib/src/utilities/WebClient.ts +++ b/libraries/rush-lib/src/utilities/WebClient.ts @@ -3,8 +3,7 @@ import * as os from 'node:os'; import * as process from 'node:process'; -import type * as http from 'node:http'; -import { request as httpRequest, type IncomingMessage } from 'node:http'; +import { request as httpRequest, type IncomingMessage, type Agent as HttpAgent } from 'node:http'; import { request as httpsRequest, type RequestOptions } from 'node:https'; import { Import, LegacyAdapters } from '@rushstack/node-core-library'; @@ -287,7 +286,7 @@ export class WebClient { break; } - let agent: http.Agent | undefined = undefined; + let agent: HttpAgent | undefined = undefined; if (proxyUrl) { agent = createHttpsProxyAgent(proxyUrl); } diff --git a/libraries/rush-lib/src/utilities/objectUtilities.ts b/libraries/rush-lib/src/utilities/objectUtilities.ts index 6224b94dc30..7261c88ef4d 100644 --- a/libraries/rush-lib/src/utilities/objectUtilities.ts +++ b/libraries/rush-lib/src/utilities/objectUtilities.ts @@ -1,65 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -/** - * Determines if two objects are deeply equal. - */ -export function objectsAreDeepEqual(a: TObject, b: TObject): boolean { - if (a === b) { - return true; - } else { - const aType: string = typeof a; - const bType: string = typeof b; - if (aType !== bType) { - return false; - } else { - if (aType === 'object') { - if (a === null || b === null) { - // We already handled the case where a === b, so if either is null, they are not equal - return false; - } else if (Array.isArray(a)) { - if (!Array.isArray(b) || a.length !== b.length) { - return false; - } else { - for (let i: number = 0; i < a.length; ++i) { - if (!objectsAreDeepEqual(a[i], b[i])) { - return false; - } - } - - return true; - } - } else { - const aObjectProperties: Set = new Set(Object.getOwnPropertyNames(a)); - const bObjectProperties: Set = new Set(Object.getOwnPropertyNames(b)); - if (aObjectProperties.size !== bObjectProperties.size) { - return false; - } else { - for (const property of aObjectProperties) { - if (bObjectProperties.delete(property)) { - if ( - !objectsAreDeepEqual( - (a as Record)[property], - (b as Record)[property] - ) - ) { - return false; - } - } else { - return false; - } - } - - return bObjectProperties.size === 0; - } - } - } else { - return false; - } - } - } -} - export function cloneDeep(obj: TObject): TObject { return cloneDeepInner(obj, new Set()); } diff --git a/libraries/rush-lib/src/utilities/test/objectUtilities.test.ts b/libraries/rush-lib/src/utilities/test/objectUtilities.test.ts index 9235fd63ab8..ce023119369 100644 --- a/libraries/rush-lib/src/utilities/test/objectUtilities.test.ts +++ b/libraries/rush-lib/src/utilities/test/objectUtilities.test.ts @@ -1,82 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -import { objectsAreDeepEqual, cloneDeep, merge, removeNullishProps } from '../objectUtilities'; +import { cloneDeep, merge, removeNullishProps } from '../objectUtilities'; describe('objectUtilities', () => { - describe(objectsAreDeepEqual.name, () => { - it('can compare primitives', () => { - expect(objectsAreDeepEqual(1, 1)).toEqual(true); - expect(objectsAreDeepEqual(1, undefined)).toEqual(false); - expect(objectsAreDeepEqual(1, null)).toEqual(false); - expect(objectsAreDeepEqual(undefined, 1)).toEqual(false); - expect(objectsAreDeepEqual(null, 1)).toEqual(false); - expect(objectsAreDeepEqual(1, 2)).toEqual(false); - - expect(objectsAreDeepEqual('a', 'a')).toEqual(true); - expect(objectsAreDeepEqual('a', undefined)).toEqual(false); - expect(objectsAreDeepEqual('a', null)).toEqual(false); - expect(objectsAreDeepEqual(undefined, 'a')).toEqual(false); - expect(objectsAreDeepEqual(null, 'a')).toEqual(false); - expect(objectsAreDeepEqual('a', 'b')).toEqual(false); - - expect(objectsAreDeepEqual(true, true)).toEqual(true); - expect(objectsAreDeepEqual(true, undefined)).toEqual(false); - expect(objectsAreDeepEqual(true, null)).toEqual(false); - expect(objectsAreDeepEqual(undefined, true)).toEqual(false); - expect(objectsAreDeepEqual(null, true)).toEqual(false); - expect(objectsAreDeepEqual(true, false)).toEqual(false); - - expect(objectsAreDeepEqual(undefined, undefined)).toEqual(true); - expect(objectsAreDeepEqual(undefined, null)).toEqual(false); - expect(objectsAreDeepEqual(null, null)).toEqual(true); - }); - - it('can compare arrays', () => { - expect(objectsAreDeepEqual([], [])).toEqual(true); - expect(objectsAreDeepEqual([], undefined)).toEqual(false); - expect(objectsAreDeepEqual([], null)).toEqual(false); - expect(objectsAreDeepEqual(undefined, [])).toEqual(false); - expect(objectsAreDeepEqual(null, [])).toEqual(false); - - expect(objectsAreDeepEqual([1], [1])).toEqual(true); - expect(objectsAreDeepEqual([1], [2])).toEqual(false); - - expect(objectsAreDeepEqual([1, 2], [1, 2])).toEqual(true); - expect(objectsAreDeepEqual([1, 2], [2, 1])).toEqual(false); - - expect(objectsAreDeepEqual([1, 2, 3], [1, 2, 3])).toEqual(true); - expect(objectsAreDeepEqual([1, 2, 3], [1, 2, 4])).toEqual(false); - }); - - it('can compare objects', () => { - expect(objectsAreDeepEqual({}, {})).toEqual(true); - expect(objectsAreDeepEqual({}, undefined)).toEqual(false); - expect(objectsAreDeepEqual({}, null)).toEqual(false); - expect(objectsAreDeepEqual(undefined, {})).toEqual(false); - expect(objectsAreDeepEqual(null, {})).toEqual(false); - - expect(objectsAreDeepEqual({ a: 1 }, { a: 1 })).toEqual(true); - expect(objectsAreDeepEqual({ a: 1 }, { a: 2 })).toEqual(false); - expect(objectsAreDeepEqual({ a: 1 }, {})).toEqual(false); - expect(objectsAreDeepEqual({}, { a: 1 })).toEqual(false); - expect(objectsAreDeepEqual({ a: 1 }, { b: 1 })).toEqual(false); - - expect(objectsAreDeepEqual({ a: 1, b: 2 }, { a: 1, b: 2 })).toEqual(true); - expect(objectsAreDeepEqual({ a: 1, b: 2 }, { a: 1, b: 3 })).toEqual(false); - expect(objectsAreDeepEqual({ a: 1, b: 2 }, { a: 1, c: 2 })).toEqual(false); - expect(objectsAreDeepEqual({ a: 1, b: 2 }, { b: 2, a: 1 })).toEqual(true); - }); - - it('can compare nested objects', () => { - expect(objectsAreDeepEqual({ a: { b: 1 } }, { a: { b: 1 } })).toEqual(true); - expect(objectsAreDeepEqual({ a: { b: 1 } }, { a: { b: 2 } })).toEqual(false); - expect(objectsAreDeepEqual({ a: { b: 1 } }, { a: { c: 1 } })).toEqual(false); - expect(objectsAreDeepEqual({ a: { b: 1 } }, { a: { b: 1, c: 2 } })).toEqual(false); - expect(objectsAreDeepEqual({ a: { b: 1 } }, { a: { b: 1 }, c: 2 })).toEqual(false); - }); - }); - describe(cloneDeep.name, () => { function testClone(source: unknown): void { const clone: unknown = cloneDeep(source); diff --git a/libraries/rush-sdk/package.json b/libraries/rush-sdk/package.json index 58d6af3e43f..5ee83a57f4f 100644 --- a/libraries/rush-sdk/package.json +++ b/libraries/rush-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/rush-sdk", - "version": "5.160.1", + "version": "5.162.0", "description": "An API for interacting with the Rush engine", "repository": { "type": "git", @@ -40,6 +40,7 @@ "license": "MIT", "dependencies": { "@pnpm/lockfile.types": "~1.0.3", + "@rushstack/credential-cache": "workspace:*", "@rushstack/lookup-by-path": "workspace:*", "@rushstack/node-core-library": "workspace:*", "@rushstack/package-deps-hash": "workspace:*", diff --git a/libraries/stream-collator/CHANGELOG.json b/libraries/stream-collator/CHANGELOG.json index 88097c6be3a..febcf4a3d79 100644 --- a/libraries/stream-collator/CHANGELOG.json +++ b/libraries/stream-collator/CHANGELOG.json @@ -1,6 +1,66 @@ { "name": "@rushstack/stream-collator", "entries": [ + { + "version": "4.1.117", + "tag": "@rushstack/stream-collator_v4.1.117", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "4.1.116", + "tag": "@rushstack/stream-collator_v4.1.116", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "4.1.115", + "tag": "@rushstack/stream-collator_v4.1.115", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "4.1.114", + "tag": "@rushstack/stream-collator_v4.1.114", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "4.1.113", "tag": "@rushstack/stream-collator_v4.1.113", diff --git a/libraries/stream-collator/CHANGELOG.md b/libraries/stream-collator/CHANGELOG.md index 076b9327fe9..4bd6689fa94 100644 --- a/libraries/stream-collator/CHANGELOG.md +++ b/libraries/stream-collator/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/stream-collator -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 4.1.117 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 4.1.116 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 4.1.115 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 4.1.114 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 4.1.113 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/libraries/stream-collator/package.json b/libraries/stream-collator/package.json index 376acc9d223..99668cd9659 100644 --- a/libraries/stream-collator/package.json +++ b/libraries/stream-collator/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/stream-collator", - "version": "4.1.113", + "version": "4.1.117", "description": "Display intelligible realtime output from concurrent processes", "repository": { "type": "git", diff --git a/libraries/terminal/CHANGELOG.json b/libraries/terminal/CHANGELOG.json index 84a918d09db..dc845d352f5 100644 --- a/libraries/terminal/CHANGELOG.json +++ b/libraries/terminal/CHANGELOG.json @@ -1,6 +1,30 @@ { "name": "@rushstack/terminal", "entries": [ + { + "version": "0.19.3", + "tag": "@rushstack/terminal_v0.19.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + } + ] + } + }, + { + "version": "0.19.2", + "tag": "@rushstack/terminal_v0.19.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + } + ] + } + }, { "version": "0.19.1", "tag": "@rushstack/terminal_v0.19.1", diff --git a/libraries/terminal/CHANGELOG.md b/libraries/terminal/CHANGELOG.md index 50f0183a9ae..4889b965324 100644 --- a/libraries/terminal/CHANGELOG.md +++ b/libraries/terminal/CHANGELOG.md @@ -1,6 +1,16 @@ # Change Log - @rushstack/terminal -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Fri, 24 Oct 2025 00:13:38 GMT and should not be manually modified. + +## 0.19.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.19.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.19.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/libraries/terminal/package.json b/libraries/terminal/package.json index b1b97ecdd94..9766b19ae0e 100644 --- a/libraries/terminal/package.json +++ b/libraries/terminal/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/terminal", - "version": "0.19.1", + "version": "0.19.3", "description": "User interface primitives for console applications", "main": "lib/index.js", "typings": "dist/terminal.d.ts", @@ -21,7 +21,7 @@ "supports-color": "~8.1.1" }, "devDependencies": { - "@rushstack/heft": "1.1.0", + "@rushstack/heft": "1.1.4", "@types/supports-color": "8.1.3", "decoupled-local-node-rig": "workspace:*", "eslint": "~9.37.0" diff --git a/libraries/tree-pattern/package.json b/libraries/tree-pattern/package.json index 98646f59ebb..018c2a0254e 100644 --- a/libraries/tree-pattern/package.json +++ b/libraries/tree-pattern/package.json @@ -16,7 +16,7 @@ "_phase:test": "heft run --only test -- --clean" }, "devDependencies": { - "@rushstack/heft": "1.1.0", + "@rushstack/heft": "1.1.4", "decoupled-local-node-rig": "workspace:*", "eslint": "~9.37.0" } diff --git a/libraries/ts-command-line/CHANGELOG.json b/libraries/ts-command-line/CHANGELOG.json index 89481d69809..88cc247d01a 100644 --- a/libraries/ts-command-line/CHANGELOG.json +++ b/libraries/ts-command-line/CHANGELOG.json @@ -1,6 +1,36 @@ { "name": "@rushstack/ts-command-line", "entries": [ + { + "version": "5.1.3", + "tag": "@rushstack/ts-command-line_v5.1.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + } + ] + } + }, + { + "version": "5.1.2", + "tag": "@rushstack/ts-command-line_v5.1.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + } + ] + } + }, { "version": "5.1.1", "tag": "@rushstack/ts-command-line_v5.1.1", diff --git a/libraries/ts-command-line/CHANGELOG.md b/libraries/ts-command-line/CHANGELOG.md index 5d7c41020d5..0564cb39868 100644 --- a/libraries/ts-command-line/CHANGELOG.md +++ b/libraries/ts-command-line/CHANGELOG.md @@ -1,6 +1,16 @@ # Change Log - @rushstack/ts-command-line -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Fri, 24 Oct 2025 00:13:38 GMT and should not be manually modified. + +## 5.1.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 5.1.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 5.1.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/libraries/ts-command-line/package.json b/libraries/ts-command-line/package.json index c5801a07651..f1d5d413400 100644 --- a/libraries/ts-command-line/package.json +++ b/libraries/ts-command-line/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/ts-command-line", - "version": "5.1.1", + "version": "5.1.3", "description": "An object-oriented command-line parser for TypeScript", "repository": { "type": "git", @@ -22,7 +22,7 @@ "string-argv": "~0.3.1" }, "devDependencies": { - "@rushstack/heft": "1.1.0", + "@rushstack/heft": "1.1.4", "@rushstack/node-core-library": "workspace:*", "decoupled-local-node-rig": "workspace:*", "eslint": "~9.37.0" diff --git a/libraries/typings-generator/CHANGELOG.json b/libraries/typings-generator/CHANGELOG.json index 610761189b2..2683ee43c85 100644 --- a/libraries/typings-generator/CHANGELOG.json +++ b/libraries/typings-generator/CHANGELOG.json @@ -1,6 +1,66 @@ { "name": "@rushstack/typings-generator", "entries": [ + { + "version": "0.15.5", + "tag": "@rushstack/typings-generator_v0.15.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.15.4", + "tag": "@rushstack/typings-generator_v0.15.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.15.3", + "tag": "@rushstack/typings-generator_v0.15.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.15.2", + "tag": "@rushstack/typings-generator_v0.15.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "0.15.1", "tag": "@rushstack/typings-generator_v0.15.1", diff --git a/libraries/typings-generator/CHANGELOG.md b/libraries/typings-generator/CHANGELOG.md index d5c1af337be..e3f3f36bf98 100644 --- a/libraries/typings-generator/CHANGELOG.md +++ b/libraries/typings-generator/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/typings-generator -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.15.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.15.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.15.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.15.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.15.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/libraries/typings-generator/package.json b/libraries/typings-generator/package.json index 13acc49a5fb..44a95f75470 100644 --- a/libraries/typings-generator/package.json +++ b/libraries/typings-generator/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/typings-generator", - "version": "0.15.1", + "version": "0.15.5", "description": "This library provides functionality for automatically generating typings for non-TS files.", "keywords": [ "dts", diff --git a/libraries/worker-pool/CHANGELOG.json b/libraries/worker-pool/CHANGELOG.json index f48ad6831db..7cc275690ef 100644 --- a/libraries/worker-pool/CHANGELOG.json +++ b/libraries/worker-pool/CHANGELOG.json @@ -1,6 +1,54 @@ { "name": "@rushstack/worker-pool", "entries": [ + { + "version": "0.6.5", + "tag": "@rushstack/worker-pool_v0.6.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.6.4", + "tag": "@rushstack/worker-pool_v0.6.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.6.3", + "tag": "@rushstack/worker-pool_v0.6.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.6.2", + "tag": "@rushstack/worker-pool_v0.6.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "0.6.1", "tag": "@rushstack/worker-pool_v0.6.1", diff --git a/libraries/worker-pool/CHANGELOG.md b/libraries/worker-pool/CHANGELOG.md index 995477e2e34..f8d5fa18513 100644 --- a/libraries/worker-pool/CHANGELOG.md +++ b/libraries/worker-pool/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/worker-pool -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.6.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.6.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.6.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.6.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.6.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/libraries/worker-pool/package.json b/libraries/worker-pool/package.json index f6f7999bb58..04c3fa36354 100644 --- a/libraries/worker-pool/package.json +++ b/libraries/worker-pool/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/worker-pool", - "version": "0.6.1", + "version": "0.6.5", "description": "Lightweight worker pool using NodeJS worker_threads", "main": "lib/index.js", "typings": "dist/worker-pool.d.ts", diff --git a/repo-scripts/doc-plugin-rush-stack/package.json b/repo-scripts/doc-plugin-rush-stack/package.json index 00d9533c08b..422186b3fdd 100644 --- a/repo-scripts/doc-plugin-rush-stack/package.json +++ b/repo-scripts/doc-plugin-rush-stack/package.json @@ -13,7 +13,7 @@ "dependencies": { "@microsoft/api-documenter": "workspace:*", "@microsoft/api-extractor-model": "workspace:*", - "@microsoft/tsdoc": "~0.15.1", + "@microsoft/tsdoc": "~0.16.0", "@rushstack/node-core-library": "workspace:*", "js-yaml": "~4.1.0" }, diff --git a/repo-scripts/repo-toolbox/package.json b/repo-scripts/repo-toolbox/package.json index b9a50d5eb5a..5a56b906323 100644 --- a/repo-scripts/repo-toolbox/package.json +++ b/repo-scripts/repo-toolbox/package.json @@ -14,11 +14,10 @@ "@rushstack/node-core-library": "workspace:*", "@rushstack/terminal": "workspace:*", "@rushstack/ts-command-line": "workspace:*", - "diff": "~5.0.0" + "diff": "~8.0.2" }, "devDependencies": { "@rushstack/heft": "workspace:*", - "@types/diff": "5.0.1", "eslint": "~9.37.0", "local-node-rig": "workspace:*" } diff --git a/repo-scripts/repo-toolbox/src/ToolboxCommandLine.ts b/repo-scripts/repo-toolbox/src/ToolboxCommandLine.ts deleted file mode 100644 index 475a4b48aa9..00000000000 --- a/repo-scripts/repo-toolbox/src/ToolboxCommandLine.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -import { CommandLineParser } from '@rushstack/ts-command-line'; - -import { ReadmeAction } from './ReadmeAction'; -import { RecordVersionsAction } from './RecordVersionsAction'; -import { BumpCyclicsAction } from './BumpCyclicsAction'; - -export class ToolboxCommandLine extends CommandLineParser { - public constructor() { - super({ - toolFilename: 'toolbox', - toolDescription: 'Used to execute various operations specific to this repo' - }); - - this.addAction(new ReadmeAction()); - this.addAction(new RecordVersionsAction()); - this.addAction(new BumpCyclicsAction()); - } -} diff --git a/repo-scripts/repo-toolbox/src/cli/ToolboxCommandLine.ts b/repo-scripts/repo-toolbox/src/cli/ToolboxCommandLine.ts new file mode 100644 index 00000000000..aeadc6150cc --- /dev/null +++ b/repo-scripts/repo-toolbox/src/cli/ToolboxCommandLine.ts @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import { CommandLineParser } from '@rushstack/ts-command-line'; +import { ConsoleTerminalProvider, type ITerminal, Terminal } from '@rushstack/terminal'; + +import { ReadmeAction } from './actions/ReadmeAction'; +import { RecordVersionsAction } from './actions/RecordVersionsAction'; +import { BumpDecoupledLocalDependencies } from './actions/BumpDecoupledLocalDependencies'; +import { CollectJsonSchemasAction } from './actions/CollectJsonSchemasAction'; + +export class ToolboxCommandLine extends CommandLineParser { + public constructor() { + super({ + toolFilename: 'toolbox', + toolDescription: 'Used to execute various operations specific to this repo' + }); + + const terminal: ITerminal = new Terminal(new ConsoleTerminalProvider()); + + this.addAction(new ReadmeAction(terminal)); + this.addAction(new RecordVersionsAction(terminal)); + this.addAction(new BumpDecoupledLocalDependencies(terminal)); + this.addAction(new CollectJsonSchemasAction(terminal)); + } +} diff --git a/repo-scripts/repo-toolbox/src/BumpCyclicsAction.ts b/repo-scripts/repo-toolbox/src/cli/actions/BumpDecoupledLocalDependencies.ts similarity index 72% rename from repo-scripts/repo-toolbox/src/BumpCyclicsAction.ts rename to repo-scripts/repo-toolbox/src/cli/actions/BumpDecoupledLocalDependencies.ts index 2c43ef5874f..7d60e1e775f 100644 --- a/repo-scripts/repo-toolbox/src/BumpCyclicsAction.ts +++ b/repo-scripts/repo-toolbox/src/cli/actions/BumpDecoupledLocalDependencies.ts @@ -4,21 +4,25 @@ import type { ChildProcess } from 'node:child_process'; import { Async, Executable, JsonFile } from '@rushstack/node-core-library'; -import { ConsoleTerminalProvider, Terminal } from '@rushstack/terminal'; -import { DependencyType, RushConfiguration } from '@microsoft/rush-lib'; +import type { ITerminal } from '@rushstack/terminal'; +import { DependencyType, RushConfiguration, type CommonVersionsConfiguration } from '@microsoft/rush-lib'; import { CommandLineAction } from '@rushstack/ts-command-line'; -export class BumpCyclicsAction extends CommandLineAction { - public constructor() { +export class BumpDecoupledLocalDependencies extends CommandLineAction { + private readonly _terminal: ITerminal; + + public constructor(terminal: ITerminal) { super({ - actionName: 'bump-cyclic-dependencies', - summary: 'Updates cyclic dependencies inside the repo.', + actionName: 'bump-decoupled-local-dependencies', + summary: 'Updates decoupled local dependencies inside the repo.', documentation: '' }); + + this._terminal = terminal; } protected override async onExecuteAsync(): Promise { - const terminal: Terminal = new Terminal(new ConsoleTerminalProvider()); + const terminal: ITerminal = this._terminal; const rushConfiguration: RushConfiguration = RushConfiguration.loadFromDefaultLocation({ startingFolder: process.cwd() }); @@ -46,12 +50,25 @@ export class BumpCyclicsAction extends CommandLineAction { terminal.writeLine(); for (const project of rushConfiguration.projects) { + const commonVersions: CommonVersionsConfiguration = project.subspace.getCommonVersions(); + for (const cyclicDependencyProject of project.decoupledLocalDependencies) { - const version: string = cyclicDependencyVersions.get(cyclicDependencyProject)!; + const existingVersion: string | undefined = + project.packageJson.dependencies?.[cyclicDependencyProject] ?? + project.packageJson.devDependencies?.[cyclicDependencyProject]; + if ( + existingVersion && + commonVersions.allowedAlternativeVersions.get(cyclicDependencyProject)?.includes(existingVersion) + ) { + // Skip if the existing version is allowed by common-versions.json + continue; + } + + const newVersion: string = cyclicDependencyVersions.get(cyclicDependencyProject)!; if (project.packageJsonEditor.tryGetDependency(cyclicDependencyProject)) { project.packageJsonEditor.addOrUpdateDependency( cyclicDependencyProject, - version, + newVersion, DependencyType.Regular ); } @@ -59,7 +76,7 @@ export class BumpCyclicsAction extends CommandLineAction { if (project.packageJsonEditor.tryGetDevDependency(cyclicDependencyProject)) { project.packageJsonEditor.addOrUpdateDependency( cyclicDependencyProject, - version, + newVersion, DependencyType.Dev ); } @@ -80,7 +97,7 @@ export class BumpCyclicsAction extends CommandLineAction { terminal.writeLine(`Updated ${rushConfiguration.rushJsonFile}`); } - private async _getLatestPublishedVersionAsync(terminal: Terminal, packageName: string): Promise { + private async _getLatestPublishedVersionAsync(terminal: ITerminal, packageName: string): Promise { return await new Promise((resolve: (result: string) => void, reject: (error: Error) => void) => { const childProcess: ChildProcess = Executable.spawn('npm', ['view', packageName, 'version'], { stdio: ['ignore', 'pipe', 'pipe'] diff --git a/repo-scripts/repo-toolbox/src/cli/actions/CollectJsonSchemasAction.ts b/repo-scripts/repo-toolbox/src/cli/actions/CollectJsonSchemasAction.ts new file mode 100644 index 00000000000..1c39843eba2 --- /dev/null +++ b/repo-scripts/repo-toolbox/src/cli/actions/CollectJsonSchemasAction.ts @@ -0,0 +1,142 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import * as path from 'node:path'; + +import { FileSystem, AlreadyReportedError, Async, type FolderItem } from '@rushstack/node-core-library'; +import type { ITerminal } from '@rushstack/terminal'; +import { RushConfiguration, type RushConfigurationProject } from '@microsoft/rush-lib'; +import { CommandLineAction, type IRequiredCommandLineStringParameter } from '@rushstack/ts-command-line'; + +interface IFolderItemToCopy { + absolutePath: string; + relativePath: string; + content: string; +} + +async function* _getFolderItemsRecursiveAsync( + folderAbsolutePath: string, + folderRelativePath: string = '' +): AsyncIterable { + let folderItems: FolderItem[]; + try { + folderItems = await FileSystem.readFolderItemsAsync(folderAbsolutePath); + } catch (e) { + if (!FileSystem.isNotExistError(e)) { + throw e; + } else { + return; + } + } + + for (const entry of folderItems) { + const entryRelativePath: string = `${folderRelativePath}/${entry.name}`; + const entryAbsolutePath: string = `${folderAbsolutePath}/${entry.name}`; + if (entry.isDirectory()) { + yield* _getFolderItemsRecursiveAsync(entryAbsolutePath, entryRelativePath); + } else { + const content: string = await FileSystem.readFileAsync(entryAbsolutePath); + yield { + absolutePath: entryAbsolutePath, + relativePath: entryRelativePath, + content + }; + } + } +} + +export class CollectJsonSchemasAction extends CommandLineAction { + private readonly _outputPathParameter: IRequiredCommandLineStringParameter; + + private readonly _terminal: ITerminal; + + public constructor(terminal: ITerminal) { + super({ + actionName: 'collect-json-schemas', + summary: 'Generates JSON schema files based on rush.json inventory', + documentation: "Use this to update the repo's JSON schema files" + }); + + this._terminal = terminal; + + this._outputPathParameter = this.defineStringParameter({ + parameterLongName: '--output-path', + description: 'Path to the output directory for the generated JSON schema files.', + argumentName: 'PATH', + required: true + }); + } + + protected override async onExecuteAsync(): Promise { + const terminal: ITerminal = this._terminal; + const rushConfiguration: RushConfiguration = RushConfiguration.loadFromDefaultLocation(); + + const outputPath: string = path.resolve(this._outputPathParameter.value); + + const contentByAbsolutePathByRelativePath: Map> = new Map(); + + await Async.forEachAsync( + rushConfiguration.projects, + async ({ projectFolder }: RushConfigurationProject) => { + const schemaFiles: AsyncIterable = _getFolderItemsRecursiveAsync( + `${projectFolder}/temp/json-schemas`, + '' + ); + await Async.forEachAsync( + schemaFiles, + async ({ absolutePath, relativePath, content }) => { + let contentByAbsolutePath: Map | undefined = + contentByAbsolutePathByRelativePath.get(relativePath); + if (!contentByAbsolutePath) { + contentByAbsolutePath = new Map(); + contentByAbsolutePathByRelativePath.set(relativePath, contentByAbsolutePath); + } + + let absolutePaths: string[] | undefined = contentByAbsolutePath.get(content); + if (!absolutePaths) { + absolutePaths = []; + contentByAbsolutePath.set(content, absolutePaths); + } + + absolutePaths.push(absolutePath); + }, + { concurrency: 5 } + ); + }, + { concurrency: 5 } + ); + + let encounteredCollisions: boolean = false; + const filesToWrite: Map = new Map(); + for (const [relativePath, contentByAbsolutePath] of contentByAbsolutePathByRelativePath) { + if (contentByAbsolutePath.size > 1) { + encounteredCollisions = true; + + terminal.writeErrorLine( + `Multiple projects generated different contents for the JSON schema "${relativePath}":` + ); + + for (const absolutePaths of contentByAbsolutePath.values()) { + for (const absolutePath of absolutePaths) { + terminal.writeErrorLine(` - ${absolutePath}`); + } + } + } else { + filesToWrite.set(`${outputPath}/${relativePath}`, Array.from(contentByAbsolutePath.keys())[0]); + } + } + + if (encounteredCollisions) { + throw new AlreadyReportedError(); + } else { + await FileSystem.ensureEmptyFolderAsync(outputPath); + + await Async.forEachAsync( + filesToWrite, + async ([outPath, content]) => + await FileSystem.writeFileAsync(outPath, content, { ensureFolderExists: true }), + { concurrency: 25 } + ); + } + } +} diff --git a/repo-scripts/repo-toolbox/src/ReadmeAction.ts b/repo-scripts/repo-toolbox/src/cli/actions/ReadmeAction.ts similarity index 83% rename from repo-scripts/repo-toolbox/src/ReadmeAction.ts rename to repo-scripts/repo-toolbox/src/cli/actions/ReadmeAction.ts index 01961880ea3..6fa73e971a2 100644 --- a/repo-scripts/repo-toolbox/src/ReadmeAction.ts +++ b/repo-scripts/repo-toolbox/src/cli/actions/ReadmeAction.ts @@ -1,28 +1,32 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -import * as path from 'node:path'; - import * as Diff from 'diff'; import { StringBuilder, Sort, FileSystem, Text, AlreadyReportedError } from '@rushstack/node-core-library'; -import { Terminal, ConsoleTerminalProvider, Colorize } from '@rushstack/terminal'; +import { Colorize, type ITerminal } from '@rushstack/terminal'; import { RushConfiguration, type RushConfigurationProject, LockStepVersionPolicy } from '@microsoft/rush-lib'; import { CommandLineAction, type CommandLineFlagParameter } from '@rushstack/ts-command-line'; const GENERATED_PROJECT_SUMMARY_START_COMMENT_TEXT: string = ''; const GENERATED_PROJECT_SUMMARY_END_COMMENT_TEXT: string = ''; +const README_FILENAME: string = 'README.md'; + export class ReadmeAction extends CommandLineAction { private readonly _verifyParameter: CommandLineFlagParameter; - public constructor() { + private readonly _terminal: ITerminal; + + public constructor(terminal: ITerminal) { super({ actionName: 'readme', summary: 'Generates README.md project table based on rush.json inventory', documentation: "Use this to update the repo's README.md" }); + this._terminal = terminal; + this._verifyParameter = this.defineFlagParameter({ parameterLongName: '--verify', parameterShortName: '-v', @@ -37,7 +41,7 @@ export class ReadmeAction extends CommandLineAction { protected override async onExecuteAsync(): Promise { const rushConfiguration: RushConfiguration = RushConfiguration.loadFromDefaultLocation(); - const repoReadmePath: string = path.resolve(rushConfiguration.rushJsonFolder, 'README.md'); + const repoReadmePath: string = `${rushConfiguration.rushJsonFolder}/${README_FILENAME}`; let existingReadme: string = await FileSystem.readFileAsync(repoReadmePath); existingReadme = Text.convertToLf(existingReadme); const generatedProjectSummaryStartIndex: number = existingReadme.indexOf( @@ -54,12 +58,12 @@ export class ReadmeAction extends CommandLineAction { ); } - const readmePrefix: string = existingReadme.substr( + const readmePrefix: string = existingReadme.substring( 0, generatedProjectSummaryStartIndex + GENERATED_PROJECT_SUMMARY_START_COMMENT_TEXT.length ); - const readmePostfix: string = existingReadme.substr(generatedProjectSummaryEndIndex); + const readmePostfix: string = existingReadme.substring(generatedProjectSummaryEndIndex); const builder: StringBuilder = new StringBuilder(); const orderedProjects: RushConfigurationProject[] = [...rushConfiguration.projects]; @@ -146,32 +150,19 @@ export class ReadmeAction extends CommandLineAction { builder.append(readmePostfix); const readmeString: string = builder.toString(); - const diff: Diff.Change[] = Diff.diffLines(existingReadme, readmeString); - const readmeIsUpToDate: boolean = diff.length === 1 && !diff[0].added && !diff[0].removed; + const diff: Diff.StructuredPatch = Diff.structuredPatch( + README_FILENAME, + README_FILENAME, + existingReadme, + readmeString + ); + const readmeIsUpToDate: boolean = diff.hunks.length === 0; - const terminal: Terminal = new Terminal(new ConsoleTerminalProvider()); + const terminal: ITerminal = this._terminal; if (!readmeIsUpToDate) { if (this._verifyParameter.value) { - for (const change of diff) { - const lines: string[] = change.value.trimEnd().split('\n'); - let linePrefix: string; - let colorizer: (text: string) => string; - if (change.added) { - linePrefix = '+ '; - colorizer = Colorize.green; - } else if (change.removed) { - linePrefix = '- '; - colorizer = Colorize.red; - } else { - linePrefix = ' '; - colorizer = Colorize.gray; - } - - for (const line of lines) { - terminal.writeLine(colorizer(linePrefix + line)); - } - } + terminal.writeLine(Diff.formatPatch(diff)); terminal.writeLine(); terminal.writeLine(); diff --git a/repo-scripts/repo-toolbox/src/RecordVersionsAction.ts b/repo-scripts/repo-toolbox/src/cli/actions/RecordVersionsAction.ts similarity index 88% rename from repo-scripts/repo-toolbox/src/RecordVersionsAction.ts rename to repo-scripts/repo-toolbox/src/cli/actions/RecordVersionsAction.ts index affd6978605..57dc988bdd5 100644 --- a/repo-scripts/repo-toolbox/src/RecordVersionsAction.ts +++ b/repo-scripts/repo-toolbox/src/cli/actions/RecordVersionsAction.ts @@ -4,20 +4,24 @@ import * as path from 'node:path'; import { JsonFile } from '@rushstack/node-core-library'; -import { Terminal, ConsoleTerminalProvider } from '@rushstack/terminal'; +import type { ITerminal } from '@rushstack/terminal'; import { RushConfiguration } from '@microsoft/rush-lib'; import { CommandLineAction, type CommandLineStringParameter } from '@rushstack/ts-command-line'; export class RecordVersionsAction extends CommandLineAction { private readonly _outFilePath: CommandLineStringParameter; - public constructor() { + private readonly _terminal: ITerminal; + + public constructor(terminal: ITerminal) { super({ actionName: 'record-versions', summary: 'Generates a JSON file recording the version numbers of all published packages.', documentation: '' }); + this._terminal = terminal; + this._outFilePath = this.defineStringParameter({ parameterLongName: '--out-file', parameterShortName: '-o', @@ -28,7 +32,7 @@ export class RecordVersionsAction extends CommandLineAction { } protected override async onExecuteAsync(): Promise { - const terminal: Terminal = new Terminal(new ConsoleTerminalProvider()); + const terminal: ITerminal = this._terminal; const rushConfig: RushConfiguration = RushConfiguration.loadFromDefaultLocation({ startingFolder: process.cwd() }); diff --git a/repo-scripts/repo-toolbox/src/start.ts b/repo-scripts/repo-toolbox/src/start.ts index aaab695092f..11b0e4064c4 100644 --- a/repo-scripts/repo-toolbox/src/start.ts +++ b/repo-scripts/repo-toolbox/src/start.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -import { ToolboxCommandLine } from './ToolboxCommandLine'; +import { ToolboxCommandLine } from './cli/ToolboxCommandLine'; // eslint-disable-next-line no-console console.log('repo-toolbox\n'); diff --git a/rigs/decoupled-local-node-rig/package.json b/rigs/decoupled-local-node-rig/package.json index 67ea39c582f..bdd61eec2c1 100644 --- a/rigs/decoupled-local-node-rig/package.json +++ b/rigs/decoupled-local-node-rig/package.json @@ -9,12 +9,12 @@ "_phase:build": "" }, "dependencies": { - "@microsoft/api-extractor": "7.53.0", - "@rushstack/eslint-config": "4.4.1", - "@rushstack/eslint-patch": "1.13.0", - "@rushstack/eslint-plugin": "0.20.0", - "@rushstack/heft-node-rig": "2.10.1", - "@rushstack/heft": "1.1.0", + "@microsoft/api-extractor": "7.54.0", + "@rushstack/eslint-config": "4.5.3", + "@rushstack/eslint-patch": "1.14.1", + "@rushstack/eslint-plugin": "0.22.0", + "@rushstack/heft-node-rig": "2.11.6", + "@rushstack/heft": "1.1.4", "@types/heft-jest": "1.0.1", "@types/node": "20.17.19", "@typescript-eslint/eslint-plugin": "~8.46.0", diff --git a/rigs/decoupled-local-node-rig/profiles/default/includes/eslint/flat/profile/_common.js b/rigs/decoupled-local-node-rig/profiles/default/includes/eslint/flat/profile/_common.js index 71d95e8ea20..144f0598919 100644 --- a/rigs/decoupled-local-node-rig/profiles/default/includes/eslint/flat/profile/_common.js +++ b/rigs/decoupled-local-node-rig/profiles/default/includes/eslint/flat/profile/_common.js @@ -169,7 +169,9 @@ module.exports = { ], 'newlines-between': 'always' } - ] + ], + + 'import/no-duplicates': 'warn' } }, { @@ -191,7 +193,8 @@ module.exports = { '**/test/**/*.tsx' ], rules: { - 'import/order': 'off' + 'import/order': 'off', + 'import/no-duplicates': 'off' } } ] diff --git a/rigs/heft-node-rig/CHANGELOG.json b/rigs/heft-node-rig/CHANGELOG.json index d93a7eb1789..67d28ce51d3 100644 --- a/rigs/heft-node-rig/CHANGELOG.json +++ b/rigs/heft-node-rig/CHANGELOG.json @@ -1,6 +1,215 @@ { "name": "@rushstack/heft-node-rig", "entries": [ + { + "version": "2.11.9", + "tag": "@rushstack/heft-node-rig_v2.11.9", + "date": "Wed, 12 Nov 2025 01:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-config\" to `4.6.1`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-lint-plugin\" to `1.1.7`" + } + ] + } + }, + { + "version": "2.11.8", + "tag": "@rushstack/heft-node-rig_v2.11.8", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.55.0`" + }, + { + "comment": "Updating dependency \"@rushstack/eslint-config\" to `4.6.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-api-extractor-plugin\" to `1.2.1`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-jest-plugin\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-lint-plugin\" to `1.1.6`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.4` to `1.1.5`" + } + ] + } + }, + { + "version": "2.11.7", + "tag": "@rushstack/heft-node-rig_v2.11.7", + "date": "Tue, 11 Nov 2025 16:13:26 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-config\" to `4.5.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-lint-plugin\" to `1.1.5`" + } + ] + } + }, + { + "version": "2.11.6", + "tag": "@rushstack/heft-node-rig_v2.11.6", + "date": "Mon, 10 Nov 2025 16:12:32 GMT", + "comments": { + "patch": [ + { + "comment": "Include lib-dts and lib-esm folders in default files to clean" + } + ] + } + }, + { + "version": "2.11.5", + "tag": "@rushstack/heft-node-rig_v2.11.5", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.54.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-api-extractor-plugin\" to `1.2.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-jest-plugin\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-lint-plugin\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.3` to `1.1.4`" + } + ] + } + }, + { + "version": "2.11.4", + "tag": "@rushstack/heft-node-rig_v2.11.4", + "date": "Fri, 24 Oct 2025 11:22:09 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-config\" to `4.5.3`" + } + ] + } + }, + { + "version": "2.11.3", + "tag": "@rushstack/heft-node-rig_v2.11.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.53.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-api-extractor-plugin\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-jest-plugin\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-lint-plugin\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "2.11.2", + "tag": "@rushstack/heft-node-rig_v2.11.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.53.2`" + }, + { + "comment": "Updating dependency \"@rushstack/eslint-config\" to `4.5.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-api-extractor-plugin\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-jest-plugin\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-lint-plugin\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.1` to `1.1.2`" + } + ] + } + }, + { + "version": "2.11.1", + "tag": "@rushstack/heft-node-rig_v2.11.1", + "date": "Tue, 14 Oct 2025 15:13:22 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-config\" to `4.5.1`" + } + ] + } + }, + { + "version": "2.11.0", + "tag": "@rushstack/heft-node-rig_v2.11.0", + "date": "Mon, 13 Oct 2025 15:13:02 GMT", + "comments": { + "minor": [ + { + "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-config\" to `4.5.0`" + } + ] + } + }, { "version": "2.10.2", "tag": "@rushstack/heft-node-rig_v2.10.2", diff --git a/rigs/heft-node-rig/CHANGELOG.md b/rigs/heft-node-rig/CHANGELOG.md index 2aa28ae5386..a8d28ba8bb3 100644 --- a/rigs/heft-node-rig/CHANGELOG.md +++ b/rigs/heft-node-rig/CHANGELOG.md @@ -1,6 +1,60 @@ # Change Log - @rushstack/heft-node-rig -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:57:54 GMT and should not be manually modified. + +## 2.11.9 +Wed, 12 Nov 2025 01:57:54 GMT + +_Version update only_ + +## 2.11.8 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 2.11.7 +Tue, 11 Nov 2025 16:13:26 GMT + +_Version update only_ + +## 2.11.6 +Mon, 10 Nov 2025 16:12:32 GMT + +### Patches + +- Include lib-dts and lib-esm folders in default files to clean + +## 2.11.5 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 2.11.4 +Fri, 24 Oct 2025 11:22:09 GMT + +_Version update only_ + +## 2.11.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 2.11.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ + +## 2.11.1 +Tue, 14 Oct 2025 15:13:22 GMT + +_Version update only_ + +## 2.11.0 +Mon, 13 Oct 2025 15:13:02 GMT + +### Minor changes + +- Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`. ## 2.10.2 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/rigs/heft-node-rig/package.json b/rigs/heft-node-rig/package.json index c22851a68c9..03301bcc18f 100644 --- a/rigs/heft-node-rig/package.json +++ b/rigs/heft-node-rig/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-node-rig", - "version": "2.10.2", + "version": "2.11.9", "description": "A rig package for Node.js projects that build using Heft", "license": "MIT", "scripts": { @@ -13,7 +13,7 @@ "directory": "rigs/heft-node-rig" }, "peerDependencies": { - "@rushstack/heft": "^1.1.1" + "@rushstack/heft": "^1.1.5" }, "dependencies": { "@microsoft/api-extractor": "workspace:*", diff --git a/rigs/heft-node-rig/profiles/default/config/heft.json b/rigs/heft-node-rig/profiles/default/config/heft.json index 922aed1cd6b..e550329a62c 100644 --- a/rigs/heft-node-rig/profiles/default/config/heft.json +++ b/rigs/heft-node-rig/profiles/default/config/heft.json @@ -21,7 +21,7 @@ "phasesByName": { "build": { - "cleanFiles": [{ "includeGlobs": ["dist", "lib", "lib-commonjs"] }], + "cleanFiles": [{ "includeGlobs": ["dist", "lib", "lib-commonjs", "lib-dts", "lib-esm"] }], "tasksByName": { "typescript": { diff --git a/rigs/heft-vscode-extension-rig/CHANGELOG.json b/rigs/heft-vscode-extension-rig/CHANGELOG.json index e61c95e00bc..4584eb10f7f 100644 --- a/rigs/heft-vscode-extension-rig/CHANGELOG.json +++ b/rigs/heft-vscode-extension-rig/CHANGELOG.json @@ -1,6 +1,233 @@ { "name": "@rushstack/heft-vscode-extension-rig", "entries": [ + { + "version": "1.1.10", + "tag": "@rushstack/heft-vscode-extension-rig_v1.1.10", + "date": "Wed, 12 Nov 2025 01:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.9`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-vscode-extension-plugin\" to `1.0.12`" + } + ] + } + }, + { + "version": "1.1.9", + "tag": "@rushstack/heft-vscode-extension-rig_v1.1.9", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.55.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.8`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-vscode-extension-plugin\" to `1.0.11`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.5`" + }, + { + "comment": "Updating dependency \"@rushstack/webpack-preserve-dynamic-require-plugin\" to `0.11.116`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.4` to `1.1.5`" + } + ] + } + }, + { + "version": "1.1.8", + "tag": "@rushstack/heft-vscode-extension-rig_v1.1.8", + "date": "Tue, 11 Nov 2025 16:13:26 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.7`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-vscode-extension-plugin\" to `1.0.10`" + } + ] + } + }, + { + "version": "1.1.7", + "tag": "@rushstack/heft-vscode-extension-rig_v1.1.7", + "date": "Mon, 10 Nov 2025 16:12:32 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.6`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-vscode-extension-plugin\" to `1.0.9`" + } + ] + } + }, + { + "version": "1.1.6", + "tag": "@rushstack/heft-vscode-extension-rig_v1.1.6", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.54.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-vscode-extension-plugin\" to `1.0.8`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.4`" + }, + { + "comment": "Updating dependency \"@rushstack/webpack-preserve-dynamic-require-plugin\" to `0.11.115`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.3` to `1.1.4`" + } + ] + } + }, + { + "version": "1.1.5", + "tag": "@rushstack/heft-vscode-extension-rig_v1.1.5", + "date": "Fri, 24 Oct 2025 11:22:09 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-vscode-extension-plugin\" to `1.0.7`" + } + ] + } + }, + { + "version": "1.1.4", + "tag": "@rushstack/heft-vscode-extension-rig_v1.1.4", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.53.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-vscode-extension-plugin\" to `1.0.6`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.3`" + }, + { + "comment": "Updating dependency \"@rushstack/webpack-preserve-dynamic-require-plugin\" to `0.11.114`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "1.1.3", + "tag": "@rushstack/heft-vscode-extension-rig_v1.1.3", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.53.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-vscode-extension-plugin\" to `1.0.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.2`" + }, + { + "comment": "Updating dependency \"@rushstack/webpack-preserve-dynamic-require-plugin\" to `0.11.113`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.1` to `1.1.2`" + } + ] + } + }, + { + "version": "1.1.2", + "tag": "@rushstack/heft-vscode-extension-rig_v1.1.2", + "date": "Fri, 17 Oct 2025 23:22:33 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.1`" + } + ] + } + }, + { + "version": "1.1.1", + "tag": "@rushstack/heft-vscode-extension-rig_v1.1.1", + "date": "Tue, 14 Oct 2025 15:13:22 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.1`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-vscode-extension-plugin\" to `1.0.4`" + } + ] + } + }, + { + "version": "1.1.0", + "tag": "@rushstack/heft-vscode-extension-rig_v1.1.0", + "date": "Mon, 13 Oct 2025 15:13:02 GMT", + "comments": { + "minor": [ + { + "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-node-rig\" to `2.11.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-vscode-extension-plugin\" to `1.0.3`" + } + ] + } + }, { "version": "1.0.2", "tag": "@rushstack/heft-vscode-extension-rig_v1.0.2", diff --git a/rigs/heft-vscode-extension-rig/CHANGELOG.md b/rigs/heft-vscode-extension-rig/CHANGELOG.md index 8aebf99269c..00ea3b9b063 100644 --- a/rigs/heft-vscode-extension-rig/CHANGELOG.md +++ b/rigs/heft-vscode-extension-rig/CHANGELOG.md @@ -1,6 +1,63 @@ # Change Log - @rushstack/heft-vscode-extension-rig -This log was last generated on Wed, 08 Oct 2025 00:13:28 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:57:54 GMT and should not be manually modified. + +## 1.1.10 +Wed, 12 Nov 2025 01:57:54 GMT + +_Version update only_ + +## 1.1.9 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.1.8 +Tue, 11 Nov 2025 16:13:26 GMT + +_Version update only_ + +## 1.1.7 +Mon, 10 Nov 2025 16:12:32 GMT + +_Version update only_ + +## 1.1.6 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 1.1.5 +Fri, 24 Oct 2025 11:22:09 GMT + +_Version update only_ + +## 1.1.4 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.1.3 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ + +## 1.1.2 +Fri, 17 Oct 2025 23:22:33 GMT + +_Version update only_ + +## 1.1.1 +Tue, 14 Oct 2025 15:13:22 GMT + +_Version update only_ + +## 1.1.0 +Mon, 13 Oct 2025 15:13:02 GMT + +### Minor changes + +- Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`. ## 1.0.2 Wed, 08 Oct 2025 00:13:28 GMT diff --git a/rigs/heft-vscode-extension-rig/package.json b/rigs/heft-vscode-extension-rig/package.json index bee365b16c3..23103d0b8a0 100644 --- a/rigs/heft-vscode-extension-rig/package.json +++ b/rigs/heft-vscode-extension-rig/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-vscode-extension-rig", - "version": "1.0.2", + "version": "1.1.10", "description": "A rig package for VSCode Extensions that build using Heft", "license": "MIT", "scripts": { @@ -13,7 +13,7 @@ "directory": "rigs/heft-vscode-extension-rig" }, "peerDependencies": { - "@rushstack/heft": "^1.1.1" + "@rushstack/heft": "^1.1.5" }, "dependencies": { "@microsoft/api-extractor": "workspace:*", diff --git a/rigs/heft-web-rig/CHANGELOG.json b/rigs/heft-web-rig/CHANGELOG.json index d6eb2244224..f3190aff9cd 100644 --- a/rigs/heft-web-rig/CHANGELOG.json +++ b/rigs/heft-web-rig/CHANGELOG.json @@ -1,6 +1,239 @@ { "name": "@rushstack/heft-web-rig", "entries": [ + { + "version": "1.1.9", + "tag": "@rushstack/heft-web-rig_v1.1.9", + "date": "Wed, 12 Nov 2025 01:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-config\" to `4.6.1`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-lint-plugin\" to `1.1.7`" + } + ] + } + }, + { + "version": "1.1.8", + "tag": "@rushstack/heft-web-rig_v1.1.8", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.55.0`" + }, + { + "comment": "Updating dependency \"@rushstack/eslint-config\" to `4.6.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-api-extractor-plugin\" to `1.2.1`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-jest-plugin\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-lint-plugin\" to `1.1.6`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-sass-plugin\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.4` to `1.1.5`" + } + ] + } + }, + { + "version": "1.1.7", + "tag": "@rushstack/heft-web-rig_v1.1.7", + "date": "Tue, 11 Nov 2025 16:13:26 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-config\" to `4.5.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-lint-plugin\" to `1.1.5`" + } + ] + } + }, + { + "version": "1.1.6", + "tag": "@rushstack/heft-web-rig_v1.1.6", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.54.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-api-extractor-plugin\" to `1.2.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-jest-plugin\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-lint-plugin\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-sass-plugin\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.3` to `1.1.4`" + } + ] + } + }, + { + "version": "1.1.5", + "tag": "@rushstack/heft-web-rig_v1.1.5", + "date": "Fri, 24 Oct 2025 11:22:09 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-config\" to `4.5.3`" + } + ] + } + }, + { + "version": "1.1.4", + "tag": "@rushstack/heft-web-rig_v1.1.4", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.53.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-api-extractor-plugin\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-jest-plugin\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-lint-plugin\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-sass-plugin\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.2` to `1.1.3`" + } + ] + } + }, + { + "version": "1.1.3", + "tag": "@rushstack/heft-web-rig_v1.1.3", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/api-extractor\" to `7.53.2`" + }, + { + "comment": "Updating dependency \"@rushstack/eslint-config\" to `4.5.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-api-extractor-plugin\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-jest-plugin\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-lint-plugin\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-sass-plugin\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-typescript-plugin\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" from `^1.1.1` to `1.1.2`" + } + ] + } + }, + { + "version": "1.1.2", + "tag": "@rushstack/heft-web-rig_v1.1.2", + "date": "Fri, 17 Oct 2025 23:22:33 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft-webpack5-plugin\" to `1.2.1`" + } + ] + } + }, + { + "version": "1.1.1", + "tag": "@rushstack/heft-web-rig_v1.1.1", + "date": "Tue, 14 Oct 2025 15:13:22 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-config\" to `4.5.1`" + } + ] + } + }, + { + "version": "1.1.0", + "tag": "@rushstack/heft-web-rig_v1.1.0", + "date": "Mon, 13 Oct 2025 15:13:02 GMT", + "comments": { + "minor": [ + { + "comment": "Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`." + } + ], + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/eslint-config\" to `4.5.0`" + } + ] + } + }, { "version": "1.0.2", "tag": "@rushstack/heft-web-rig_v1.0.2", diff --git a/rigs/heft-web-rig/CHANGELOG.md b/rigs/heft-web-rig/CHANGELOG.md index 6babf8fcf80..7e5aaf9b7f9 100644 --- a/rigs/heft-web-rig/CHANGELOG.md +++ b/rigs/heft-web-rig/CHANGELOG.md @@ -1,6 +1,58 @@ # Change Log - @rushstack/heft-web-rig -This log was last generated on Wed, 08 Oct 2025 00:13:28 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:57:54 GMT and should not be manually modified. + +## 1.1.9 +Wed, 12 Nov 2025 01:57:54 GMT + +_Version update only_ + +## 1.1.8 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.1.7 +Tue, 11 Nov 2025 16:13:26 GMT + +_Version update only_ + +## 1.1.6 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 1.1.5 +Fri, 24 Oct 2025 11:22:09 GMT + +_Version update only_ + +## 1.1.4 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.1.3 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ + +## 1.1.2 +Fri, 17 Oct 2025 23:22:33 GMT + +_Version update only_ + +## 1.1.1 +Tue, 14 Oct 2025 15:13:22 GMT + +_Version update only_ + +## 1.1.0 +Mon, 13 Oct 2025 15:13:02 GMT + +### Minor changes + +- Bump `eslint` to `~9.37.0` and the `@typescript-eslint/*` packages to `~8.46.0`. ## 1.0.2 Wed, 08 Oct 2025 00:13:28 GMT diff --git a/rigs/heft-web-rig/package.json b/rigs/heft-web-rig/package.json index 6b0d574d210..4b3ed2ebd4b 100644 --- a/rigs/heft-web-rig/package.json +++ b/rigs/heft-web-rig/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/heft-web-rig", - "version": "1.0.2", + "version": "1.1.9", "description": "A rig package for web browser projects that build using Heft", "license": "MIT", "scripts": { @@ -13,7 +13,7 @@ "directory": "rigs/heft-web-rig" }, "peerDependencies": { - "@rushstack/heft": "^1.1.1" + "@rushstack/heft": "^1.1.5" }, "dependencies": { "@microsoft/api-extractor": "workspace:*", diff --git a/rigs/local-node-rig/profiles/default/config/api-extractor-task.json b/rigs/local-node-rig/profiles/default/config/api-extractor-task.json index 17416c0226f..c6cc966b418 100644 --- a/rigs/local-node-rig/profiles/default/config/api-extractor-task.json +++ b/rigs/local-node-rig/profiles/default/config/api-extractor-task.json @@ -1,5 +1,7 @@ { "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/api-extractor-task.schema.json", - "extends": "@rushstack/heft-node-rig/profiles/default/config/api-extractor-task.json" + "extends": "@rushstack/heft-node-rig/profiles/default/config/api-extractor-task.json", + + "printApiReportDiff": "production" } diff --git a/rigs/local-node-rig/profiles/default/config/heft.json b/rigs/local-node-rig/profiles/default/config/heft.json index 437ad9b13ba..b8d42182128 100644 --- a/rigs/local-node-rig/profiles/default/config/heft.json +++ b/rigs/local-node-rig/profiles/default/config/heft.json @@ -1,5 +1,19 @@ { "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", - "extends": "@rushstack/heft-node-rig/profiles/default/config/heft.json" + "extends": "@rushstack/heft-node-rig/profiles/default/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "lint": { + "taskPlugin": { + "options": { + "sarifLogPath": "temp/build/lint/lint.sarif" + } + } + } + } + } + } } diff --git a/rigs/local-node-rig/profiles/default/tsconfig-base.json b/rigs/local-node-rig/profiles/default/tsconfig-base.json index dff2ef99dc1..418d1448e6f 100644 --- a/rigs/local-node-rig/profiles/default/tsconfig-base.json +++ b/rigs/local-node-rig/profiles/default/tsconfig-base.json @@ -8,11 +8,11 @@ "isolatedModules": true, "target": "es2018", - "outDir": "../../../../lib", - "rootDir": "../../../../src", + "outDir": "${configDir}/lib", + "rootDir": "${configDir}/src", "types": ["heft-jest", "node"], - "typeRoots": ["../../../../node_modules/@types", "../../node_modules/@types"] + "typeRoots": ["${configDir}/node_modules/@types", "../../node_modules/@types"] }, - "include": ["../../../../src/**/*.ts", "../../../../src/**/*.tsx"] + "include": ["${configDir}/src/**/*.ts", "${configDir}/src/**/*.tsx"] } diff --git a/rigs/local-web-rig/profiles/app/config/heft.json b/rigs/local-web-rig/profiles/app/config/heft.json index 199a231f267..e3679801f22 100644 --- a/rigs/local-web-rig/profiles/app/config/heft.json +++ b/rigs/local-web-rig/profiles/app/config/heft.json @@ -1,5 +1,19 @@ { "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", - "extends": "@rushstack/heft-web-rig/profiles/app/config/heft.json" + "extends": "@rushstack/heft-web-rig/profiles/app/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "lint": { + "taskPlugin": { + "options": { + "sarifLogPath": "temp/build/lint/lint.sarif" + } + } + } + } + } + } } diff --git a/rigs/local-web-rig/profiles/app/tsconfig-base.json b/rigs/local-web-rig/profiles/app/tsconfig-base.json index 79e596dfb8f..03bbe4b704b 100644 --- a/rigs/local-web-rig/profiles/app/tsconfig-base.json +++ b/rigs/local-web-rig/profiles/app/tsconfig-base.json @@ -10,12 +10,12 @@ "target": "es2017", "lib": ["es2017", "scripthost", "es2015.collection", "es2015.promise", "es2015.iterable", "dom"], - "outDir": "../../../../lib", - "rootDir": "../../../../src", - "rootDirs": ["../../../../src", "../../../../temp/sass-ts"], + "outDir": "${configDir}/lib", + "rootDir": "${configDir}/src", + "rootDirs": ["${configDir}/src", "${configDir}/temp/sass-ts"], "types": ["heft-jest", "webpack-env"], - "typeRoots": ["../../../../node_modules/@types", "../../node_modules/@types"] + "typeRoots": ["${configDir}/node_modules/@types", "../../node_modules/@types"] }, - "include": ["../../../../src/**/*.ts", "../../../../src/**/*.tsx"] + "include": ["${configDir}/src/**/*.ts", "${configDir}/src/**/*.tsx"] } diff --git a/rigs/local-web-rig/profiles/library/config/heft.json b/rigs/local-web-rig/profiles/library/config/heft.json index 1ee90630415..d26de84e78b 100644 --- a/rigs/local-web-rig/profiles/library/config/heft.json +++ b/rigs/local-web-rig/profiles/library/config/heft.json @@ -1,5 +1,19 @@ { "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", - "extends": "@rushstack/heft-web-rig/profiles/library/config/heft.json" + "extends": "@rushstack/heft-web-rig/profiles/library/config/heft.json", + + "phasesByName": { + "build": { + "tasksByName": { + "lint": { + "taskPlugin": { + "options": { + "sarifLogPath": "temp/build/lint/lint.sarif" + } + } + } + } + } + } } diff --git a/rigs/local-web-rig/profiles/library/tsconfig-base.json b/rigs/local-web-rig/profiles/library/tsconfig-base.json index 5a3404cad09..b3568c82cdb 100644 --- a/rigs/local-web-rig/profiles/library/tsconfig-base.json +++ b/rigs/local-web-rig/profiles/library/tsconfig-base.json @@ -7,12 +7,12 @@ "resolveJsonModule": true, "isolatedModules": true, - "outDir": "../../../../lib", - "rootDir": "../../../../src", - "rootDirs": ["../../../../src", "../../../../temp/sass-ts"], + "outDir": "${configDir}/lib", + "rootDir": "${configDir}/src", + "rootDirs": ["${configDir}/src", "${configDir}/temp/sass-ts"], "types": ["heft-jest", "webpack-env"], - "typeRoots": ["../../../../node_modules/@types", "../../node_modules/@types"] + "typeRoots": ["${configDir}/node_modules/@types", "../../node_modules/@types"] }, - "include": ["../../../../src/**/*.ts", "../../../../src/**/*.tsx"] + "include": ["${configDir}/src/**/*.ts", "${configDir}/src/**/*.tsx"] } diff --git a/rush-plugins/rush-amazon-s3-build-cache-plugin/config/heft.json b/rush-plugins/rush-amazon-s3-build-cache-plugin/config/heft.json new file mode 100644 index 00000000000..625490052a1 --- /dev/null +++ b/rush-plugins/rush-amazon-s3-build-cache-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + + "extends": "local-node-rig/profiles/default/config/heft.json", + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/rush/v5"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/rush-plugins/rush-amazon-s3-build-cache-plugin/package.json b/rush-plugins/rush-amazon-s3-build-cache-plugin/package.json index 643ad20ecff..8ae7cfb51ce 100644 --- a/rush-plugins/rush-amazon-s3-build-cache-plugin/package.json +++ b/rush-plugins/rush-amazon-s3-build-cache-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/rush-amazon-s3-build-cache-plugin", - "version": "5.160.1", + "version": "5.162.0", "description": "Rush plugin for Amazon S3 cloud build cache", "repository": { "type": "git", @@ -19,6 +19,7 @@ "_phase:test": "heft run --only test -- --clean" }, "dependencies": { + "@rushstack/credential-cache": "workspace:*", "@rushstack/node-core-library": "workspace:*", "@rushstack/rush-sdk": "workspace:*", "@rushstack/terminal": "workspace:*", diff --git a/rush-plugins/rush-amazon-s3-build-cache-plugin/src/AmazonS3BuildCacheProvider.ts b/rush-plugins/rush-amazon-s3-build-cache-plugin/src/AmazonS3BuildCacheProvider.ts index 2d4292bd8af..ea8d7b903c0 100644 --- a/rush-plugins/rush-amazon-s3-build-cache-plugin/src/AmazonS3BuildCacheProvider.ts +++ b/rush-plugins/rush-amazon-s3-build-cache-plugin/src/AmazonS3BuildCacheProvider.ts @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. +import { type ICredentialCacheEntry, CredentialCache } from '@rushstack/credential-cache'; import type { ITerminal } from '@rushstack/terminal'; import { type ICloudBuildCacheProvider, - type ICredentialCacheEntry, - CredentialCache, type RushSession, RushConstants, EnvironmentVariableNames, diff --git a/rush-plugins/rush-amazon-s3-build-cache-plugin/src/test/AmazonS3BuildCacheProvider.test.ts b/rush-plugins/rush-amazon-s3-build-cache-plugin/src/test/AmazonS3BuildCacheProvider.test.ts index f66b89415ed..f846371ff0b 100644 --- a/rush-plugins/rush-amazon-s3-build-cache-plugin/src/test/AmazonS3BuildCacheProvider.test.ts +++ b/rush-plugins/rush-amazon-s3-build-cache-plugin/src/test/AmazonS3BuildCacheProvider.test.ts @@ -5,13 +5,9 @@ jest.mock('@rushstack/rush-sdk/lib/utilities/WebClient', () => { return jest.requireActual('@microsoft/rush-lib/lib/utilities/WebClient'); }); +import { CredentialCache } from '@rushstack/credential-cache'; import { ConsoleTerminalProvider, StringBufferTerminalProvider, Terminal } from '@rushstack/terminal'; -import { - RushSession, - CredentialCache, - EnvironmentConfiguration, - RushUserConfiguration -} from '@rushstack/rush-sdk'; +import { RushSession, EnvironmentConfiguration, RushUserConfiguration } from '@rushstack/rush-sdk'; import { AmazonS3BuildCacheProvider } from '../AmazonS3BuildCacheProvider'; diff --git a/rush-plugins/rush-azure-storage-build-cache-plugin/config/heft.json b/rush-plugins/rush-azure-storage-build-cache-plugin/config/heft.json new file mode 100644 index 00000000000..625490052a1 --- /dev/null +++ b/rush-plugins/rush-azure-storage-build-cache-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + + "extends": "local-node-rig/profiles/default/config/heft.json", + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/rush/v5"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/rush-plugins/rush-azure-storage-build-cache-plugin/package.json b/rush-plugins/rush-azure-storage-build-cache-plugin/package.json index 13e4da4b4f4..c326b6f4467 100644 --- a/rush-plugins/rush-azure-storage-build-cache-plugin/package.json +++ b/rush-plugins/rush-azure-storage-build-cache-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/rush-azure-storage-build-cache-plugin", - "version": "5.160.1", + "version": "5.162.0", "description": "Rush plugin for Azure storage cloud build cache", "repository": { "type": "git", @@ -20,6 +20,7 @@ "dependencies": { "@azure/identity": "~4.5.0", "@azure/storage-blob": "~12.26.0", + "@rushstack/credential-cache": "workspace:*", "@rushstack/node-core-library": "workspace:*", "@rushstack/rush-sdk": "workspace:*", "@rushstack/terminal": "workspace:*" diff --git a/rush-plugins/rush-azure-storage-build-cache-plugin/src/AzureAuthenticationBase.ts b/rush-plugins/rush-azure-storage-build-cache-plugin/src/AzureAuthenticationBase.ts index 4320c561399..2be93baa713 100644 --- a/rush-plugins/rush-azure-storage-build-cache-plugin/src/AzureAuthenticationBase.ts +++ b/rush-plugins/rush-azure-storage-build-cache-plugin/src/AzureAuthenticationBase.ts @@ -14,15 +14,15 @@ import { VisualStudioCodeCredential, AzureCliCredential, AzureDeveloperCliCredential, - AzurePowerShellCredential + AzurePowerShellCredential, + type TokenCredentialOptions } from '@azure/identity'; -import type { TokenCredentialOptions } from '@azure/identity'; import type { ITerminal } from '@rushstack/terminal'; -import { CredentialCache } from '@rushstack/rush-sdk'; +import { CredentialCache } from '@rushstack/credential-cache'; // Use a separate import line so the .d.ts file ends up with an `import type { ... }` // See https://github.com/microsoft/rushstack/issues/3432 -import type { ICredentialCacheEntry } from '@rushstack/rush-sdk'; +import type { ICredentialCacheEntry } from '@rushstack/credential-cache'; import { PrintUtilities } from '@rushstack/terminal'; import { AdoCodespacesAuthCredential } from './AdoCodespacesAuthCredential'; diff --git a/rush-plugins/rush-azure-storage-build-cache-plugin/src/test/AzureStorageBuildCacheProvider.test.ts b/rush-plugins/rush-azure-storage-build-cache-plugin/src/test/AzureStorageBuildCacheProvider.test.ts index 4bde79dd705..23bb0ead55b 100644 --- a/rush-plugins/rush-azure-storage-build-cache-plugin/src/test/AzureStorageBuildCacheProvider.test.ts +++ b/rush-plugins/rush-azure-storage-build-cache-plugin/src/test/AzureStorageBuildCacheProvider.test.ts @@ -1,8 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. +import { CredentialCache } from '@rushstack/credential-cache'; import { StringBufferTerminalProvider, Terminal } from '@rushstack/terminal'; -import { CredentialCache, EnvironmentConfiguration, RushUserConfiguration } from '@rushstack/rush-sdk'; +import { EnvironmentConfiguration, RushUserConfiguration } from '@rushstack/rush-sdk'; import { AzureStorageBuildCacheProvider } from '../AzureStorageBuildCacheProvider'; import type { AzureEnvironmentName } from '../AzureAuthenticationBase'; diff --git a/rush-plugins/rush-bridge-cache-plugin/config/heft.json b/rush-plugins/rush-bridge-cache-plugin/config/heft.json new file mode 100644 index 00000000000..625490052a1 --- /dev/null +++ b/rush-plugins/rush-bridge-cache-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + + "extends": "local-node-rig/profiles/default/config/heft.json", + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/rush/v5"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/rush-plugins/rush-bridge-cache-plugin/package.json b/rush-plugins/rush-bridge-cache-plugin/package.json index 343ae9136a6..4ad261fccfc 100644 --- a/rush-plugins/rush-bridge-cache-plugin/package.json +++ b/rush-plugins/rush-bridge-cache-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/rush-bridge-cache-plugin", - "version": "5.160.1", + "version": "5.162.0", "description": "Rush plugin that provides a --set-cache-only command flag to populate the cache from content on disk.", "license": "MIT", "main": "lib/index.js", diff --git a/rush-plugins/rush-buildxl-graph-plugin/config/heft.json b/rush-plugins/rush-buildxl-graph-plugin/config/heft.json new file mode 100644 index 00000000000..625490052a1 --- /dev/null +++ b/rush-plugins/rush-buildxl-graph-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + + "extends": "local-node-rig/profiles/default/config/heft.json", + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/rush/v5"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/rush-plugins/rush-buildxl-graph-plugin/package.json b/rush-plugins/rush-buildxl-graph-plugin/package.json index f628178a4b9..5892031608e 100644 --- a/rush-plugins/rush-buildxl-graph-plugin/package.json +++ b/rush-plugins/rush-buildxl-graph-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/rush-buildxl-graph-plugin", - "version": "5.160.1", + "version": "5.162.0", "description": "Rush plugin for generating a BuildXL graph.", "repository": { "type": "git", diff --git a/rush-plugins/rush-http-build-cache-plugin/config/heft.json b/rush-plugins/rush-http-build-cache-plugin/config/heft.json new file mode 100644 index 00000000000..625490052a1 --- /dev/null +++ b/rush-plugins/rush-http-build-cache-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + + "extends": "local-node-rig/profiles/default/config/heft.json", + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/rush/v5"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/rush-plugins/rush-http-build-cache-plugin/package.json b/rush-plugins/rush-http-build-cache-plugin/package.json index be5def76d1b..0e85ee46bb1 100644 --- a/rush-plugins/rush-http-build-cache-plugin/package.json +++ b/rush-plugins/rush-http-build-cache-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/rush-http-build-cache-plugin", - "version": "5.160.1", + "version": "5.162.0", "description": "Rush plugin for generic HTTP cloud build cache", "repository": { "type": "git", @@ -19,6 +19,7 @@ "_phase:test": "heft run --only test -- --clean" }, "dependencies": { + "@rushstack/credential-cache": "workspace:*", "@rushstack/node-core-library": "workspace:*", "@rushstack/rush-sdk": "workspace:*", "https-proxy-agent": "~5.0.0" diff --git a/rush-plugins/rush-http-build-cache-plugin/src/HttpBuildCacheProvider.ts b/rush-plugins/rush-http-build-cache-plugin/src/HttpBuildCacheProvider.ts index 8868fdbd09f..5acdd8a9457 100644 --- a/rush-plugins/rush-http-build-cache-plugin/src/HttpBuildCacheProvider.ts +++ b/rush-plugins/rush-http-build-cache-plugin/src/HttpBuildCacheProvider.ts @@ -3,12 +3,11 @@ import type { SpawnSyncReturns } from 'node:child_process'; +import { type ICredentialCacheEntry, CredentialCache } from '@rushstack/credential-cache'; import { Executable, Async } from '@rushstack/node-core-library'; import type { ITerminal } from '@rushstack/terminal'; import { type ICloudBuildCacheProvider, - type ICredentialCacheEntry, - CredentialCache, type RushSession, EnvironmentConfiguration } from '@rushstack/rush-sdk'; diff --git a/rush-plugins/rush-mcp-docs-plugin/CHANGELOG.json b/rush-plugins/rush-mcp-docs-plugin/CHANGELOG.json index b5de9456585..73720da1d78 100644 --- a/rush-plugins/rush-mcp-docs-plugin/CHANGELOG.json +++ b/rush-plugins/rush-mcp-docs-plugin/CHANGELOG.json @@ -1,6 +1,72 @@ { "name": "@rushstack/rush-mcp-docs-plugin", "entries": [ + { + "version": "0.2.5", + "tag": "@rushstack/rush-mcp-docs-plugin_v0.2.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/mcp-server\" to `0.3.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.2.4", + "tag": "@rushstack/rush-mcp-docs-plugin_v0.2.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/mcp-server\" to `0.3.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.2.3", + "tag": "@rushstack/rush-mcp-docs-plugin_v0.2.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/mcp-server\" to `0.3.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.2.2", + "tag": "@rushstack/rush-mcp-docs-plugin_v0.2.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/mcp-server\" to `0.3.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "0.2.1", "tag": "@rushstack/rush-mcp-docs-plugin_v0.2.1", diff --git a/rush-plugins/rush-mcp-docs-plugin/CHANGELOG.md b/rush-plugins/rush-mcp-docs-plugin/CHANGELOG.md index 183fff09890..0c546ba907a 100644 --- a/rush-plugins/rush-mcp-docs-plugin/CHANGELOG.md +++ b/rush-plugins/rush-mcp-docs-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/rush-mcp-docs-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.2.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.2.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.2.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.2.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.2.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/rush-plugins/rush-mcp-docs-plugin/package.json b/rush-plugins/rush-mcp-docs-plugin/package.json index 359da16e5c6..95dc9dca6e7 100644 --- a/rush-plugins/rush-mcp-docs-plugin/package.json +++ b/rush-plugins/rush-mcp-docs-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/rush-mcp-docs-plugin", - "version": "0.2.1", + "version": "0.2.5", "description": "Docs plugin for @rushstack/mcp-server", "repository": { "url": "https://github.com/microsoft/rushstack.git", diff --git a/rush-plugins/rush-redis-cobuild-plugin/config/heft.json b/rush-plugins/rush-redis-cobuild-plugin/config/heft.json new file mode 100644 index 00000000000..625490052a1 --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + + "extends": "local-node-rig/profiles/default/config/heft.json", + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/rush/v5"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/rush-plugins/rush-redis-cobuild-plugin/package.json b/rush-plugins/rush-redis-cobuild-plugin/package.json index 26568dd7438..326d6edc424 100644 --- a/rush-plugins/rush-redis-cobuild-plugin/package.json +++ b/rush-plugins/rush-redis-cobuild-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/rush-redis-cobuild-plugin", - "version": "5.160.1", + "version": "5.162.0", "description": "Rush plugin for Redis cobuild lock", "repository": { "type": "git", diff --git a/rush-plugins/rush-resolver-cache-plugin/package.json b/rush-plugins/rush-resolver-cache-plugin/package.json index 9d174769877..6621dabcee6 100644 --- a/rush-plugins/rush-resolver-cache-plugin/package.json +++ b/rush-plugins/rush-resolver-cache-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/rush-resolver-cache-plugin", - "version": "5.160.1", + "version": "5.162.0", "description": "A Rush plugin that generates a resolver cache file after successful install.", "license": "MIT", "repository": { diff --git a/rush-plugins/rush-resolver-cache-plugin/src/externals.ts b/rush-plugins/rush-resolver-cache-plugin/src/externals.ts index 4638cf2578c..18a19188cd7 100644 --- a/rush-plugins/rush-resolver-cache-plugin/src/externals.ts +++ b/rush-plugins/rush-resolver-cache-plugin/src/externals.ts @@ -3,11 +3,10 @@ import type { Operation as OperationType, OperationStatus as OperationStatusType } from '@rushstack/rush-sdk'; import type { PnpmShrinkwrapFile as PnpmShrinkwrapFileType } from '@rushstack/rush-sdk/lib/logic/pnpm/PnpmShrinkwrapFile'; -import type * as rushSdkType from '@rushstack/rush-sdk'; // Ultra-cheap "I am a Rush plugin" import of rush-lib // eslint-disable-next-line @typescript-eslint/naming-convention -declare const ___rush___rushLibModule: typeof rushSdkType; +declare const ___rush___rushLibModule: typeof import('@rushstack/rush-sdk'); const { Operation, OperationStatus } = ___rush___rushLibModule; // eslint-disable-next-line @typescript-eslint/no-redeclare diff --git a/rush-plugins/rush-serve-plugin/config/heft.json b/rush-plugins/rush-serve-plugin/config/heft.json new file mode 100644 index 00000000000..625490052a1 --- /dev/null +++ b/rush-plugins/rush-serve-plugin/config/heft.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + + "extends": "local-node-rig/profiles/default/config/heft.json", + "phasesByName": { + "build": { + "tasksByName": { + "copy-json-schemas": { + "taskPlugin": { + "pluginPackage": "@rushstack/heft", + "pluginName": "copy-files-plugin", + "options": { + "copyOperations": [ + { + "sourcePath": "src/schemas", + "destinationFolders": ["temp/json-schemas/rush/v5"], + "fileExtensions": [".schema.json"], + "hardlink": true + } + ] + } + } + } + } + } + } +} diff --git a/rush-plugins/rush-serve-plugin/package.json b/rush-plugins/rush-serve-plugin/package.json index 5816ca3d9cf..dd68d3680fe 100644 --- a/rush-plugins/rush-serve-plugin/package.json +++ b/rush-plugins/rush-serve-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/rush-serve-plugin", - "version": "5.160.1", + "version": "5.162.0", "description": "A Rush plugin that hooks into a rush action and serves output folders from all projects in the repository.", "license": "MIT", "repository": { diff --git a/rush.json b/rush.json index 8464808210a..3e22ba46d54 100644 --- a/rush.json +++ b/rush.json @@ -16,7 +16,7 @@ * path segment in the "$schema" field for all your Rush config files. This will ensure * correct error-underlining and tab-completion for editors such as VS Code. */ - "rushVersion": "5.160.1", + "rushVersion": "5.162.0", /** * The next field selects which package manager should be installed and determines its version. @@ -893,6 +893,12 @@ "reviewCategory": "tests", "shouldPublish": false }, + { + "packageName": "heft-rspack-everything-test", + "projectFolder": "build-tests/heft-rspack-everything-test", + "reviewCategory": "tests", + "shouldPublish": false + }, { "packageName": "heft-sass-test", "projectFolder": "build-tests/heft-sass-test", @@ -1084,6 +1090,13 @@ "reviewCategory": "libraries", "shouldPublish": true }, + { + "packageName": "@rushstack/heft-rspack-plugin", + "projectFolder": "heft-plugins/heft-rspack-plugin", + "reviewCategory": "libraries" + // Not ready to publish yet + // "shouldPublish": true + }, { "packageName": "@rushstack/heft-sass-plugin", "projectFolder": "heft-plugins/heft-sass-plugin", @@ -1141,6 +1154,12 @@ "shouldPublish": true, "decoupledLocalDependencies": ["@rushstack/heft"] }, + { + "packageName": "@rushstack/credential-cache", + "projectFolder": "libraries/credential-cache", + "reviewCategory": "libraries", + "shouldPublish": true + }, { "packageName": "@rushstack/debug-certificate-manager", "projectFolder": "libraries/debug-certificate-manager", @@ -1198,6 +1217,12 @@ "shouldPublish": true, "decoupledLocalDependencies": ["@rushstack/heft"] }, + { + "packageName": "@rushstack/npm-check-fork", + "projectFolder": "libraries/npm-check-fork", + "reviewCategory": "libraries", + "shouldPublish": true + }, { "packageName": "@rushstack/operation-graph", "projectFolder": "libraries/operation-graph", diff --git a/webpack/hashed-folder-copy-plugin/CHANGELOG.json b/webpack/hashed-folder-copy-plugin/CHANGELOG.json index eb6ef88d547..b81c92354da 100644 --- a/webpack/hashed-folder-copy-plugin/CHANGELOG.json +++ b/webpack/hashed-folder-copy-plugin/CHANGELOG.json @@ -1,6 +1,60 @@ { "name": "@rushstack/hashed-folder-copy-plugin", "entries": [ + { + "version": "1.2.5", + "tag": "@rushstack/hashed-folder-copy-plugin_v1.2.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "1.2.4", + "tag": "@rushstack/hashed-folder-copy-plugin_v1.2.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "1.2.3", + "tag": "@rushstack/hashed-folder-copy-plugin_v1.2.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "1.2.2", + "tag": "@rushstack/hashed-folder-copy-plugin_v1.2.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "1.2.1", "tag": "@rushstack/hashed-folder-copy-plugin_v1.2.1", diff --git a/webpack/hashed-folder-copy-plugin/CHANGELOG.md b/webpack/hashed-folder-copy-plugin/CHANGELOG.md index e9606881c43..70e7e8ec8ee 100644 --- a/webpack/hashed-folder-copy-plugin/CHANGELOG.md +++ b/webpack/hashed-folder-copy-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/hashed-folder-copy-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.2.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.2.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 1.2.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.2.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 1.2.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/webpack/hashed-folder-copy-plugin/package.json b/webpack/hashed-folder-copy-plugin/package.json index f7e3d2c9196..d5636133a69 100644 --- a/webpack/hashed-folder-copy-plugin/package.json +++ b/webpack/hashed-folder-copy-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/hashed-folder-copy-plugin", - "version": "1.2.1", + "version": "1.2.5", "description": "Webpack plugin for copying a folder to the output directory with a hash in the folder name.", "typings": "dist/hashed-folder-copy-plugin.d.ts", "main": "lib/index.js", diff --git a/webpack/loader-load-themed-styles/CHANGELOG.json b/webpack/loader-load-themed-styles/CHANGELOG.json index 11734965ca3..85c82fc46c3 100644 --- a/webpack/loader-load-themed-styles/CHANGELOG.json +++ b/webpack/loader-load-themed-styles/CHANGELOG.json @@ -1,6 +1,78 @@ { "name": "@microsoft/loader-load-themed-styles", "entries": [ + { + "version": "2.1.116", + "tag": "@microsoft/loader-load-themed-styles_v2.1.116", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" to `2.1.20`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" from `^2.1.19` to `2.1.20`" + } + ] + } + }, + { + "version": "2.1.115", + "tag": "@microsoft/loader-load-themed-styles_v2.1.115", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" to `2.1.19`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" from `^2.1.18` to `2.1.19`" + } + ] + } + }, + { + "version": "2.1.114", + "tag": "@microsoft/loader-load-themed-styles_v2.1.114", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" to `2.1.18`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" from `^2.1.17` to `2.1.18`" + } + ] + } + }, + { + "version": "2.1.113", + "tag": "@microsoft/loader-load-themed-styles_v2.1.113", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" to `2.1.17`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" from `^2.1.16` to `2.1.17`" + } + ] + } + }, { "version": "2.1.112", "tag": "@microsoft/loader-load-themed-styles_v2.1.112", diff --git a/webpack/loader-load-themed-styles/CHANGELOG.md b/webpack/loader-load-themed-styles/CHANGELOG.md index 14605fa9a0c..f6cc665e2c7 100644 --- a/webpack/loader-load-themed-styles/CHANGELOG.md +++ b/webpack/loader-load-themed-styles/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @microsoft/loader-load-themed-styles -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 2.1.116 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 2.1.115 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 2.1.114 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 2.1.113 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 2.1.112 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/webpack/loader-load-themed-styles/package.json b/webpack/loader-load-themed-styles/package.json index 4b248e03ace..7fb25afdacc 100644 --- a/webpack/loader-load-themed-styles/package.json +++ b/webpack/loader-load-themed-styles/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/loader-load-themed-styles", - "version": "2.1.112", + "version": "2.1.116", "description": "This simple loader wraps the loading of CSS in script equivalent to `require('load-themed-styles').loadStyles( /* css text */ )`. It is designed to be a replacement for style-loader.", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -22,7 +22,7 @@ }, "peerDependencies": { "@types/webpack": "^4", - "@microsoft/load-themed-styles": "^2.1.16" + "@microsoft/load-themed-styles": "^2.1.20" }, "dependencies": { "loader-utils": "1.4.2" diff --git a/webpack/loader-raw-script/CHANGELOG.json b/webpack/loader-raw-script/CHANGELOG.json index 3becf04939e..9a03a2daaa9 100644 --- a/webpack/loader-raw-script/CHANGELOG.json +++ b/webpack/loader-raw-script/CHANGELOG.json @@ -1,6 +1,54 @@ { "name": "@rushstack/loader-raw-script", "entries": [ + { + "version": "1.5.5", + "tag": "@rushstack/loader-raw-script_v1.5.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "1.5.4", + "tag": "@rushstack/loader-raw-script_v1.5.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "1.5.3", + "tag": "@rushstack/loader-raw-script_v1.5.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "1.5.2", + "tag": "@rushstack/loader-raw-script_v1.5.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "1.5.1", "tag": "@rushstack/loader-raw-script_v1.5.1", diff --git a/webpack/loader-raw-script/CHANGELOG.md b/webpack/loader-raw-script/CHANGELOG.md index 054cabae963..53d26f28663 100644 --- a/webpack/loader-raw-script/CHANGELOG.md +++ b/webpack/loader-raw-script/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/loader-raw-script -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 1.5.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 1.5.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 1.5.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 1.5.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 1.5.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/webpack/loader-raw-script/package.json b/webpack/loader-raw-script/package.json index efc18a4388e..b323753c9e2 100644 --- a/webpack/loader-raw-script/package.json +++ b/webpack/loader-raw-script/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/loader-raw-script", - "version": "1.5.1", + "version": "1.5.5", "description": "", "main": "lib/index.js", "typings": "lib/index.d.ts", diff --git a/webpack/preserve-dynamic-require-plugin/CHANGELOG.json b/webpack/preserve-dynamic-require-plugin/CHANGELOG.json index 84758f6832b..403b0f7681c 100644 --- a/webpack/preserve-dynamic-require-plugin/CHANGELOG.json +++ b/webpack/preserve-dynamic-require-plugin/CHANGELOG.json @@ -1,6 +1,54 @@ { "name": "@rushstack/webpack-preserve-dynamic-require-plugin", "entries": [ + { + "version": "0.11.116", + "tag": "@rushstack/webpack-preserve-dynamic-require-plugin_v0.11.116", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.11.115", + "tag": "@rushstack/webpack-preserve-dynamic-require-plugin_v0.11.115", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.11.114", + "tag": "@rushstack/webpack-preserve-dynamic-require-plugin_v0.11.114", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.11.113", + "tag": "@rushstack/webpack-preserve-dynamic-require-plugin_v0.11.113", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "0.11.112", "tag": "@rushstack/webpack-preserve-dynamic-require-plugin_v0.11.112", diff --git a/webpack/preserve-dynamic-require-plugin/CHANGELOG.md b/webpack/preserve-dynamic-require-plugin/CHANGELOG.md index 331fe9fbacc..faf38878752 100644 --- a/webpack/preserve-dynamic-require-plugin/CHANGELOG.md +++ b/webpack/preserve-dynamic-require-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/webpack-preserve-dynamic-require-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.11.116 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.11.115 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.11.114 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.11.113 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.11.112 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/webpack/preserve-dynamic-require-plugin/package.json b/webpack/preserve-dynamic-require-plugin/package.json index 1508f48c5d8..4722b8a2480 100644 --- a/webpack/preserve-dynamic-require-plugin/package.json +++ b/webpack/preserve-dynamic-require-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/webpack-preserve-dynamic-require-plugin", - "version": "0.11.112", + "version": "0.11.116", "description": "This plugin tells webpack to leave dynamic calls to \"require\" as-is instead of trying to bundle them.", "main": "lib/index.js", "typings": "dist/webpack-preserve-dynamic-require-plugin.d.ts", diff --git a/webpack/set-webpack-public-path-plugin/CHANGELOG.json b/webpack/set-webpack-public-path-plugin/CHANGELOG.json index 6e175cc9bad..9b71310ad30 100644 --- a/webpack/set-webpack-public-path-plugin/CHANGELOG.json +++ b/webpack/set-webpack-public-path-plugin/CHANGELOG.json @@ -1,6 +1,72 @@ { "name": "@rushstack/set-webpack-public-path-plugin", "entries": [ + { + "version": "5.2.5", + "tag": "@rushstack/set-webpack-public-path-plugin_v5.2.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/webpack-plugin-utilities\" to `0.5.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "5.2.4", + "tag": "@rushstack/set-webpack-public-path-plugin_v5.2.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/webpack-plugin-utilities\" to `0.5.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "5.2.3", + "tag": "@rushstack/set-webpack-public-path-plugin_v5.2.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/webpack-plugin-utilities\" to `0.5.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "5.2.2", + "tag": "@rushstack/set-webpack-public-path-plugin_v5.2.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/webpack-plugin-utilities\" to `0.5.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "5.2.1", "tag": "@rushstack/set-webpack-public-path-plugin_v5.2.1", diff --git a/webpack/set-webpack-public-path-plugin/CHANGELOG.md b/webpack/set-webpack-public-path-plugin/CHANGELOG.md index 2a8af71989d..d954c6726ac 100644 --- a/webpack/set-webpack-public-path-plugin/CHANGELOG.md +++ b/webpack/set-webpack-public-path-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/set-webpack-public-path-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 5.2.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 5.2.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 5.2.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 5.2.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 5.2.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/webpack/set-webpack-public-path-plugin/package.json b/webpack/set-webpack-public-path-plugin/package.json index 0b00e1fed1f..64db382d790 100644 --- a/webpack/set-webpack-public-path-plugin/package.json +++ b/webpack/set-webpack-public-path-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/set-webpack-public-path-plugin", - "version": "5.2.1", + "version": "5.2.5", "description": "This plugin sets the webpack public path at runtime.", "main": "lib/index.js", "typings": "dist/set-webpack-public-path-plugin.d.ts", diff --git a/webpack/webpack-embedded-dependencies-plugin/CHANGELOG.json b/webpack/webpack-embedded-dependencies-plugin/CHANGELOG.json index dfb7d98db89..4120effa29d 100644 --- a/webpack/webpack-embedded-dependencies-plugin/CHANGELOG.json +++ b/webpack/webpack-embedded-dependencies-plugin/CHANGELOG.json @@ -1,6 +1,72 @@ { "name": "@rushstack/webpack-embedded-dependencies-plugin", "entries": [ + { + "version": "0.3.5", + "tag": "@rushstack/webpack-embedded-dependencies-plugin_v0.3.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/webpack-plugin-utilities\" to `0.5.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.3.4", + "tag": "@rushstack/webpack-embedded-dependencies-plugin_v0.3.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/webpack-plugin-utilities\" to `0.5.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.3.3", + "tag": "@rushstack/webpack-embedded-dependencies-plugin_v0.3.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/webpack-plugin-utilities\" to `0.5.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.3.2", + "tag": "@rushstack/webpack-embedded-dependencies-plugin_v0.3.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/webpack-plugin-utilities\" to `0.5.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "0.3.1", "tag": "@rushstack/webpack-embedded-dependencies-plugin_v0.3.1", diff --git a/webpack/webpack-embedded-dependencies-plugin/CHANGELOG.md b/webpack/webpack-embedded-dependencies-plugin/CHANGELOG.md index ee169cf6442..be247b1e3d5 100644 --- a/webpack/webpack-embedded-dependencies-plugin/CHANGELOG.md +++ b/webpack/webpack-embedded-dependencies-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/webpack-embedded-dependencies-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.3.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.3.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.3.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.3.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.3.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/webpack/webpack-embedded-dependencies-plugin/package.json b/webpack/webpack-embedded-dependencies-plugin/package.json index 3a04ed28083..965438e4652 100644 --- a/webpack/webpack-embedded-dependencies-plugin/package.json +++ b/webpack/webpack-embedded-dependencies-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/webpack-embedded-dependencies-plugin", - "version": "0.3.1", + "version": "0.3.5", "description": "This plugin analyzes bundled dependencies from Node Modules for use with Component Governance and License Scanning.", "main": "lib/index.js", "typings": "dist/webpack-embedded-dependencies-plugin.d.ts", diff --git a/webpack/webpack-plugin-utilities/CHANGELOG.json b/webpack/webpack-plugin-utilities/CHANGELOG.json index 0fca5734d44..371830fb401 100644 --- a/webpack/webpack-plugin-utilities/CHANGELOG.json +++ b/webpack/webpack-plugin-utilities/CHANGELOG.json @@ -1,6 +1,54 @@ { "name": "@rushstack/webpack-plugin-utilities", "entries": [ + { + "version": "0.5.5", + "tag": "@rushstack/webpack-plugin-utilities_v0.5.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.5.4", + "tag": "@rushstack/webpack-plugin-utilities_v0.5.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.5.3", + "tag": "@rushstack/webpack-plugin-utilities_v0.5.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.5.2", + "tag": "@rushstack/webpack-plugin-utilities_v0.5.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "0.5.1", "tag": "@rushstack/webpack-plugin-utilities_v0.5.1", diff --git a/webpack/webpack-plugin-utilities/CHANGELOG.md b/webpack/webpack-plugin-utilities/CHANGELOG.md index 85348f75619..6ecc4b99f19 100644 --- a/webpack/webpack-plugin-utilities/CHANGELOG.md +++ b/webpack/webpack-plugin-utilities/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/webpack-plugin-utilities -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.5.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.5.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.5.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.5.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.5.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/webpack/webpack-plugin-utilities/package.json b/webpack/webpack-plugin-utilities/package.json index c4fe3245125..8b81eefa939 100644 --- a/webpack/webpack-plugin-utilities/package.json +++ b/webpack/webpack-plugin-utilities/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/webpack-plugin-utilities", - "version": "0.5.1", + "version": "0.5.5", "description": "This plugin sets the webpack public path at runtime.", "main": "lib/index.js", "typings": "dist/webpack-plugin-utilities.d.ts", diff --git a/webpack/webpack-plugin-utilities/src/Testing.ts b/webpack/webpack-plugin-utilities/src/Testing.ts index db3f001d435..90ee28ebcf2 100644 --- a/webpack/webpack-plugin-utilities/src/Testing.ts +++ b/webpack/webpack-plugin-utilities/src/Testing.ts @@ -4,9 +4,16 @@ import path from 'node:path'; import { createFsFromVolume, Volume, type IFs } from 'memfs'; -import type { StatsCompilation as WebpackStatsCompilation } from 'webpack'; +import type { + StatsCompilation as WebpackStatsCompilation, + MultiStats, + Stats, + Configuration, + Compiler, + StatsError, + OutputFileSystem +} from 'webpack'; import webpackMerge from 'webpack-merge'; -import type { MultiStats, Stats, Configuration, Compiler, StatsError, OutputFileSystem } from 'webpack'; /** * @public diff --git a/webpack/webpack-workspace-resolve-plugin/CHANGELOG.json b/webpack/webpack-workspace-resolve-plugin/CHANGELOG.json index fa5c12a07f4..db092e0fa06 100644 --- a/webpack/webpack-workspace-resolve-plugin/CHANGELOG.json +++ b/webpack/webpack-workspace-resolve-plugin/CHANGELOG.json @@ -1,6 +1,66 @@ { "name": "@rushstack/webpack-workspace-resolve-plugin", "entries": [ + { + "version": "0.5.5", + "tag": "@rushstack/webpack-workspace-resolve-plugin_v0.5.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/lookup-by-path\" to `0.8.7`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.5.4", + "tag": "@rushstack/webpack-workspace-resolve-plugin_v0.5.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/lookup-by-path\" to `0.8.6`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.5.3", + "tag": "@rushstack/webpack-workspace-resolve-plugin_v0.5.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/lookup-by-path\" to `0.8.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.5.2", + "tag": "@rushstack/webpack-workspace-resolve-plugin_v0.5.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/lookup-by-path\" to `0.8.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "0.5.1", "tag": "@rushstack/webpack-workspace-resolve-plugin_v0.5.1", diff --git a/webpack/webpack-workspace-resolve-plugin/CHANGELOG.md b/webpack/webpack-workspace-resolve-plugin/CHANGELOG.md index cdc9cf993ab..b1b531770ce 100644 --- a/webpack/webpack-workspace-resolve-plugin/CHANGELOG.md +++ b/webpack/webpack-workspace-resolve-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/webpack-workspace-resolve-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.5.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.5.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.5.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.5.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.5.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/webpack/webpack-workspace-resolve-plugin/package.json b/webpack/webpack-workspace-resolve-plugin/package.json index 7c69602675a..507e31674ea 100644 --- a/webpack/webpack-workspace-resolve-plugin/package.json +++ b/webpack/webpack-workspace-resolve-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/webpack-workspace-resolve-plugin", - "version": "0.5.1", + "version": "0.5.5", "description": "This plugin leverages workspace-level metadata to greatly accelerate module resolution.", "main": "lib/index.js", "typings": "dist/webpack-workspace-resolve-plugin.d.ts", diff --git a/webpack/webpack4-localization-plugin/CHANGELOG.json b/webpack/webpack4-localization-plugin/CHANGELOG.json index 0a6bb5f2143..001263a2107 100644 --- a/webpack/webpack4-localization-plugin/CHANGELOG.json +++ b/webpack/webpack4-localization-plugin/CHANGELOG.json @@ -1,6 +1,78 @@ { "name": "@rushstack/webpack4-localization-plugin", "entries": [ + { + "version": "0.19.5", + "tag": "@rushstack/webpack4-localization-plugin_v0.19.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/localization-utilities\" to `0.14.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.19.4", + "tag": "@rushstack/webpack4-localization-plugin_v0.19.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/localization-utilities\" to `0.14.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.19.3", + "tag": "@rushstack/webpack4-localization-plugin_v0.19.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/localization-utilities\" to `0.14.3`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.19.2", + "tag": "@rushstack/webpack4-localization-plugin_v0.19.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/localization-utilities\" to `0.14.2`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "0.19.1", "tag": "@rushstack/webpack4-localization-plugin_v0.19.1", diff --git a/webpack/webpack4-localization-plugin/CHANGELOG.md b/webpack/webpack4-localization-plugin/CHANGELOG.md index 2e0b691c36f..6653e85de3a 100644 --- a/webpack/webpack4-localization-plugin/CHANGELOG.md +++ b/webpack/webpack4-localization-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/webpack4-localization-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.19.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.19.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.19.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.19.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.19.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/webpack/webpack4-localization-plugin/package.json b/webpack/webpack4-localization-plugin/package.json index 94a3cb22ec7..438b8af13c4 100644 --- a/webpack/webpack4-localization-plugin/package.json +++ b/webpack/webpack4-localization-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/webpack4-localization-plugin", - "version": "0.19.1", + "version": "0.19.5", "description": "This plugin facilitates localization with Webpack.", "main": "lib/index.js", "typings": "dist/webpack4-localization-plugin.d.ts", diff --git a/webpack/webpack4-module-minifier-plugin/CHANGELOG.json b/webpack/webpack4-module-minifier-plugin/CHANGELOG.json index 02369914eb1..6b36f3f3aad 100644 --- a/webpack/webpack4-module-minifier-plugin/CHANGELOG.json +++ b/webpack/webpack4-module-minifier-plugin/CHANGELOG.json @@ -1,6 +1,78 @@ { "name": "@rushstack/webpack4-module-minifier-plugin", "entries": [ + { + "version": "0.14.5", + "tag": "@rushstack/webpack4-module-minifier-plugin_v0.14.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/module-minifier\" to `0.8.5`" + }, + { + "comment": "Updating dependency \"@rushstack/worker-pool\" to `0.6.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.14.4", + "tag": "@rushstack/webpack4-module-minifier-plugin_v0.14.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/module-minifier\" to `0.8.4`" + }, + { + "comment": "Updating dependency \"@rushstack/worker-pool\" to `0.6.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.14.3", + "tag": "@rushstack/webpack4-module-minifier-plugin_v0.14.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/module-minifier\" to `0.8.3`" + }, + { + "comment": "Updating dependency \"@rushstack/worker-pool\" to `0.6.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.14.2", + "tag": "@rushstack/webpack4-module-minifier-plugin_v0.14.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/module-minifier\" to `0.8.2`" + }, + { + "comment": "Updating dependency \"@rushstack/worker-pool\" to `0.6.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "0.14.1", "tag": "@rushstack/webpack4-module-minifier-plugin_v0.14.1", diff --git a/webpack/webpack4-module-minifier-plugin/CHANGELOG.md b/webpack/webpack4-module-minifier-plugin/CHANGELOG.md index 3d1ba4bfda4..cc8e363da92 100644 --- a/webpack/webpack4-module-minifier-plugin/CHANGELOG.md +++ b/webpack/webpack4-module-minifier-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/webpack4-module-minifier-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.14.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.14.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.14.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.14.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.14.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/webpack/webpack4-module-minifier-plugin/package.json b/webpack/webpack4-module-minifier-plugin/package.json index 775c5315ff4..a2b4292fa01 100644 --- a/webpack/webpack4-module-minifier-plugin/package.json +++ b/webpack/webpack4-module-minifier-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/webpack4-module-minifier-plugin", - "version": "0.14.1", + "version": "0.14.5", "description": "This plugin splits minification of webpack compilations into smaller units.", "main": "lib/index.js", "typings": "dist/webpack4-module-minifier-plugin.d.ts", diff --git a/webpack/webpack5-load-themed-styles-loader/CHANGELOG.json b/webpack/webpack5-load-themed-styles-loader/CHANGELOG.json index 328fdc7b24b..c4ec2867a31 100644 --- a/webpack/webpack5-load-themed-styles-loader/CHANGELOG.json +++ b/webpack/webpack5-load-themed-styles-loader/CHANGELOG.json @@ -1,6 +1,84 @@ { "name": "@microsoft/webpack5-load-themed-styles-loader", "entries": [ + { + "version": "0.3.5", + "tag": "@microsoft/webpack5-load-themed-styles-loader_v0.3.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" to `2.1.20`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" from `^2.1.19` to `2.1.20`" + } + ] + } + }, + { + "version": "0.3.4", + "tag": "@microsoft/webpack5-load-themed-styles-loader_v0.3.4", + "date": "Tue, 04 Nov 2025 08:15:14 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" to `2.1.19`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" from `^2.1.18` to `2.1.19`" + } + ] + } + }, + { + "version": "0.3.3", + "tag": "@microsoft/webpack5-load-themed-styles-loader_v0.3.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" to `2.1.18`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" from `^2.1.17` to `2.1.18`" + } + ] + } + }, + { + "version": "0.3.2", + "tag": "@microsoft/webpack5-load-themed-styles-loader_v0.3.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" to `2.1.17`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@microsoft/load-themed-styles\" from `^2.1.16` to `2.1.17`" + } + ] + } + }, { "version": "0.3.1", "tag": "@microsoft/webpack5-load-themed-styles-loader_v0.3.1", diff --git a/webpack/webpack5-load-themed-styles-loader/CHANGELOG.md b/webpack/webpack5-load-themed-styles-loader/CHANGELOG.md index fa89c840585..31cbf0ebf9a 100644 --- a/webpack/webpack5-load-themed-styles-loader/CHANGELOG.md +++ b/webpack/webpack5-load-themed-styles-loader/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @microsoft/webpack5-load-themed-styles-loader -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.3.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.3.4 +Tue, 04 Nov 2025 08:15:14 GMT + +_Version update only_ + +## 0.3.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.3.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.3.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/webpack/webpack5-load-themed-styles-loader/package.json b/webpack/webpack5-load-themed-styles-loader/package.json index b2fcdbd8d48..8bde862735f 100644 --- a/webpack/webpack5-load-themed-styles-loader/package.json +++ b/webpack/webpack5-load-themed-styles-loader/package.json @@ -1,6 +1,6 @@ { "name": "@microsoft/webpack5-load-themed-styles-loader", - "version": "0.3.1", + "version": "0.3.5", "description": "This simple loader wraps the loading of CSS in script equivalent to `require('load-themed-styles').loadStyles( /* css text */ )`. It is designed to be a replacement for style-loader.", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -16,7 +16,7 @@ "_phase:test": "heft run --only test -- --clean" }, "peerDependencies": { - "@microsoft/load-themed-styles": "^2.1.16", + "@microsoft/load-themed-styles": "^2.1.20", "webpack": "^5" }, "peerDependenciesMeta": { diff --git a/webpack/webpack5-localization-plugin/CHANGELOG.json b/webpack/webpack5-localization-plugin/CHANGELOG.json index 5a52f0d3c8a..6c02394528b 100644 --- a/webpack/webpack5-localization-plugin/CHANGELOG.json +++ b/webpack/webpack5-localization-plugin/CHANGELOG.json @@ -1,6 +1,78 @@ { "name": "@rushstack/webpack5-localization-plugin", "entries": [ + { + "version": "0.15.5", + "tag": "@rushstack/webpack5-localization-plugin_v0.15.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/localization-utilities\" to `0.14.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + } + ] + } + }, + { + "version": "0.15.4", + "tag": "@rushstack/webpack5-localization-plugin_v0.15.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/localization-utilities\" to `0.14.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + } + ] + } + }, + { + "version": "0.15.3", + "tag": "@rushstack/webpack5-localization-plugin_v0.15.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/localization-utilities\" to `0.14.3`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.18.0`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + } + ] + } + }, + { + "version": "0.15.2", + "tag": "@rushstack/webpack5-localization-plugin_v0.15.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/localization-utilities\" to `0.14.2`" + }, + { + "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.17.1`" + }, + { + "comment": "Updating dependency \"@rushstack/terminal\" to `0.19.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + } + ] + } + }, { "version": "0.15.1", "tag": "@rushstack/webpack5-localization-plugin_v0.15.1", diff --git a/webpack/webpack5-localization-plugin/CHANGELOG.md b/webpack/webpack5-localization-plugin/CHANGELOG.md index 9229358e94a..4cee596c592 100644 --- a/webpack/webpack5-localization-plugin/CHANGELOG.md +++ b/webpack/webpack5-localization-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/webpack5-localization-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 0.15.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 0.15.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 0.15.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 0.15.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 0.15.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/webpack/webpack5-localization-plugin/package.json b/webpack/webpack5-localization-plugin/package.json index 307b23c15c4..239a1ff56f9 100644 --- a/webpack/webpack5-localization-plugin/package.json +++ b/webpack/webpack5-localization-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/webpack5-localization-plugin", - "version": "0.15.1", + "version": "0.15.5", "description": "This plugin facilitates localization with Webpack.", "main": "lib/index.js", "typings": "dist/webpack5-localization-plugin.d.ts", diff --git a/webpack/webpack5-module-minifier-plugin/CHANGELOG.json b/webpack/webpack5-module-minifier-plugin/CHANGELOG.json index 9088b973e5a..07dc2518d9d 100644 --- a/webpack/webpack5-module-minifier-plugin/CHANGELOG.json +++ b/webpack/webpack5-module-minifier-plugin/CHANGELOG.json @@ -1,6 +1,90 @@ { "name": "@rushstack/webpack5-module-minifier-plugin", "entries": [ + { + "version": "5.6.5", + "tag": "@rushstack/webpack5-module-minifier-plugin_v5.6.5", + "date": "Wed, 12 Nov 2025 01:12:56 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/worker-pool\" to `0.6.5`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.5`" + }, + { + "comment": "Updating dependency \"@rushstack/module-minifier\" to `0.8.5`" + }, + { + "comment": "Updating dependency \"@rushstack/module-minifier\" from `*` to `0.8.5`" + } + ] + } + }, + { + "version": "5.6.4", + "tag": "@rushstack/webpack5-module-minifier-plugin_v5.6.4", + "date": "Tue, 04 Nov 2025 08:15:15 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/worker-pool\" to `0.6.4`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.4`" + }, + { + "comment": "Updating dependency \"@rushstack/module-minifier\" to `0.8.4`" + }, + { + "comment": "Updating dependency \"@rushstack/module-minifier\" from `*` to `0.8.4`" + } + ] + } + }, + { + "version": "5.6.3", + "tag": "@rushstack/webpack5-module-minifier-plugin_v5.6.3", + "date": "Fri, 24 Oct 2025 00:13:38 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/worker-pool\" to `0.6.3`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.3`" + }, + { + "comment": "Updating dependency \"@rushstack/module-minifier\" to `0.8.3`" + }, + { + "comment": "Updating dependency \"@rushstack/module-minifier\" from `*` to `0.8.3`" + } + ] + } + }, + { + "version": "5.6.2", + "tag": "@rushstack/webpack5-module-minifier-plugin_v5.6.2", + "date": "Wed, 22 Oct 2025 00:57:54 GMT", + "comments": { + "dependency": [ + { + "comment": "Updating dependency \"@rushstack/worker-pool\" to `0.6.2`" + }, + { + "comment": "Updating dependency \"@rushstack/heft\" to `1.1.2`" + }, + { + "comment": "Updating dependency \"@rushstack/module-minifier\" to `0.8.2`" + }, + { + "comment": "Updating dependency \"@rushstack/module-minifier\" from `*` to `0.8.2`" + } + ] + } + }, { "version": "5.6.1", "tag": "@rushstack/webpack5-module-minifier-plugin_v5.6.1", diff --git a/webpack/webpack5-module-minifier-plugin/CHANGELOG.md b/webpack/webpack5-module-minifier-plugin/CHANGELOG.md index c69ab27a3a2..8b355dc475d 100644 --- a/webpack/webpack5-module-minifier-plugin/CHANGELOG.md +++ b/webpack/webpack5-module-minifier-plugin/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log - @rushstack/webpack5-module-minifier-plugin -This log was last generated on Wed, 08 Oct 2025 00:13:29 GMT and should not be manually modified. +This log was last generated on Wed, 12 Nov 2025 01:12:56 GMT and should not be manually modified. + +## 5.6.5 +Wed, 12 Nov 2025 01:12:56 GMT + +_Version update only_ + +## 5.6.4 +Tue, 04 Nov 2025 08:15:15 GMT + +_Version update only_ + +## 5.6.3 +Fri, 24 Oct 2025 00:13:38 GMT + +_Version update only_ + +## 5.6.2 +Wed, 22 Oct 2025 00:57:54 GMT + +_Version update only_ ## 5.6.1 Wed, 08 Oct 2025 00:13:29 GMT diff --git a/webpack/webpack5-module-minifier-plugin/package.json b/webpack/webpack5-module-minifier-plugin/package.json index 4f7203fec74..cb3553d5da9 100644 --- a/webpack/webpack5-module-minifier-plugin/package.json +++ b/webpack/webpack5-module-minifier-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@rushstack/webpack5-module-minifier-plugin", - "version": "5.6.1", + "version": "5.6.5", "description": "This plugin splits minification of webpack compilations into smaller units.", "main": "lib/index.js", "typings": "dist/webpack5-module-minifier-plugin.d.ts", diff --git a/webpack/webpack5-module-minifier-plugin/src/GenerateLicenseFileForAsset.ts b/webpack/webpack5-module-minifier-plugin/src/GenerateLicenseFileForAsset.ts index 1e2cad30692..9b098c51b82 100644 --- a/webpack/webpack5-module-minifier-plugin/src/GenerateLicenseFileForAsset.ts +++ b/webpack/webpack5-module-minifier-plugin/src/GenerateLicenseFileForAsset.ts @@ -4,8 +4,7 @@ import * as path from 'node:path'; import type { Comment } from 'estree'; -import type { Compilation, Module } from 'webpack'; -import type { sources } from 'webpack'; +import type { Compilation, Module, sources } from 'webpack'; import type { IAssetInfo } from './ModuleMinifierPlugin.types'; diff --git a/webpack/webpack5-module-minifier-plugin/src/RehydrateAsset.ts b/webpack/webpack5-module-minifier-plugin/src/RehydrateAsset.ts index 31a8140e275..d72f950bf2e 100644 --- a/webpack/webpack5-module-minifier-plugin/src/RehydrateAsset.ts +++ b/webpack/webpack5-module-minifier-plugin/src/RehydrateAsset.ts @@ -1,8 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -import type { sources } from 'webpack'; -import type { Compilation } from 'webpack'; +import type { sources, Compilation } from 'webpack'; import { CHUNK_MODULE_TOKEN, CHUNK_MODULE_REGEX } from './Constants'; import type { IAssetInfo, IModuleMap, IModuleInfo } from './ModuleMinifierPlugin.types';