diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4036f8f98..b73ff350c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1116,8 +1116,8 @@ jobs: run: |- aws ssm put-parameter --name "/published/cdk/cli-npm/version" --type "String" --value "${{ steps.aws-cdk-version.outputs.version }}" --overwrite aws ssm put-parameter --name "/published/cdk/cli-npm/timestamp" --type "String" --value "$(date +%s)" --overwrite - aws-cdk-toolkit-lib_release_docs: - name: "@aws-cdk/toolkit-lib: Publish docs to S3" + aws-cdk-toolkit-lib_release_typedoc: + name: "@aws-cdk/toolkit-lib: Publish typedoc to S3" needs: aws-cdk-toolkit-lib_release_npm runs-on: ubuntu-latest permissions: @@ -1147,12 +1147,12 @@ jobs: role-session-name: s3-docs-publishing@aws-cdk-cli mask-aws-account-id: true role-chaining: true - - name: Publish docs + - name: Publish typedoc env: BUCKET_NAME: ${{ vars.DOCS_BUCKET_NAME }} DOCS_STREAM: toolkit-lib run: |- - echo "Uploading docs to S3" + echo "Uploading typedoc to S3" echo "::add-mask::$BUCKET_NAME" S3_PATH="$DOCS_STREAM/aws-cdk-toolkit-lib-v$(cat dist/version.txt).zip" LATEST="latest-toolkit-lib" @@ -1165,7 +1165,7 @@ jobs: --if-none-match "*" 2>&1); then # File was uploaded successfully, update the latest pointer - echo "New docs artifact uploaded successfully, updating latest pointer" + echo "New typedoc artifact uploaded successfully, updating latest pointer" echo "$S3_PATH" | aws s3 cp - "s3://$BUCKET_NAME/$LATEST" elif echo "$OUTPUT" | grep -q "PreconditionFailed"; then @@ -1175,6 +1175,68 @@ jobs: else # Any other error (permissions, etc) - echo "::error::Failed to upload docs artifact" + echo "::error::Failed to upload typedoc artifact" + exit 1 + fi + aws-cdk-toolkit-lib_release_api_extractor: + name: "@aws-cdk/toolkit-lib: Publish api-extractor to S3" + needs: aws-cdk-toolkit-lib_release_npm + runs-on: ubuntu-latest + permissions: + id-token: write + contents: read + environment: releasing + steps: + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: aws-cdk-toolkit-lib_build-artifact + path: dist + - name: Authenticate Via OIDC Role + id: creds + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-region: us-east-1 + role-to-assume: ${{ vars.AWS_ROLE_TO_ASSUME_FOR_ACCOUNT }} + role-session-name: s3-api-docs-publishing@aws-cdk-cli + mask-aws-account-id: true + - name: Assume the publishing role + id: publishing-creds + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-region: us-east-1 + role-to-assume: ${{ vars.PUBLISH_TOOLKIT_LIB_DOCS_ROLE_ARN }} + role-session-name: s3-api-docs-publishing@aws-cdk-cli + mask-aws-account-id: true + role-chaining: true + - name: Publish api-extractor + env: + BUCKET_NAME: ${{ vars.DOCS_BUCKET_NAME }} + DOCS_STREAM: toolkit-lib + run: |- + echo "Uploading api-extractor to S3" + echo "::add-mask::$BUCKET_NAME" + S3_PATH="$DOCS_STREAM/aws-cdk-toolkit-lib-api-model-v$(cat dist/version.txt).zip" + LATEST="latest-api-model-toolkit-lib" + + # Capture both stdout and stderr + if OUTPUT=$(aws s3api put-object \ + --bucket "$BUCKET_NAME" \ + --key "$S3_PATH" \ + --body dist/api-extractor-docs.zip \ + --if-none-match "*" 2>&1); then + + # File was uploaded successfully, update the latest pointer + echo "New api-extractor artifact uploaded successfully, updating latest pointer" + echo "$S3_PATH" | aws s3 cp - "s3://$BUCKET_NAME/$LATEST" + + elif echo "$OUTPUT" | grep -q "PreconditionFailed"; then + # Check specifically for PreconditionFailed in the error output + echo "::warning::File already exists in S3. Skipping upload." + exit 0 + + else + # Any other error (permissions, etc) + echo "::error::Failed to upload api-extractor artifact" exit 1 fi diff --git a/.projenrc.ts b/.projenrc.ts index fc65cbc50..ad5d02f78 100644 --- a/.projenrc.ts +++ b/.projenrc.ts @@ -12,7 +12,7 @@ import { JsiiBuild } from './projenrc/jsii'; import { LargePrChecker } from './projenrc/large-pr-checker'; import { PrLabeler } from './projenrc/pr-labeler'; import { RecordPublishingTimestamp } from './projenrc/record-publishing-timestamp'; -import { S3DocsPublishing } from './projenrc/s3-docs-publishing'; +import { DocType, S3DocsPublishing } from './projenrc/s3-docs-publishing'; // 5.7 sometimes gives a weird error in `ts-jest` in `@aws-cdk/cli-lib-alpha` // https://github.com/microsoft/TypeScript/issues/60159 @@ -880,6 +880,7 @@ const toolkitLib = configureProject( 'dts-bundle-generator@9.3.1', // use this specific version because newer versions are much slower. This is a temporary arrangement we hope to remove soon anyway. 'esbuild', 'typedoc', + '@microsoft/api-extractor', ], // Watch 2 directories at once releasableCommits: transitiveToolkitPackages('@aws-cdk/toolkit-lib'), @@ -914,11 +915,64 @@ const toolkitLib = configureProject( }), ); +// TypeDoc documentation publishing new S3DocsPublishing(toolkitLib, { docsStream: 'toolkit-lib', artifactPath: 'docs.zip', bucketName: '${{ vars.DOCS_BUCKET_NAME }}', roleToAssume: '${{ vars.PUBLISH_TOOLKIT_LIB_DOCS_ROLE_ARN }}', + docType: DocType.TYPEDOC, +}); + +// API Extractor documentation publishing +new S3DocsPublishing(toolkitLib, { + docsStream: 'toolkit-lib', + artifactPath: 'api-extractor-docs.zip', + bucketName: '${{ vars.DOCS_BUCKET_NAME }}', + roleToAssume: '${{ vars.PUBLISH_TOOLKIT_LIB_DOCS_ROLE_ARN }}', + docType: DocType.API_EXTRACTOR, +}); + +// Add API Extractor configuration +new pj.JsonFile(toolkitLib, 'api-extractor.json', { + marker: false, + obj: { + projectFolder: '.', + mainEntryPointFilePath: '/lib/index.d.ts', + bundledPackages: [], + apiReport: { + enabled: false, + }, + docModel: { + enabled: true, + apiJsonFilePath: './dist/.api.json', + projectFolderUrl: 'https://github.com/aws/aws-cdk-cli/tree/main/packages/%40aws-cdk/toolkit-lib', + }, + dtsRollup: { + enabled: false, + }, + tsdocMetadata: { + enabled: false, + }, + messages: { + compilerMessageReporting: { + default: { + logLevel: 'warning', + }, + }, + extractorMessageReporting: { + default: { + logLevel: 'warning', + }, + }, + tsdocMessageReporting: { + default: { + logLevel: 'warning', + }, + }, + }, + }, + committed: true, }); // Eslint rules @@ -990,12 +1044,35 @@ toolkitLib.gitignore.addPatterns( '!test/_fixtures/**/cdk.out', ); -// Add a command for the docs +// Add a command for the Typedoc docs const toolkitLibDocs = toolkitLib.addTask('docs', { exec: 'typedoc lib/index.ts', receiveArgs: true, }); +// Add commands for the API Extractor docs +const apiExtractorDocsTask = toolkitLib.addTask('api-extractor-docs', { + exec: [ + // Run api-extractor to generate the API model + 'api-extractor run --diagnostics || true', + // Create a directory for the API model + 'mkdir -p dist/api-extractor-docs/cdk/api/toolkit-lib', + // Copy the API model to the directory (with error handling) + 'if [ -f dist/toolkit-lib.api.json ]; then cp dist/toolkit-lib.api.json dist/api-extractor-docs/cdk/api/toolkit-lib/; else echo "Warning: API JSON file not found"; fi', + // Add version file + '(cat dist/version.txt || echo "latest") > dist/api-extractor-docs/cdk/api/toolkit-lib/VERSION', + // Copy README.md if it exists + 'if [ -f README.md ]; then cp README.md dist/api-extractor-docs/cdk/api/toolkit-lib/; fi', + // Copy all files from docs directory if it exists + 'if [ -d docs ]; then mkdir -p dist/api-extractor-docs/cdk/api/toolkit-lib/docs && cp -r docs/* dist/api-extractor-docs/cdk/api/toolkit-lib/docs/; fi', + // Zip the API model and docs files + 'cd dist/api-extractor-docs && zip -r ../api-extractor-docs.zip cdk', + ].join(' && '), +}); + +// Add the API Extractor docs task to the package task +toolkitLib.packageTask.spawn(apiExtractorDocsTask); + // When packaging, output the docs into a specific nested directory // This is required because the zip file needs to have this structure when created toolkitLib.packageTask.spawn(toolkitLibDocs, { args: ['--out dist/docs/cdk/api/toolkit-lib'] }); diff --git a/packages/@aws-cdk/toolkit-lib/.gitattributes b/packages/@aws-cdk/toolkit-lib/.gitattributes index c1b26c9d0..1a8feca5e 100644 --- a/packages/@aws-cdk/toolkit-lib/.gitattributes +++ b/packages/@aws-cdk/toolkit-lib/.gitattributes @@ -12,6 +12,7 @@ /.projen/deps.json linguist-generated /.projen/files.json linguist-generated /.projen/tasks.json linguist-generated +/api-extractor.json linguist-generated /jest.config.json linguist-generated /LICENSE linguist-generated /package.json linguist-generated diff --git a/packages/@aws-cdk/toolkit-lib/.gitignore b/packages/@aws-cdk/toolkit-lib/.gitignore index 1eb7f0c72..65b677450 100644 --- a/packages/@aws-cdk/toolkit-lib/.gitignore +++ b/packages/@aws-cdk/toolkit-lib/.gitignore @@ -45,6 +45,7 @@ jspm_packages/ /dist/changelog.md /dist/version.txt !/.eslintrc.js +!/api-extractor.json db.json.gz .init-version.json index_bg.wasm diff --git a/packages/@aws-cdk/toolkit-lib/.projen/deps.json b/packages/@aws-cdk/toolkit-lib/.projen/deps.json index 5b1f9093c..aa697a7c9 100644 --- a/packages/@aws-cdk/toolkit-lib/.projen/deps.json +++ b/packages/@aws-cdk/toolkit-lib/.projen/deps.json @@ -12,6 +12,10 @@ "name": "@cdklabs/eslint-plugin", "type": "build" }, + { + "name": "@microsoft/api-extractor", + "type": "build" + }, { "name": "@smithy/types", "type": "build" diff --git a/packages/@aws-cdk/toolkit-lib/.projen/files.json b/packages/@aws-cdk/toolkit-lib/.projen/files.json index 493bbd87e..fb4daac5e 100644 --- a/packages/@aws-cdk/toolkit-lib/.projen/files.json +++ b/packages/@aws-cdk/toolkit-lib/.projen/files.json @@ -10,6 +10,7 @@ ".projen/deps.json", ".projen/files.json", ".projen/tasks.json", + "api-extractor.json", "jest.config.json", "LICENSE", "tsconfig.dev.json", diff --git a/packages/@aws-cdk/toolkit-lib/.projen/tasks.json b/packages/@aws-cdk/toolkit-lib/.projen/tasks.json index b16cdb69e..fedc81c11 100644 --- a/packages/@aws-cdk/toolkit-lib/.projen/tasks.json +++ b/packages/@aws-cdk/toolkit-lib/.projen/tasks.json @@ -1,5 +1,13 @@ { "tasks": { + "api-extractor-docs": { + "name": "api-extractor-docs", + "steps": [ + { + "exec": "api-extractor run --diagnostics || true && mkdir -p dist/api-extractor-docs/cdk/api/toolkit-lib && if [ -f dist/toolkit-lib.api.json ]; then cp dist/toolkit-lib.api.json dist/api-extractor-docs/cdk/api/toolkit-lib/; else echo \"Warning: API JSON file not found\"; fi && (cat dist/version.txt || echo \"latest\") > dist/api-extractor-docs/cdk/api/toolkit-lib/VERSION && if [ -f README.md ]; then cp README.md dist/api-extractor-docs/cdk/api/toolkit-lib/; fi && if [ -d docs ]; then mkdir -p dist/api-extractor-docs/cdk/api/toolkit-lib/docs && cp -r docs/* dist/api-extractor-docs/cdk/api/toolkit-lib/docs/; fi && cd dist/api-extractor-docs && zip -r ../api-extractor-docs.zip cdk" + } + ] + }, "build": { "name": "build", "description": "Full release build", @@ -51,7 +59,7 @@ }, "steps": [ { - "exec": "npx npm-check-updates@16 --upgrade --target=minor --peer --no-deprecated --dep=dev,peer,prod,optional --filter=@aws-cdk/aws-service-spec,@cdklabs/eslint-plugin,@smithy/types,@types/fs-extra,@types/jest,@types/split2,aws-cdk-lib,aws-sdk-client-mock,aws-sdk-client-mock-jest,esbuild,eslint-config-prettier,eslint-import-resolver-typescript,eslint-plugin-import,eslint-plugin-jest,eslint-plugin-jsdoc,eslint-plugin-prettier,jest,license-checker,projen,ts-jest,typedoc,@aws-cdk/cx-api,@aws-cdk/region-info,@smithy/middleware-endpoint,@smithy/node-http-handler,@smithy/property-provider,@smithy/shared-ini-file-loader,@smithy/util-retry,@smithy/util-stream,@smithy/util-waiter,archiver,cdk-from-cfn,glob,json-diff,minimatch,promptly,proxy-agent,semver,split2,uuid" + "exec": "npx npm-check-updates@16 --upgrade --target=minor --peer --no-deprecated --dep=dev,peer,prod,optional --filter=@aws-cdk/aws-service-spec,@cdklabs/eslint-plugin,@microsoft/api-extractor,@smithy/types,@types/fs-extra,@types/jest,@types/split2,aws-cdk-lib,aws-sdk-client-mock,aws-sdk-client-mock-jest,esbuild,eslint-config-prettier,eslint-import-resolver-typescript,eslint-plugin-import,eslint-plugin-jest,eslint-plugin-jsdoc,eslint-plugin-prettier,jest,license-checker,projen,ts-jest,typedoc,@aws-cdk/cx-api,@aws-cdk/region-info,@smithy/middleware-endpoint,@smithy/node-http-handler,@smithy/property-provider,@smithy/shared-ini-file-loader,@smithy/util-retry,@smithy/util-stream,@smithy/util-waiter,archiver,cdk-from-cfn,glob,json-diff,minimatch,promptly,proxy-agent,semver,split2,uuid" } ] }, @@ -151,6 +159,9 @@ { "exec": "npm pack --pack-destination dist/js" }, + { + "spawn": "api-extractor-docs" + }, { "spawn": "docs", "args": [ diff --git a/packages/@aws-cdk/toolkit-lib/api-extractor.json b/packages/@aws-cdk/toolkit-lib/api-extractor.json new file mode 100644 index 000000000..8e248d428 --- /dev/null +++ b/packages/@aws-cdk/toolkit-lib/api-extractor.json @@ -0,0 +1,36 @@ +{ + "projectFolder": ".", + "mainEntryPointFilePath": "/lib/index.d.ts", + "bundledPackages": [], + "apiReport": { + "enabled": false + }, + "docModel": { + "enabled": true, + "apiJsonFilePath": "./dist/.api.json", + "projectFolderUrl": "https://github.com/aws/aws-cdk-cli/tree/main/packages/%40aws-cdk/toolkit-lib" + }, + "dtsRollup": { + "enabled": false + }, + "tsdocMetadata": { + "enabled": false + }, + "messages": { + "compilerMessageReporting": { + "default": { + "logLevel": "warning" + } + }, + "extractorMessageReporting": { + "default": { + "logLevel": "warning" + } + }, + "tsdocMessageReporting": { + "default": { + "logLevel": "warning" + } + } + } +} diff --git a/packages/@aws-cdk/toolkit-lib/package.json b/packages/@aws-cdk/toolkit-lib/package.json index d0b12d41c..52e2f9a6d 100644 --- a/packages/@aws-cdk/toolkit-lib/package.json +++ b/packages/@aws-cdk/toolkit-lib/package.json @@ -7,6 +7,7 @@ "directory": "packages/@aws-cdk/toolkit-lib" }, "scripts": { + "api-extractor-docs": "npx projen api-extractor-docs", "build": "npx projen build", "bump": "npx projen bump", "check-for-updates": "npx projen check-for-updates", @@ -37,6 +38,7 @@ "@aws-cdk/aws-service-spec": "^0.1.67", "@aws-cdk/tmp-toolkit-helpers": "^0.0.0", "@cdklabs/eslint-plugin": "^1.3.2", + "@microsoft/api-extractor": "^7.52.3", "@smithy/types": "^4.2.0", "@stylistic/eslint-plugin": "^3", "@types/fs-extra": "^11.0.4", diff --git a/projenrc/s3-docs-publishing.ts b/projenrc/s3-docs-publishing.ts index 812ba3314..4ad9ca083 100644 --- a/projenrc/s3-docs-publishing.ts +++ b/projenrc/s3-docs-publishing.ts @@ -1,6 +1,18 @@ import type { Monorepo, TypeScriptWorkspace } from 'cdklabs-projen-project-types/lib/yarn'; import { Component, github } from 'projen'; +export enum DocType { + /** + * TypeDoc documentation (HTML) + */ + TYPEDOC = 'typedoc', + + /** + * API Extractor documentation (JSON) + */ + API_EXTRACTOR = 'api-extractor', +} + export interface S3DocsPublishingProps { /** * The docs stream to publish to. @@ -21,6 +33,12 @@ export interface S3DocsPublishingProps { * The bucket name (or github expression) to publish to. */ readonly bucketName: string; + + /** + * The type of documentation to publish. + * + */ + readonly docType: DocType; } export class S3DocsPublishing extends Component { @@ -46,9 +64,16 @@ export class S3DocsPublishing extends Component { } const safeName = this.project.name.replace('@', '').replace('/', '-'); + const isApiExtractor = this.props.docType === DocType.API_EXTRACTOR; + + // Determine job ID, name suffix, S3 path based on doc type + const jobIdSuffix = isApiExtractor ? '_api_extractor' : '_typedoc'; + const nameSuffix = isApiExtractor ? 'api-extractor' : 'typedoc'; + const s3PathPrefix = isApiExtractor ? `${safeName}-api-model-v` : `${safeName}-v`; + const latestPrefix = isApiExtractor ? 'latest-api-model-' : 'latest-'; - releaseWf.addJob(`${safeName}_release_docs`, { - name: `${this.project.name}: Publish docs to S3`, + releaseWf.addJob(`${safeName}_release${jobIdSuffix}`, { + name: `${this.project.name}: Publish ${nameSuffix} to S3`, environment: 'releasing', // <-- this has the configuration needs: [`${safeName}_release_npm`], runsOn: ['ubuntu-latest'], @@ -72,7 +97,7 @@ export class S3DocsPublishing extends Component { with: { 'aws-region': 'us-east-1', 'role-to-assume': '${{ vars.AWS_ROLE_TO_ASSUME_FOR_ACCOUNT }}', - 'role-session-name': 's3-docs-publishing@aws-cdk-cli', + 'role-session-name': `s3-${isApiExtractor ? 'api-' : ''}docs-publishing@aws-cdk-cli`, 'mask-aws-account-id': true, }, }, @@ -83,21 +108,21 @@ export class S3DocsPublishing extends Component { with: { 'aws-region': 'us-east-1', 'role-to-assume': this.props.roleToAssume, - 'role-session-name': 's3-docs-publishing@aws-cdk-cli', + 'role-session-name': `s3-${isApiExtractor ? 'api-' : ''}docs-publishing@aws-cdk-cli`, 'mask-aws-account-id': true, 'role-chaining': true, }, }, { - name: 'Publish docs', + name: `Publish ${nameSuffix}`, env: { BUCKET_NAME: this.props.bucketName, DOCS_STREAM: this.props.docsStream, }, - run: `echo "Uploading docs to S3" + run: `echo "Uploading ${nameSuffix} to S3" echo "::add-mask::$BUCKET_NAME" -S3_PATH="$DOCS_STREAM/${safeName}-v$(cat dist/version.txt).zip" -LATEST="latest-${this.props.docsStream}" +S3_PATH="$DOCS_STREAM/${s3PathPrefix}$(cat dist/version.txt).zip" +LATEST="${latestPrefix}${this.props.docsStream}" # Capture both stdout and stderr if OUTPUT=$(aws s3api put-object \\ @@ -107,7 +132,7 @@ if OUTPUT=$(aws s3api put-object \\ --if-none-match "*" 2>&1); then # File was uploaded successfully, update the latest pointer - echo "New docs artifact uploaded successfully, updating latest pointer" + echo "New ${nameSuffix} artifact uploaded successfully, updating latest pointer" echo "$S3_PATH" | aws s3 cp - "s3://$BUCKET_NAME/$LATEST" elif echo "$OUTPUT" | grep -q "PreconditionFailed"; then @@ -117,7 +142,7 @@ elif echo "$OUTPUT" | grep -q "PreconditionFailed"; then else # Any other error (permissions, etc) - echo "::error::Failed to upload docs artifact" + echo "::error::Failed to upload ${nameSuffix} artifact" exit 1 fi`, }, diff --git a/yarn.lock b/yarn.lock index 43039c53f..42568a663 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2504,6 +2504,49 @@ dependencies: ajv "^8.17.1" +"@microsoft/api-extractor-model@7.30.5": + version "7.30.5" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.30.5.tgz#09b4412a3344ce8e6b58114bf350d6d0b8c86b63" + integrity sha512-0ic4rcbcDZHz833RaTZWTGu+NpNgrxVNjVaor0ZDUymfDFzjA/Uuk8hYziIUIOEOSTfmIQqyzVwlzxZxPe7tOA== + dependencies: + "@microsoft/tsdoc" "~0.15.1" + "@microsoft/tsdoc-config" "~0.17.1" + "@rushstack/node-core-library" "5.13.0" + +"@microsoft/api-extractor@^7.52.3": + version "7.52.3" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.52.3.tgz#f943f5e88c2ed77009fd24689f93a4ed84473842" + integrity sha512-QEs6l8h7p9eOSHrQ9NBBUZhUuq+j/2QKcRgigbSs2YQepKz8glvsqmsUOp+nvuaY60ps7KkpVVYQCj81WLoMVQ== + dependencies: + "@microsoft/api-extractor-model" "7.30.5" + "@microsoft/tsdoc" "~0.15.1" + "@microsoft/tsdoc-config" "~0.17.1" + "@rushstack/node-core-library" "5.13.0" + "@rushstack/rig-package" "0.5.3" + "@rushstack/terminal" "0.15.2" + "@rushstack/ts-command-line" "4.23.7" + lodash "~4.17.15" + minimatch "~3.0.3" + resolve "~1.22.1" + semver "~7.5.4" + source-map "~0.6.1" + typescript "5.8.2" + +"@microsoft/tsdoc-config@~0.17.1": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc-config/-/tsdoc-config-0.17.1.tgz#e0f0b50628f4ad7fe121ca616beacfe6a25b9335" + integrity sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw== + dependencies: + "@microsoft/tsdoc" "0.15.1" + ajv "~8.12.0" + jju "~1.4.0" + resolve "~1.22.2" + +"@microsoft/tsdoc@0.15.1", "@microsoft/tsdoc@~0.15.1": + version "0.15.1" + resolved "https://registry.yarnpkg.com/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz#d4f6937353bc4568292654efb0a0e0532adbcba2" + integrity sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw== + "@mswjs/interceptors@^0.38.0": version "0.38.0" resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.38.0.tgz#bd033abcc6a35fd6ecd575a3b5ddf2f773fe0a97" @@ -2772,6 +2815,46 @@ resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== +"@rushstack/node-core-library@5.13.0": + version "5.13.0" + resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-5.13.0.tgz#f79d6868b74be102eee75b93c37be45fb9b47ead" + integrity sha512-IGVhy+JgUacAdCGXKUrRhwHMTzqhWwZUI+qEPcdzsb80heOw0QPbhhoVsoiMF7Klp8eYsp7hzpScMXmOa3Uhfg== + dependencies: + ajv "~8.13.0" + ajv-draft-04 "~1.0.0" + ajv-formats "~3.0.1" + fs-extra "~11.3.0" + import-lazy "~4.0.0" + jju "~1.4.0" + resolve "~1.22.1" + semver "~7.5.4" + +"@rushstack/rig-package@0.5.3": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@rushstack/rig-package/-/rig-package-0.5.3.tgz#ea4d8a3458540b1295500149c04e645f23134e5d" + integrity sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow== + dependencies: + resolve "~1.22.1" + strip-json-comments "~3.1.1" + +"@rushstack/terminal@0.15.2": + version "0.15.2" + resolved "https://registry.yarnpkg.com/@rushstack/terminal/-/terminal-0.15.2.tgz#8fa030409603a22db606ecb18709050e46517add" + integrity sha512-7Hmc0ysK5077R/IkLS9hYu0QuNafm+TbZbtYVzCMbeOdMjaRboLKrhryjwZSRJGJzu+TV1ON7qZHeqf58XfLpA== + dependencies: + "@rushstack/node-core-library" "5.13.0" + supports-color "~8.1.1" + +"@rushstack/ts-command-line@4.23.7": + version "4.23.7" + resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.23.7.tgz#9c6f05a00f776c7b8ea3321e2b5a03acc5e9efa8" + integrity sha512-Gr9cB7DGe6uz5vq2wdr89WbVDKz0UeuFEn5H2CfWDe7JvjFFaiV15gi6mqDBTbHhHCWS7w8mF1h3BnIfUndqdA== + dependencies: + "@rushstack/terminal" "0.15.2" + "@types/argparse" "1.0.38" + argparse "~1.0.9" + string-argv "~0.3.1" + "@shikijs/engine-oniguruma@^3.2.1": version "3.2.1" resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-3.2.1.tgz#be07d9f09a4b5e35af1896ff232001b9d4f5466e" @@ -3501,6 +3584,11 @@ dependencies: "@types/readdir-glob" "*" +"@types/argparse@1.0.38": + version "1.0.38" + resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-1.0.38.tgz#a81fd8606d481f873a3800c6ebae4f1d768a56a9" + integrity sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA== + "@types/babel__core@^7.1.14": version "7.20.5" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" @@ -4086,6 +4174,18 @@ agent-base@^7.1.0, agent-base@^7.1.2: resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== +ajv-draft-04@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz#3b64761b268ba0b9e668f0b41ba53fce0ad77fc8" + integrity sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw== + +ajv-formats@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== + dependencies: + ajv "^8.0.0" + ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -4096,7 +4196,7 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1, ajv@^8.17.1: +ajv@^8.0.0, ajv@^8.0.1, ajv@^8.17.1: version "8.17.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== @@ -4106,6 +4206,26 @@ ajv@^8.0.1, ajv@^8.17.1: json-schema-traverse "^1.0.0" require-from-string "^2.0.2" +ajv@~8.12.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@~8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.13.0.tgz#a3939eaec9fb80d217ddf0c3376948c023f28c91" + integrity sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA== + dependencies: + fast-deep-equal "^3.1.3" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.4.1" + ansi-colors@^4.1.1: version "4.1.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" @@ -4206,7 +4326,7 @@ arg@^4.1.0: resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== -argparse@^1.0.7: +argparse@^1.0.7, argparse@~1.0.9: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== @@ -6396,7 +6516,7 @@ fs-extra@^10.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^11.3.0: +fs-extra@^11.3.0, fs-extra@~11.3.0: version "11.3.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== @@ -6862,6 +6982,11 @@ import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-lazy@~4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" + integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== + import-local@^3.0.2: version "3.2.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" @@ -7672,6 +7797,11 @@ jest@^29.7.0: import-local "^3.0.2" jest-cli "^29.7.0" +jju@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" + integrity sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== + js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -8108,7 +8238,7 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@^4.17.15: +lodash@^4.17.15, lodash@~4.17.15: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -8349,6 +8479,13 @@ minimatch@^9.0.4, minimatch@^9.0.5: dependencies: brace-expansion "^2.0.1" +minimatch@~3.0.3: + version "3.0.8" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" + integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== + dependencies: + brace-expansion "^1.1.7" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -9450,7 +9587,7 @@ resolve.exports@2.0.3, resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.10, resolve@^1.22.4: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.10, resolve@^1.22.4, resolve@~1.22.1, resolve@~1.22.2: version "1.22.10" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== @@ -9584,6 +9721,13 @@ semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.5.3, semver@^7.5.4, semve resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== +semver@~7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -9998,6 +10142,11 @@ strict-event-emitter@^0.5.1: resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93" integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ== +string-argv@~0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== + string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" @@ -10141,7 +10290,7 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1, strip-json-comments@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -10177,7 +10326,7 @@ supports-color@^7, supports-color@^7.1.0, supports-color@^7.2.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: +supports-color@^8.0.0, supports-color@~8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -10569,7 +10718,7 @@ typescript@5.6, typescript@~5.6: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== -typescript@>=5.0.2, typescript@^5.7.3: +typescript@5.8.2, typescript@>=5.0.2, typescript@^5.7.3: version "5.8.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.2.tgz#8170b3702f74b79db2e5a96207c15e65807999e4" integrity sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ== @@ -10653,7 +10802,7 @@ update-browserslist-db@^1.1.1: escalade "^3.2.0" picocolors "^1.1.1" -uri-js@^4.2.2: +uri-js@^4.2.2, uri-js@^4.4.1: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==