diff --git a/.gitignore b/.gitignore index 20b4d3f42c6..4df734de52f 100644 --- a/.gitignore +++ b/.gitignore @@ -63,6 +63,14 @@ jspm_packages/ .idea/ *.iml +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!*.code-workspace + # Rush temporary files common/deploy/ common/temp/ diff --git a/.prettierignore b/.prettierignore index 1865a00ca0e..6940ccf1234 100644 --- a/.prettierignore +++ b/.prettierignore @@ -104,6 +104,9 @@ libraries/rush-lib/assets/rush-init/ # These are intentionally invalid files libraries/heft-config-file/src/test/errorCases/invalidJson/config.json +# common scripts in sandbox repo +build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/scripts/ + # We'll consider enabling this later; Prettier reformats code blocks, which affects end-user content *.md diff --git a/.vscode/redis-cobuild.code-workspace b/.vscode/redis-cobuild.code-workspace new file mode 100644 index 00000000000..c51d9ed6da0 --- /dev/null +++ b/.vscode/redis-cobuild.code-workspace @@ -0,0 +1,20 @@ +{ + "folders": [ + { + "name": "rush-redis-cobuild-plugin-integration-test", + "path": "../build-tests/rush-redis-cobuild-plugin-integration-test" + }, + { + "name": "rush-redis-cobuild-plugin", + "path": "../rush-plugins/rush-redis-cobuild-plugin" + }, + { + "name": "rush-lib", + "path": "../libraries/rush-lib" + }, + { + "name": ".vscode", + "path": "../.vscode" + } + ] +} diff --git a/README.md b/README.md index 1fa1ff522de..9d1365fa499 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,7 @@ These GitHub repositories provide supplementary resources for Rush Stack: | [/rush-plugins/rush-amazon-s3-build-cache-plugin](./rush-plugins/rush-amazon-s3-build-cache-plugin/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Frush-amazon-s3-build-cache-plugin.svg)](https://badge.fury.io/js/%40rushstack%2Frush-amazon-s3-build-cache-plugin) | | [@rushstack/rush-amazon-s3-build-cache-plugin](https://www.npmjs.com/package/@rushstack/rush-amazon-s3-build-cache-plugin) | | [/rush-plugins/rush-azure-storage-build-cache-plugin](./rush-plugins/rush-azure-storage-build-cache-plugin/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Frush-azure-storage-build-cache-plugin.svg)](https://badge.fury.io/js/%40rushstack%2Frush-azure-storage-build-cache-plugin) | | [@rushstack/rush-azure-storage-build-cache-plugin](https://www.npmjs.com/package/@rushstack/rush-azure-storage-build-cache-plugin) | | [/rush-plugins/rush-http-build-cache-plugin](./rush-plugins/rush-http-build-cache-plugin/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Frush-http-build-cache-plugin.svg)](https://badge.fury.io/js/%40rushstack%2Frush-http-build-cache-plugin) | | [@rushstack/rush-http-build-cache-plugin](https://www.npmjs.com/package/@rushstack/rush-http-build-cache-plugin) | +| [/rush-plugins/rush-redis-cobuild-plugin](./rush-plugins/rush-redis-cobuild-plugin/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Frush-redis-cobuild-plugin.svg)](https://badge.fury.io/js/%40rushstack%2Frush-redis-cobuild-plugin) | | [@rushstack/rush-redis-cobuild-plugin](https://www.npmjs.com/package/@rushstack/rush-redis-cobuild-plugin) | | [/rush-plugins/rush-serve-plugin](./rush-plugins/rush-serve-plugin/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Frush-serve-plugin.svg)](https://badge.fury.io/js/%40rushstack%2Frush-serve-plugin) | | [@rushstack/rush-serve-plugin](https://www.npmjs.com/package/@rushstack/rush-serve-plugin) | | [/webpack/hashed-folder-copy-plugin](./webpack/hashed-folder-copy-plugin/) | [![npm version](https://badge.fury.io/js/%40rushstack%2Fhashed-folder-copy-plugin.svg)](https://badge.fury.io/js/%40rushstack%2Fhashed-folder-copy-plugin) | [changelog](./webpack/hashed-folder-copy-plugin/CHANGELOG.md) | [@rushstack/hashed-folder-copy-plugin](https://www.npmjs.com/package/@rushstack/hashed-folder-copy-plugin) | | [/webpack/loader-load-themed-styles](./webpack/loader-load-themed-styles/) | [![npm version](https://badge.fury.io/js/%40microsoft%2Floader-load-themed-styles.svg)](https://badge.fury.io/js/%40microsoft%2Floader-load-themed-styles) | [changelog](./webpack/loader-load-themed-styles/CHANGELOG.md) | [@microsoft/loader-load-themed-styles](https://www.npmjs.com/package/@microsoft/loader-load-themed-styles) | @@ -169,6 +170,7 @@ These GitHub repositories provide supplementary resources for Rush Stack: | [/build-tests/rush-amazon-s3-build-cache-plugin-integration-test](./build-tests/rush-amazon-s3-build-cache-plugin-integration-test/) | Tests connecting to an amazon S3 endpoint | | [/build-tests/rush-lib-declaration-paths-test](./build-tests/rush-lib-declaration-paths-test/) | This project ensures all of the paths in rush-lib/lib/... have imports that resolve correctly. If this project builds, all `lib/**/*.d.ts` files in the `@microsoft/rush-lib` package are valid. | | [/build-tests/rush-project-change-analyzer-test](./build-tests/rush-project-change-analyzer-test/) | This is an example project that uses rush-lib's ProjectChangeAnalyzer to | +| [/build-tests/rush-redis-cobuild-plugin-integration-test](./build-tests/rush-redis-cobuild-plugin-integration-test/) | Tests connecting to an redis server | | [/build-tests/set-webpack-public-path-plugin-webpack4-test](./build-tests/set-webpack-public-path-plugin-webpack4-test/) | Building this project tests the set-webpack-public-path-plugin using Webpack 4 | | [/build-tests/ts-command-line-test](./build-tests/ts-command-line-test/) | Building this project is a regression test for ts-command-line | | [/libraries/rush-themed-ui](./libraries/rush-themed-ui/) | Rush Component Library: a set of themed components for rush projects | diff --git a/build-tests/install-test-workspace/workspace/common/pnpm-lock.yaml b/build-tests/install-test-workspace/workspace/common/pnpm-lock.yaml index e46bb038b5a..c6698769874 100644 --- a/build-tests/install-test-workspace/workspace/common/pnpm-lock.yaml +++ b/build-tests/install-test-workspace/workspace/common/pnpm-lock.yaml @@ -7,13 +7,13 @@ importers: rush-lib-test: specifiers: - '@microsoft/rush-lib': file:microsoft-rush-lib-5.101.0.tgz + '@microsoft/rush-lib': file:microsoft-rush-lib-5.103.0.tgz '@types/node': 14.18.36 colors: ^1.4.0 rimraf: ^4.1.2 typescript: ~5.0.4 dependencies: - '@microsoft/rush-lib': file:../temp/tarballs/microsoft-rush-lib-5.101.0.tgz_@types+node@14.18.36 + '@microsoft/rush-lib': file:../temp/tarballs/microsoft-rush-lib-5.103.0.tgz_@types+node@14.18.36 colors: 1.4.0 devDependencies: '@types/node': 14.18.36 @@ -22,17 +22,17 @@ importers: rush-sdk-test: specifiers: - '@microsoft/rush-lib': file:microsoft-rush-lib-5.101.0.tgz - '@rushstack/rush-sdk': file:rushstack-rush-sdk-5.101.0.tgz + '@microsoft/rush-lib': file:microsoft-rush-lib-5.103.0.tgz + '@rushstack/rush-sdk': file:rushstack-rush-sdk-5.103.0.tgz '@types/node': 14.18.36 colors: ^1.4.0 rimraf: ^4.1.2 typescript: ~5.0.4 dependencies: - '@rushstack/rush-sdk': file:../temp/tarballs/rushstack-rush-sdk-5.101.0.tgz_@types+node@14.18.36 + '@rushstack/rush-sdk': file:../temp/tarballs/rushstack-rush-sdk-5.103.0.tgz_@types+node@14.18.36 colors: 1.4.0 devDependencies: - '@microsoft/rush-lib': file:../temp/tarballs/microsoft-rush-lib-5.101.0.tgz_@types+node@14.18.36 + '@microsoft/rush-lib': file:../temp/tarballs/microsoft-rush-lib-5.103.0.tgz_@types+node@14.18.36 '@types/node': 14.18.36 rimraf: 4.4.1 typescript: 5.0.4 @@ -3737,6 +3737,10 @@ packages: /util-deprecate/1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + /uuid/8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + /v8-compile-cache/2.3.0: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true @@ -3898,11 +3902,11 @@ packages: optionalDependencies: commander: 2.20.3 - file:../temp/tarballs/microsoft-rush-lib-5.101.0.tgz_@types+node@14.18.36: - resolution: {tarball: file:../temp/tarballs/microsoft-rush-lib-5.101.0.tgz} - id: file:../temp/tarballs/microsoft-rush-lib-5.101.0.tgz + file:../temp/tarballs/microsoft-rush-lib-5.103.0.tgz_@types+node@14.18.36: + resolution: {tarball: file:../temp/tarballs/microsoft-rush-lib-5.103.0.tgz} + id: file:../temp/tarballs/microsoft-rush-lib-5.103.0.tgz name: '@microsoft/rush-lib' - version: 5.101.0 + version: 5.103.0 engines: {node: '>=5.6.0'} dependencies: '@pnpm/dependency-path': 2.1.2 @@ -3910,10 +3914,10 @@ packages: '@rushstack/heft-config-file': file:../temp/tarballs/rushstack-heft-config-file-0.13.3.tgz_@types+node@14.18.36 '@rushstack/node-core-library': file:../temp/tarballs/rushstack-node-core-library-3.59.7.tgz_@types+node@14.18.36 '@rushstack/package-deps-hash': file:../temp/tarballs/rushstack-package-deps-hash-4.0.44.tgz_@types+node@14.18.36 - '@rushstack/package-extractor': file:../temp/tarballs/rushstack-package-extractor-0.4.1.tgz_@types+node@14.18.36 + '@rushstack/package-extractor': file:../temp/tarballs/rushstack-package-extractor-0.5.1.tgz_@types+node@14.18.36 '@rushstack/rig-package': file:../temp/tarballs/rushstack-rig-package-0.4.1.tgz - '@rushstack/stream-collator': file:../temp/tarballs/rushstack-stream-collator-4.0.262.tgz_@types+node@14.18.36 - '@rushstack/terminal': file:../temp/tarballs/rushstack-terminal-0.5.37.tgz_@types+node@14.18.36 + '@rushstack/stream-collator': file:../temp/tarballs/rushstack-stream-collator-4.0.263.tgz_@types+node@14.18.36 + '@rushstack/terminal': file:../temp/tarballs/rushstack-terminal-0.5.38.tgz_@types+node@14.18.36 '@rushstack/ts-command-line': file:../temp/tarballs/rushstack-ts-command-line-4.15.2.tgz '@types/node-fetch': 2.6.2 '@yarnpkg/lockfile': 1.0.2 @@ -3940,6 +3944,7 @@ packages: tapable: 2.2.1 tar: 6.1.15 true-case-path: 2.2.1 + uuid: 8.3.2 transitivePeerDependencies: - '@types/node' - encoding @@ -4231,19 +4236,20 @@ packages: transitivePeerDependencies: - '@types/node' - file:../temp/tarballs/rushstack-package-extractor-0.4.1.tgz_@types+node@14.18.36: - resolution: {tarball: file:../temp/tarballs/rushstack-package-extractor-0.4.1.tgz} - id: file:../temp/tarballs/rushstack-package-extractor-0.4.1.tgz + file:../temp/tarballs/rushstack-package-extractor-0.5.1.tgz_@types+node@14.18.36: + resolution: {tarball: file:../temp/tarballs/rushstack-package-extractor-0.5.1.tgz} + id: file:../temp/tarballs/rushstack-package-extractor-0.5.1.tgz name: '@rushstack/package-extractor' - version: 0.4.1 + version: 0.5.1 dependencies: '@pnpm/link-bins': 5.3.25 '@rushstack/node-core-library': file:../temp/tarballs/rushstack-node-core-library-3.59.7.tgz_@types+node@14.18.36 - '@rushstack/terminal': file:../temp/tarballs/rushstack-terminal-0.5.37.tgz_@types+node@14.18.36 + '@rushstack/terminal': file:../temp/tarballs/rushstack-terminal-0.5.38.tgz_@types+node@14.18.36 ignore: 5.1.9 jszip: 3.8.0 minimatch: 3.0.8 npm-packlist: 2.1.5 + semver: 7.5.4 transitivePeerDependencies: - '@types/node' @@ -4255,11 +4261,11 @@ packages: resolve: 1.22.1 strip-json-comments: 3.1.1 - file:../temp/tarballs/rushstack-rush-sdk-5.101.0.tgz_@types+node@14.18.36: - resolution: {tarball: file:../temp/tarballs/rushstack-rush-sdk-5.101.0.tgz} - id: file:../temp/tarballs/rushstack-rush-sdk-5.101.0.tgz + file:../temp/tarballs/rushstack-rush-sdk-5.103.0.tgz_@types+node@14.18.36: + resolution: {tarball: file:../temp/tarballs/rushstack-rush-sdk-5.103.0.tgz} + id: file:../temp/tarballs/rushstack-rush-sdk-5.103.0.tgz name: '@rushstack/rush-sdk' - version: 5.101.0 + version: 5.103.0 dependencies: '@rushstack/node-core-library': file:../temp/tarballs/rushstack-node-core-library-3.59.7.tgz_@types+node@14.18.36 '@types/node-fetch': 2.6.2 @@ -4268,22 +4274,22 @@ packages: - '@types/node' dev: false - file:../temp/tarballs/rushstack-stream-collator-4.0.262.tgz_@types+node@14.18.36: - resolution: {tarball: file:../temp/tarballs/rushstack-stream-collator-4.0.262.tgz} - id: file:../temp/tarballs/rushstack-stream-collator-4.0.262.tgz + file:../temp/tarballs/rushstack-stream-collator-4.0.263.tgz_@types+node@14.18.36: + resolution: {tarball: file:../temp/tarballs/rushstack-stream-collator-4.0.263.tgz} + id: file:../temp/tarballs/rushstack-stream-collator-4.0.263.tgz name: '@rushstack/stream-collator' - version: 4.0.262 + version: 4.0.263 dependencies: '@rushstack/node-core-library': file:../temp/tarballs/rushstack-node-core-library-3.59.7.tgz_@types+node@14.18.36 - '@rushstack/terminal': file:../temp/tarballs/rushstack-terminal-0.5.37.tgz_@types+node@14.18.36 + '@rushstack/terminal': file:../temp/tarballs/rushstack-terminal-0.5.38.tgz_@types+node@14.18.36 transitivePeerDependencies: - '@types/node' - file:../temp/tarballs/rushstack-terminal-0.5.37.tgz_@types+node@14.18.36: - resolution: {tarball: file:../temp/tarballs/rushstack-terminal-0.5.37.tgz} - id: file:../temp/tarballs/rushstack-terminal-0.5.37.tgz + file:../temp/tarballs/rushstack-terminal-0.5.38.tgz_@types+node@14.18.36: + resolution: {tarball: file:../temp/tarballs/rushstack-terminal-0.5.38.tgz} + id: file:../temp/tarballs/rushstack-terminal-0.5.38.tgz name: '@rushstack/terminal' - version: 0.5.37 + version: 0.5.38 peerDependencies: '@types/node': '*' peerDependenciesMeta: diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/.eslintrc.js b/build-tests/rush-redis-cobuild-plugin-integration-test/.eslintrc.js new file mode 100644 index 00000000000..60160b354c4 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/.eslintrc.js @@ -0,0 +1,7 @@ +// This is a workaround for https://github.com/eslint/eslint/issues/3458 +require('@rushstack/eslint-config/patch/modern-module-resolution'); + +module.exports = { + extends: ['@rushstack/eslint-config/profile/node'], + parserOptions: { tsconfigRootDir: __dirname } +}; diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/.gitignore b/build-tests/rush-redis-cobuild-plugin-integration-test/.gitignore new file mode 100644 index 00000000000..97e8499abcc --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/.gitignore @@ -0,0 +1 @@ +redis-data/dump.rdb \ No newline at end of file diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/.vscode/tasks.json b/build-tests/rush-redis-cobuild-plugin-integration-test/.vscode/tasks.json new file mode 100644 index 00000000000..93aa001729c --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/.vscode/tasks.json @@ -0,0 +1,83 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "shell", + "label": "cobuild", + "dependsOrder": "sequence", + "dependsOn": ["update", "_cobuild"], + "problemMatcher": [] + }, + { + "type": "shell", + "label": "_cobuild", + "dependsOn": ["build 1", "build 2"], + "problemMatcher": [] + }, + { + "type": "shell", + "label": "update", + "command": "node ../../lib/runRush.js update", + "problemMatcher": [], + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "dedicated", + "showReuseMessage": true, + "clear": false + }, + "options": { + "cwd": "${workspaceFolder}/sandbox/repo" + } + }, + { + "type": "shell", + "label": "build 1", + "command": "node ../../lib/runRush.js --debug cobuild --timeline --parallelism 1 --verbose", + "problemMatcher": [], + "options": { + "cwd": "${workspaceFolder}/sandbox/repo", + "env": { + "RUSH_COBUILD_CONTEXT_ID": "integration-test", + "RUSH_COBUILD_RUNNER_ID": "runner1", + "RUSH_COBUILD_LEAF_PROJECT_LOG_ONLY_ALLOWED": "1", + "REDIS_PASS": "redis123" + } + }, + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "dedicated", + "showReuseMessage": true, + "clear": true + }, + "group": "build" + }, + { + "type": "shell", + "label": "build 2", + "command": "node ../../lib/runRush.js --debug cobuild --timeline --parallelism 1 --verbose", + "problemMatcher": [], + "options": { + "cwd": "${workspaceFolder}/sandbox/repo", + "env": { + "RUSH_COBUILD_CONTEXT_ID": "integration-test", + "RUSH_COBUILD_RUNNER_ID": "runner2", + "RUSH_COBUILD_LEAF_PROJECT_LOG_ONLY_ALLOWED": "1", + "REDIS_PASS": "redis123" + } + }, + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "dedicated", + "showReuseMessage": true, + "clear": true + }, + "group": "build" + } + ] +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/README.md b/build-tests/rush-redis-cobuild-plugin-integration-test/README.md new file mode 100644 index 00000000000..330224b8f7e --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/README.md @@ -0,0 +1,145 @@ +# About + +This package enables integration testing of the `RedisCobuildLockProvider` by connecting to an actual Redis created using an [redis](https://hub.docker.com/_/redis) docker image. + +# Prerequisites + +Docker and docker compose must be installed + +# Start the Redis + +In this folder run `docker-compose up -d` + +# Stop the Redis + +In this folder run `docker-compose down` + +# Install and build the integration test code + +```sh +rush update +rush build -t rush-redis-cobuild-plugin-integration-test +``` + +# Run the test for lock provider + +```sh +# start the docker container: docker-compose up -d +# build the code: rushx build +rushx test-lock-provider +``` + +# Integration test in sandbox repo + +Sandbox repo folder: **build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo** + +```sh +cd sandbox/repo +node ../../lib/runRush.js update +``` + +#### Case 1: Normal build, Cobuild is disabled because of missing RUSH_COBUILD_CONTEXT_ID + +1. Write to build cache + +```sh +rm -rf common/temp/build-cache && node ../../lib/runRush.js --debug cobuild +``` + +2. Read from build cache + +```sh +node ../../lib/runRush.js --debug cobuild +``` + +Expected behavior: Cobuild feature is disabled. Build cache is saved/restored as normal. + +#### Case 2: Cobuild enabled by specifying RUSH_COBUILD_CONTEXT_ID and Redis authentication + +1. Clear redis server + +```sh +(cd ../.. && docker compose down && docker compose up -d) +``` + +2. Run cobuilds + +```sh +rm -rf common/temp/build-cache && RUSH_COBUILD_CONTEXT_ID=foo REDIS_PASS=redis123 RUSH_COBUILD_RUNNER_ID=runner1 node ../../lib/runRush.js --debug cobuild +``` + +Expected behavior: Cobuild feature is enabled. Run command successfully. +You can also see cobuild related logs in the terminal. + +```sh +Running cobuild (runner foo/runner1) +Analyzing repo state... DONE (0.11 seconds) + +Executing a maximum of 10 simultaneous processes... + +==[ b (build) ]====================================================[ 1 of 9 ]== +Get completed_state(cobuild:completed:foo:2e477baf39a85b28fc40e63b417692fe8afcc023)_package(b)_phase(_phase:build): SUCCESS;2e477baf39a85b28fc40e63b417692fe8afcc023 +Get completed_state(cobuild:completed:foo:cfc620db4e74a6f0db41b1a86d0b5402966b97f3)_package(a)_phase(_phase:build): SUCCESS;cfc620db4e74a6f0db41b1a86d0b5402966b97f3 +Successfully acquired lock(cobuild:lock:foo:4c36160884a7a502f9894e8f0adae05c45c8cc4b)_package(b)_phase(_phase:build) to runner(runner1) and it expires in 30s +``` + +#### Case 3: Cobuild enabled, run two cobuild commands in parallel + +> Note: This test requires Visual Studio Code to be installed. + +1. Open predefined `.vscode/redis-cobuild.code-workspace` in Visual Studio Code. + +2. Clear redis server + +```sh +# Under rushstack/build-tests/rush-redis-cobuild-plugin-integration-test +docker compose down && docker compose up -d +``` + +3. Clear build cache + +```sh +# Under rushstack/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo +rm -rf common/temp/build-cache +``` + +4. Open command palette (Ctrl+Shift+P or Command+Shift+P) and select `Tasks: Run Task` and select `cobuild`. + +> In this step, two dedicated terminal windows will open. Running `rush cobuild` command under sandbox repo respectively. + +Expected behavior: Cobuild feature is enabled, cobuild related logs out in both terminals. + +#### Case 4: Cobuild enabled, run two cobuild commands in parallel, one of them failed + +> Note: This test requires Visual Studio Code to be installed. + +1. Open predefined `.vscode/redis-cobuild.code-workspace` in Visual Studio Code. + +2. Making the cobuild command of project "A" fails + +**sandbox/repo/projects/a/package.json** + +```diff + "scripts": { +- "_phase:build": "node ../build.js a", ++ "_phase:build": "exit 1", + } +``` + +3. Clear redis server + +```sh +# Under rushstack/build-tests/rush-redis-cobuild-plugin-integration-test +docker compose down && docker compose up -d +``` + +4. Clear build cache + +```sh +# Under rushstack/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo +rm -rf common/temp/build-cache +``` + +5. Open command palette (Ctrl+Shift+P or Command+Shift+P) and select `Tasks: Run Task` and select `cobuild`. + +Expected behavior: Cobuild feature is enabled, cobuild related logs out in both terminals. These two cobuild commands fail because of the failing build of project "A". And, one of them restored the failing build cache created by the other one. diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/config/heft.json b/build-tests/rush-redis-cobuild-plugin-integration-test/config/heft.json new file mode 100644 index 00000000000..f290ba09665 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/config/heft.json @@ -0,0 +1,12 @@ +/** + * Defines configuration used by core Heft. + */ +{ + "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + + /** + * Optionally specifies another JSON config file that this file extends from. This provides a way for standard + * settings to be shared across multiple projects. + */ + "extends": "@rushstack/heft-node-rig/profiles/default/config/heft.json" +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/config/rush-project.json b/build-tests/rush-redis-cobuild-plugin-integration-test/config/rush-project.json new file mode 100644 index 00000000000..247dc17187a --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/config/rush-project.json @@ -0,0 +1,8 @@ +{ + "operationSettings": [ + { + "operationName": "build", + "outputFolderNames": ["lib", "dist"] + } + ] +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/docker-compose.yml b/build-tests/rush-redis-cobuild-plugin-integration-test/docker-compose.yml new file mode 100644 index 00000000000..2b9a3f3722b --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/docker-compose.yml @@ -0,0 +1,10 @@ +version: '3.7' + +services: + redis: + image: redis:6.2.10-alpine + command: redis-server --save "" --loglevel warning --requirepass redis123 + ports: + - '6379:6379' + volumes: + - ./redis-data:/data diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/package.json b/build-tests/rush-redis-cobuild-plugin-integration-test/package.json new file mode 100644 index 00000000000..68eb95a20df --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/package.json @@ -0,0 +1,25 @@ +{ + "name": "rush-redis-cobuild-plugin-integration-test", + "version": "1.0.0", + "private": true, + "description": "Tests connecting to an redis server", + "license": "MIT", + "scripts": { + "_phase:build": "heft build --clean", + "build": "heft build --clean", + "test-lock-provider": "node ./lib/testLockProvider.js" + }, + "devDependencies": { + "@microsoft/rush-lib": "workspace:*", + "@rushstack/eslint-config": "workspace:*", + "@rushstack/heft": "workspace:*", + "@rushstack/heft-node-rig": "workspace:*", + "@rushstack/node-core-library": "workspace:*", + "@rushstack/rush-redis-cobuild-plugin": "workspace:*", + "@types/http-proxy": "~1.17.8", + "@types/node": "14.18.36", + "eslint": "~8.7.0", + "http-proxy": "~1.18.1", + "typescript": "~5.0.4" + } +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/.gitignore b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/.gitignore new file mode 100644 index 00000000000..6200fef459b --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/.gitignore @@ -0,0 +1,7 @@ +# Rush temporary files +common/deploy/ +common/temp/ +common/autoinstallers/*/.npmrc +projects/*/dist/ +*.log +node_modules/ \ No newline at end of file diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush-plugins/rush-redis-cobuild-plugin.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush-plugins/rush-redis-cobuild-plugin.json new file mode 100644 index 00000000000..c27270adc35 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush-plugins/rush-redis-cobuild-plugin.json @@ -0,0 +1,4 @@ +{ + "url": "redis://localhost:6379", + "passwordEnvironmentVariable": "REDIS_PASS" +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/build-cache.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/build-cache.json new file mode 100644 index 00000000000..d09eaa6a04c --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/build-cache.json @@ -0,0 +1,92 @@ +/** + * This configuration file manages Rush's build cache feature. + * More documentation is available on the Rush website: https://rushjs.io + */ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/build-cache.schema.json", + + /** + * (Required) EXPERIMENTAL - Set this to true to enable the build cache feature. + * + * See https://rushjs.io/pages/maintainer/build_cache/ for details about this experimental feature. + */ + "buildCacheEnabled": true, + + /** + * (Required) Choose where project build outputs will be cached. + * + * Possible values: "local-only", "azure-blob-storage", "amazon-s3" + */ + "cacheProvider": "local-only", + + /** + * Setting this property overrides the cache entry ID. If this property is set, it must contain + * a [hash] token. + * + * Other available tokens: + * - [projectName] + * - [projectName:normalize] + * - [phaseName] + * - [phaseName:normalize] + * - [phaseName:trimPrefix] + */ + // "cacheEntryNamePattern": "[projectName:normalize]-[phaseName:normalize]-[hash]" + + /** + * Use this configuration with "cacheProvider"="azure-blob-storage" + */ + "azureBlobStorageConfiguration": { + /** + * (Required) The name of the the Azure storage account to use for build cache. + */ + // "storageAccountName": "example", + /** + * (Required) The name of the container in the Azure storage account to use for build cache. + */ + // "storageContainerName": "my-container", + /** + * The Azure environment the storage account exists in. Defaults to AzurePublicCloud. + * + * Possible values: "AzurePublicCloud", "AzureChina", "AzureGermany", "AzureGovernment" + */ + // "azureEnvironment": "AzurePublicCloud", + /** + * An optional prefix for cache item blob names. + */ + // "blobPrefix": "my-prefix", + /** + * If set to true, allow writing to the cache. Defaults to false. + */ + // "isCacheWriteAllowed": true + }, + + /** + * Use this configuration with "cacheProvider"="amazon-s3" + */ + "amazonS3Configuration": { + /** + * (Required unless s3Endpoint is specified) The name of the bucket to use for build cache. + * Example: "my-bucket" + */ + // "s3Bucket": "my-bucket", + /** + * (Required unless s3Bucket is specified) The Amazon S3 endpoint of the bucket to use for build cache. + * This should not include any path; use the s3Prefix to set the path. + * Examples: "my-bucket.s3.us-east-2.amazonaws.com" or "http://localhost:9000" + */ + // "s3Endpoint": "https://my-bucket.s3.us-east-2.amazonaws.com", + /** + * (Required) The Amazon S3 region of the bucket to use for build cache. + * Example: "us-east-1" + */ + // "s3Region": "us-east-1", + /** + * An optional prefix ("folder") for cache items. It should not start with "/". + */ + // "s3Prefix": "my-prefix", + /** + * If set to true, allow writing to the cache. Defaults to false. + */ + // "isCacheWriteAllowed": true + } +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/cobuild.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/cobuild.json new file mode 100644 index 00000000000..4626f2211d4 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/cobuild.json @@ -0,0 +1,22 @@ +/** + * This configuration file manages Rush's cobuild feature. + * More documentation is available on the Rush website: https://rushjs.io + */ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/cobuild.schema.json", + + /** + * (Required) EXPERIMENTAL - Set this to true to enable the cobuild feature. + * RUSH_COBUILD_CONTEXT_ID should always be specified as an environment variable with an non-empty string, + * otherwise the cobuild feature will be disabled. + */ + "cobuildFeatureEnabled": true, + + /** + * (Required) Choose where cobuild lock will be acquired. + * + * The lock provider is registered by the rush plugins. + * For example, @rushstack/rush-redis-cobuild-plugin registers the "redis" lock provider. + */ + "cobuildLockProvider": "redis" +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/command-line.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/command-line.json new file mode 100644 index 00000000000..c8c1ccc022d --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/command-line.json @@ -0,0 +1,336 @@ +/** + * This configuration file defines custom commands for the "rush" command-line. + * More documentation is available on the Rush website: https://rushjs.io + */ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/command-line.schema.json", + + /** + * Custom "commands" introduce new verbs for the command-line. To see the help for these + * example commands, try "rush --help", "rush my-bulk-command --help", or + * "rush my-global-command --help". + */ + "commands": [ + { + "commandKind": "phased", + "summary": "Concurrent version of rush build", + "name": "cobuild", + "safeForSimultaneousRushProcesses": true, + "enableParallelism": true, + "incremental": true, + "phases": ["_phase:pre-build", "_phase:build"] + } + + // { + // /** + // * (Required) Determines the type of custom command. + // * Rush's "bulk" commands are invoked separately for each project. Rush will look in + // * each project's package.json file for a "scripts" entry whose name matches the + // * command name. By default, the command will run for every project in the repo, + // * according to the dependency graph (similar to how "rush build" works). + // * The set of projects can be restricted e.g. using the "--to" or "--from" parameters. + // */ + // "commandKind": "bulk", + // + // /** + // * (Required) The name that will be typed as part of the command line. This is also the name + // * of the "scripts" hook in the project's package.json file. + // * The name should be comprised of lower case words separated by hyphens or colons. The name should include an + // * English verb (e.g. "deploy"). Use a hyphen to separate words (e.g. "upload-docs"). A group of related commands + // * can be prefixed with a colon (e.g. "docs:generate", "docs:deploy", "docs:serve", etc). + // * + // * Note that if the "rebuild" command is overridden here, it becomes separated from the "build" command + // * and will call the "rebuild" script instead of the "build" script. + // */ + // "name": "my-bulk-command", + // + // /** + // * (Required) A short summary of the custom command to be shown when printing command line + // * help, e.g. "rush --help". + // */ + // "summary": "Example bulk custom command", + // + // /** + // * A detailed description of the command to be shown when printing command line + // * help (e.g. "rush --help my-command"). + // * If omitted, the "summary" text will be shown instead. + // * + // * Whenever you introduce commands/parameters, taking a little time to write meaningful + // * documentation can make a big difference for the developer experience in your repo. + // */ + // "description": "This is an example custom command that runs separately for each project", + // + // /** + // * By default, Rush operations acquire a lock file which prevents multiple commands from executing simultaneously + // * in the same repo folder. (For example, it would be a mistake to run "rush install" and "rush build" at the + // * same time.) If your command makes sense to run concurrently with other operations, + // * set "safeForSimultaneousRushProcesses" to true to disable this protection. + // * + // * In particular, this is needed for custom scripts that invoke other Rush commands. + // */ + // "safeForSimultaneousRushProcesses": false, + // + // /** + // * (Required) If true, then this command is safe to be run in parallel, i.e. executed + // * simultaneously for multiple projects. Similar to "rush build", regardless of parallelism + // * projects will not start processing until their dependencies have completed processing. + // */ + // "enableParallelism": false, + // + // /** + // * Normally projects will be processed according to their dependency order: a given project will not start + // * processing the command until all of its dependencies have completed. This restriction doesn't apply for + // * certain operations, for example a "clean" task that deletes output files. In this case + // * you can set "ignoreDependencyOrder" to true to increase parallelism. + // */ + // "ignoreDependencyOrder": false, + // + // /** + // * Normally Rush requires that each project's package.json has a "scripts" entry matching + // * the custom command name. To disable this check, set "ignoreMissingScript" to true; + // * projects with a missing definition will be skipped. + // */ + // "ignoreMissingScript": false, + // + // /** + // * When invoking shell scripts, Rush uses a heuristic to distinguish errors from warnings: + // * - If the shell script returns a nonzero process exit code, Rush interprets this as "one or more errors". + // * Error output is displayed in red, and it prevents Rush from attempting to process any downstream projects. + // * - If the shell script returns a zero process exit code but writes something to its stderr stream, + // * Rush interprets this as "one or more warnings". Warning output is printed in yellow, but does NOT prevent + // * Rush from processing downstream projects. + // * + // * Thus, warnings do not interfere with local development, but they will cause a CI job to fail, because + // * the Rush process itself returns a nonzero exit code if there are any warnings or errors. This is by design. + // * In an active monorepo, we've found that if you allow any warnings in your main branch, it inadvertently + // * teaches developers to ignore warnings, which quickly leads to a situation where so many "expected" warnings + // * have accumulated that warnings no longer serve any useful purpose. + // * + // * Sometimes a poorly behaved task will write output to stderr even though its operation was successful. + // * In that case, it's strongly recommended to fix the task. However, as a workaround you can set + // * allowWarningsInSuccessfulBuild=true, which causes Rush to return a nonzero exit code for errors only. + // * + // * Note: The default value is false. In Rush 5.7.x and earlier, the default value was true. + // */ + // "allowWarningsInSuccessfulBuild": false, + // + // /** + // * If true then this command will be incremental like the built-in "build" command + // */ + // "incremental": false, + // + // /** + // * (EXPERIMENTAL) Normally Rush terminates after the command finishes. If this option is set to "true" Rush + // * will instead enter a loop where it watches the file system for changes to the selected projects. Whenever a + // * change is detected, the command will be invoked again for the changed project and any selected projects that + // * directly or indirectly depend on it. + // * + // * For details, refer to the website article "Using watch mode". + // */ + // "watchForChanges": false, + // + // /** + // * (EXPERIMENTAL) Disable cache for this action. This may be useful if this command affects state outside of + // * projects' own folders. + // */ + // "disableBuildCache": false + // }, + // + // { + // /** + // * (Required) Determines the type of custom command. + // * Rush's "global" commands are invoked once for the entire repo. + // */ + // "commandKind": "global", + // + // "name": "my-global-command", + // "summary": "Example global custom command", + // "description": "This is an example custom command that runs once for the entire repo", + // + // "safeForSimultaneousRushProcesses": false, + // + // /** + // * (Required) A script that will be invoked using the OS shell. The working directory will be + // * the folder that contains rush.json. If custom parameters are associated with this command, their + // * values will be appended to the end of this string. + // */ + // "shellCommand": "node common/scripts/my-global-command.js", + // + // /** + // * If your "shellCommand" script depends on NPM packages, the recommended best practice is + // * to make it into a regular Rush project that builds using your normal toolchain. In cases where + // * the command needs to work without first having to run "rush build", the recommended practice + // * is to publish the project to an NPM registry and use common/scripts/install-run.js to launch it. + // * + // * Autoinstallers offer another possibility: They are folders under "common/autoinstallers" with + // * a package.json file and shrinkwrap file. Rush will automatically invoke the package manager to + // * install these dependencies before an associated command is invoked. Autoinstallers have the + // * advantage that they work even in a branch where "rush install" is broken, which makes them a + // * good solution for Git hook scripts. But they have the disadvantages of not being buildable + // * projects, and of increasing the overall installation footprint for your monorepo. + // * + // * The "autoinstallerName" setting must not contain a path and must be a valid NPM package name. + // * For example, the name "my-task" would map to "common/autoinstallers/my-task/package.json", and + // * the "common/autoinstallers/my-task/node_modules/.bin" folder would be added to the shell PATH when + // * invoking the "shellCommand". + // */ + // // "autoinstallerName": "my-task" + // } + ], + + "phases": [ + { + /** + * The name of the phase. Note that this value must start with the \"_phase:\" prefix. + */ + "name": "_phase:build", + /** + * The dependencies of this phase. + */ + "dependencies": { + "upstream": ["_phase:build"], + "self": ["_phase:pre-build"] + } + }, + { + /** + * The name of the phase. Note that this value must start with the \"_phase:\" prefix. + */ + "name": "_phase:pre-build", + /** + * The dependencies of this phase. + */ + "dependencies": { + "upstream": ["_phase:build"] + }, + "missingScriptBehavior": "silent" + } + ], + + /** + * Custom "parameters" introduce new parameters for specified Rush command-line commands. + * For example, you might define a "--production" parameter for the "rush build" command. + */ + "parameters": [ + // { + // /** + // * (Required) Determines the type of custom parameter. + // * A "flag" is a custom command-line parameter whose presence acts as an on/off switch. + // */ + // "parameterKind": "flag", + // + // /** + // * (Required) The long name of the parameter. It must be lower-case and use dash delimiters. + // */ + // "longName": "--my-flag", + // + // /** + // * An optional alternative short name for the parameter. It must be a dash followed by a single + // * lower-case or upper-case letter, which is case-sensitive. + // * + // * NOTE: The Rush developers recommend that automation scripts should always use the long name + // * to improve readability. The short name is only intended as a convenience for humans. + // * The alphabet letters run out quickly, and are difficult to memorize, so *only* use + // * a short name if you expect the parameter to be needed very often in everyday operations. + // */ + // "shortName": "-m", + // + // /** + // * (Required) A long description to be shown in the command-line help. + // * + // * Whenever you introduce commands/parameters, taking a little time to write meaningful + // * documentation can make a big difference for the developer experience in your repo. + // */ + // "description": "A custom flag parameter that is passed to the scripts that are invoked when building projects", + // + // /** + // * (Required) A list of custom commands and/or built-in Rush commands that this parameter may + // * be used with. The parameter will be appended to the shell command that Rush invokes. + // */ + // "associatedCommands": ["build", "rebuild"] + // }, + // + // { + // /** + // * (Required) Determines the type of custom parameter. + // * A "string" is a custom command-line parameter whose value is a simple text string. + // */ + // "parameterKind": "string", + // "longName": "--my-string", + // "description": "A custom string parameter for the \"my-global-command\" custom command", + // + // "associatedCommands": ["my-global-command"], + // + // /** + // * The name of the argument, which will be shown in the command-line help. + // * + // * For example, if the parameter name is '--count" and the argument name is "NUMBER", + // * then the command-line help would display "--count NUMBER". The argument name must + // * be comprised of upper-case letters, numbers, and underscores. It should be kept short. + // */ + // "argumentName": "SOME_TEXT", + // + // /** + // * If true, this parameter must be included with the command. The default is false. + // */ + // "required": false + // }, + // + // { + // /** + // * (Required) Determines the type of custom parameter. + // * A "choice" is a custom command-line parameter whose argument must be chosen from a list of + // * allowable alternatives. + // */ + // "parameterKind": "choice", + // "longName": "--my-choice", + // "description": "A custom choice parameter for the \"my-global-command\" custom command", + // + // "associatedCommands": ["my-global-command"], + // + // /** + // * If true, this parameter must be included with the command. The default is false. + // */ + // "required": false, + // + // /** + // * Normally if a parameter is omitted from the command line, it will not be passed + // * to the shell command. this value will be inserted by default. Whereas if a "defaultValue" + // * is defined, the parameter will always be passed to the shell command, and will use the + // * default value if unspecified. The value must be one of the defined alternatives. + // */ + // "defaultValue": "vanilla", + // + // /** + // * (Required) A list of alternative argument values that can be chosen for this parameter. + // */ + // "alternatives": [ + // { + // /** + // * A token that is one of the alternatives that can be used with the choice parameter, + // * e.g. "vanilla" in "--flavor vanilla". + // */ + // "name": "vanilla", + // + // /** + // * A detailed description for the alternative that can be shown in the command-line help. + // * + // * Whenever you introduce commands/parameters, taking a little time to write meaningful + // * documentation can make a big difference for the developer experience in your repo. + // */ + // "description": "Use the vanilla flavor (the default)" + // }, + // + // { + // "name": "chocolate", + // "description": "Use the chocolate flavor" + // }, + // + // { + // "name": "strawberry", + // "description": "Use the strawberry flavor" + // } + // ] + // } + ] +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/experiments.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/experiments.json new file mode 100644 index 00000000000..fef826208c3 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/experiments.json @@ -0,0 +1,55 @@ +/** + * This configuration file allows repo maintainers to enable and disable experimental + * Rush features. More documentation is available on the Rush website: https://rushjs.io + */ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/experiments.schema.json", + + /** + * By default, 'rush install' passes --no-prefer-frozen-lockfile to 'pnpm install'. + * Set this option to true to pass '--frozen-lockfile' instead for faster installs. + */ + "usePnpmFrozenLockfileForRushInstall": true, + + /** + * By default, 'rush update' passes --no-prefer-frozen-lockfile to 'pnpm install'. + * Set this option to true to pass '--prefer-frozen-lockfile' instead to minimize shrinkwrap changes. + */ + "usePnpmPreferFrozenLockfileForRushUpdate": true, + + /** + * If using the 'preventManualShrinkwrapChanges' option, restricts the hash to only include the layout of external dependencies. + * Used to allow links between workspace projects or the addition/removal of references to existing dependency versions to not + * cause hash changes. + */ + "omitImportersFromPreventManualShrinkwrapChanges": true, + + /** + * If true, the chmod field in temporary project tar headers will not be normalized. + * This normalization can help ensure consistent tarball integrity across platforms. + */ + // "noChmodFieldInTarHeaderNormalization": true, + + /** + * If true, build caching will respect the allowWarningsInSuccessfulBuild flag and cache builds with warnings. + * This will not replay warnings from the cached build. + */ + // "buildCacheWithAllowWarningsInSuccessfulBuild": true, + + /** + * If true, the phased commands feature is enabled. To use this feature, create a "phased" command + * in common/config/rush/command-line.json. + */ + "phasedCommands": true + + /** + * If true, perform a clean install after when running `rush install` or `rush update` if the + * `.npmrc` file has changed since the last install. + */ + // "cleanInstallAfterNpmrcChanges": true, + + /** + * If true, print the outputs of shell commands defined in event hooks to the console. + */ + // "printEventHooksOutputToConsole": true +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/pnpm-lock.yaml b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/pnpm-lock.yaml new file mode 100644 index 00000000000..98b22e9d424 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/pnpm-lock.yaml @@ -0,0 +1,52 @@ +lockfileVersion: 5.4 + +importers: + + .: + specifiers: {} + + ../../projects/a: + specifiers: {} + + ../../projects/b: + specifiers: {} + + ../../projects/c: + specifiers: + b: workspace:* + dependencies: + b: link:../b + + ../../projects/d: + specifiers: + b: workspace:* + c: workspace:* + dependencies: + b: link:../b + c: link:../c + + ../../projects/e: + specifiers: + b: workspace:* + d: workspace:* + dependencies: + b: link:../b + d: link:../d + + ../../projects/f: + specifiers: + b: workspace:* + dependencies: + b: link:../b + + ../../projects/g: + specifiers: + b: workspace:* + dependencies: + b: link:../b + + ../../projects/h: + specifiers: + a: workspace:* + dependencies: + a: link:../a diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/repo-state.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/repo-state.json new file mode 100644 index 00000000000..0e7b144099d --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush/repo-state.json @@ -0,0 +1,4 @@ +// DO NOT MODIFY THIS FILE MANUALLY BUT DO COMMIT IT. It is generated and used by Rush. +{ + "preferredVersionsHash": "bf21a9e8fbc5a3846fb05b4fa0859e0917b2202f" +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/scripts/install-run-rush-pnpm.js b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/scripts/install-run-rush-pnpm.js new file mode 100644 index 00000000000..5c149955de6 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/scripts/install-run-rush-pnpm.js @@ -0,0 +1,28 @@ +// THIS FILE WAS GENERATED BY A TOOL. ANY MANUAL MODIFICATIONS WILL GET OVERWRITTEN WHENEVER RUSH IS UPGRADED. +// +// This script is intended for usage in an automated build environment where the Rush command may not have +// been preinstalled, or may have an unpredictable version. This script will automatically install the version of Rush +// specified in the rush.json configuration file (if not already installed), and then pass a command-line to the +// rush-pnpm command. +// +// An example usage would be: +// +// node common/scripts/install-run-rush-pnpm.js pnpm-command +// +// For more information, see: https://rushjs.io/pages/maintainer/setup_new_repo/ + +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +var __webpack_exports__ = {}; +/*!*****************************************************!*\ + !*** ./lib-esnext/scripts/install-run-rush-pnpm.js ***! + \*****************************************************/ + +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See the @microsoft/rush package's LICENSE file for license information. +require('./install-run-rush'); +//# sourceMappingURL=install-run-rush-pnpm.js.map +module.exports = __webpack_exports__; +/******/ })() +; +//# sourceMappingURL=install-run-rush-pnpm.js.map \ No newline at end of file diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/scripts/install-run-rush.js b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/scripts/install-run-rush.js new file mode 100644 index 00000000000..cada1eded21 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/scripts/install-run-rush.js @@ -0,0 +1,214 @@ +// THIS FILE WAS GENERATED BY A TOOL. ANY MANUAL MODIFICATIONS WILL GET OVERWRITTEN WHENEVER RUSH IS UPGRADED. +// +// This script is intended for usage in an automated build environment where the Rush command may not have +// been preinstalled, or may have an unpredictable version. This script will automatically install the version of Rush +// specified in the rush.json configuration file (if not already installed), and then pass a command-line to it. +// An example usage would be: +// +// node common/scripts/install-run-rush.js install +// +// For more information, see: https://rushjs.io/pages/maintainer/setup_new_repo/ + +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ 657147: +/*!*********************!*\ + !*** external "fs" ***! + \*********************/ +/***/ ((module) => { + +module.exports = require("fs"); + +/***/ }), + +/***/ 371017: +/*!***********************!*\ + !*** external "path" ***! + \***********************/ +/***/ ((module) => { + +module.exports = require("path"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +/*!************************************************!*\ + !*** ./lib-esnext/scripts/install-run-rush.js ***! + \************************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! path */ 371017); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fs */ 657147); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_1__); +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See the @microsoft/rush package's LICENSE file for license information. + + +const { installAndRun, findRushJsonFolder, RUSH_JSON_FILENAME, runWithErrorAndStatusCode } = require('./install-run'); +const PACKAGE_NAME = '@microsoft/rush'; +const RUSH_PREVIEW_VERSION = 'RUSH_PREVIEW_VERSION'; +const INSTALL_RUN_RUSH_LOCKFILE_PATH_VARIABLE = 'INSTALL_RUN_RUSH_LOCKFILE_PATH'; +function _getRushVersion(logger) { + const rushPreviewVersion = process.env[RUSH_PREVIEW_VERSION]; + if (rushPreviewVersion !== undefined) { + logger.info(`Using Rush version from environment variable ${RUSH_PREVIEW_VERSION}=${rushPreviewVersion}`); + return rushPreviewVersion; + } + const rushJsonFolder = findRushJsonFolder(); + const rushJsonPath = path__WEBPACK_IMPORTED_MODULE_0__.join(rushJsonFolder, RUSH_JSON_FILENAME); + try { + const rushJsonContents = fs__WEBPACK_IMPORTED_MODULE_1__.readFileSync(rushJsonPath, 'utf-8'); + // Use a regular expression to parse out the rushVersion value because rush.json supports comments, + // but JSON.parse does not and we don't want to pull in more dependencies than we need to in this script. + const rushJsonMatches = rushJsonContents.match(/\"rushVersion\"\s*\:\s*\"([0-9a-zA-Z.+\-]+)\"/); + return rushJsonMatches[1]; + } + catch (e) { + throw new Error(`Unable to determine the required version of Rush from rush.json (${rushJsonFolder}). ` + + "The 'rushVersion' field is either not assigned in rush.json or was specified " + + 'using an unexpected syntax.'); + } +} +function _getBin(scriptName) { + switch (scriptName.toLowerCase()) { + case 'install-run-rush-pnpm.js': + return 'rush-pnpm'; + case 'install-run-rushx.js': + return 'rushx'; + default: + return 'rush'; + } +} +function _run() { + const [nodePath /* Ex: /bin/node */, scriptPath /* /repo/common/scripts/install-run-rush.js */, ...packageBinArgs /* [build, --to, myproject] */] = process.argv; + // Detect if this script was directly invoked, or if the install-run-rushx script was invokved to select the + // appropriate binary inside the rush package to run + const scriptName = path__WEBPACK_IMPORTED_MODULE_0__.basename(scriptPath); + const bin = _getBin(scriptName); + if (!nodePath || !scriptPath) { + throw new Error('Unexpected exception: could not detect node path or script path'); + } + let commandFound = false; + let logger = { info: console.log, error: console.error }; + for (const arg of packageBinArgs) { + if (arg === '-q' || arg === '--quiet') { + // The -q/--quiet flag is supported by both `rush` and `rushx`, and will suppress + // any normal informational/diagnostic information printed during startup. + // + // To maintain the same user experience, the install-run* scripts pass along this + // flag but also use it to suppress any diagnostic information normally printed + // to stdout. + logger = { + info: () => { }, + error: console.error + }; + } + else if (!arg.startsWith('-') || arg === '-h' || arg === '--help') { + // We either found something that looks like a command (i.e. - doesn't start with a "-"), + // or we found the -h/--help flag, which can be run without a command + commandFound = true; + } + } + if (!commandFound) { + console.log(`Usage: ${scriptName} [args...]`); + if (scriptName === 'install-run-rush-pnpm.js') { + console.log(`Example: ${scriptName} pnpm-command`); + } + else if (scriptName === 'install-run-rush.js') { + console.log(`Example: ${scriptName} build --to myproject`); + } + else { + console.log(`Example: ${scriptName} custom-command`); + } + process.exit(1); + } + runWithErrorAndStatusCode(logger, () => { + const version = _getRushVersion(logger); + logger.info(`The rush.json configuration requests Rush version ${version}`); + const lockFilePath = process.env[INSTALL_RUN_RUSH_LOCKFILE_PATH_VARIABLE]; + if (lockFilePath) { + logger.info(`Found ${INSTALL_RUN_RUSH_LOCKFILE_PATH_VARIABLE}="${lockFilePath}", installing with lockfile.`); + } + return installAndRun(logger, PACKAGE_NAME, version, bin, packageBinArgs, lockFilePath); + }); +} +_run(); +//# sourceMappingURL=install-run-rush.js.map +})(); + +module.exports = __webpack_exports__; +/******/ })() +; +//# sourceMappingURL=install-run-rush.js.map \ No newline at end of file diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/scripts/install-run-rushx.js b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/scripts/install-run-rushx.js new file mode 100644 index 00000000000..b05df262bc2 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/scripts/install-run-rushx.js @@ -0,0 +1,28 @@ +// THIS FILE WAS GENERATED BY A TOOL. ANY MANUAL MODIFICATIONS WILL GET OVERWRITTEN WHENEVER RUSH IS UPGRADED. +// +// This script is intended for usage in an automated build environment where the Rush command may not have +// been preinstalled, or may have an unpredictable version. This script will automatically install the version of Rush +// specified in the rush.json configuration file (if not already installed), and then pass a command-line to the +// rushx command. +// +// An example usage would be: +// +// node common/scripts/install-run-rushx.js custom-command +// +// For more information, see: https://rushjs.io/pages/maintainer/setup_new_repo/ + +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +var __webpack_exports__ = {}; +/*!*************************************************!*\ + !*** ./lib-esnext/scripts/install-run-rushx.js ***! + \*************************************************/ + +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See the @microsoft/rush package's LICENSE file for license information. +require('./install-run-rush'); +//# sourceMappingURL=install-run-rushx.js.map +module.exports = __webpack_exports__; +/******/ })() +; +//# sourceMappingURL=install-run-rushx.js.map \ No newline at end of file diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/scripts/install-run.js b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/scripts/install-run.js new file mode 100644 index 00000000000..c04c587be19 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/scripts/install-run.js @@ -0,0 +1,678 @@ +// THIS FILE WAS GENERATED BY A TOOL. ANY MANUAL MODIFICATIONS WILL GET OVERWRITTEN WHENEVER RUSH IS UPGRADED. +// +// This script is intended for usage in an automated build environment where a Node tool may not have +// been preinstalled, or may have an unpredictable version. This script will automatically install the specified +// version of the specified tool (if not already installed), and then pass a command-line to it. +// An example usage would be: +// +// node common/scripts/install-run.js qrcode@1.2.2 qrcode https://rushjs.io +// +// For more information, see: https://rushjs.io/pages/maintainer/setup_new_repo/ + +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ 679877: +/*!************************************************!*\ + !*** ./lib-esnext/utilities/npmrcUtilities.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "syncNpmrc": () => (/* binding */ syncNpmrc) +/* harmony export */ }); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fs */ 657147); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! path */ 371017); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__); +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. +// IMPORTANT - do not use any non-built-in libraries in this file + + +/** + * As a workaround, copyAndTrimNpmrcFile() copies the .npmrc file to the target folder, and also trims + * unusable lines from the .npmrc file. + * + * Why are we trimming the .npmrc lines? NPM allows environment variables to be specified in + * the .npmrc file to provide different authentication tokens for different registry. + * However, if the environment variable is undefined, it expands to an empty string, which + * produces a valid-looking mapping with an invalid URL that causes an error. Instead, + * we'd prefer to skip that line and continue looking in other places such as the user's + * home directory. + * + * @returns + * The text of the the .npmrc. + */ +function _copyAndTrimNpmrcFile(logger, sourceNpmrcPath, targetNpmrcPath) { + logger.info(`Transforming ${sourceNpmrcPath}`); // Verbose + logger.info(` --> "${targetNpmrcPath}"`); + let npmrcFileLines = fs__WEBPACK_IMPORTED_MODULE_0__.readFileSync(sourceNpmrcPath).toString().split('\n'); + npmrcFileLines = npmrcFileLines.map((line) => (line || '').trim()); + const resultLines = []; + // This finds environment variable tokens that look like "${VAR_NAME}" + const expansionRegExp = /\$\{([^\}]+)\}/g; + // Comment lines start with "#" or ";" + const commentRegExp = /^\s*[#;]/; + // Trim out lines that reference environment variables that aren't defined + for (const line of npmrcFileLines) { + let lineShouldBeTrimmed = false; + // Ignore comment lines + if (!commentRegExp.test(line)) { + const environmentVariables = line.match(expansionRegExp); + if (environmentVariables) { + for (const token of environmentVariables) { + // Remove the leading "${" and the trailing "}" from the token + const environmentVariableName = token.substring(2, token.length - 1); + // Is the environment variable defined? + if (!process.env[environmentVariableName]) { + // No, so trim this line + lineShouldBeTrimmed = true; + break; + } + } + } + } + if (lineShouldBeTrimmed) { + // Example output: + // "; MISSING ENVIRONMENT VARIABLE: //my-registry.com/npm/:_authToken=${MY_AUTH_TOKEN}" + resultLines.push('; MISSING ENVIRONMENT VARIABLE: ' + line); + } + else { + resultLines.push(line); + } + } + const combinedNpmrc = resultLines.join('\n'); + fs__WEBPACK_IMPORTED_MODULE_0__.writeFileSync(targetNpmrcPath, combinedNpmrc); + return combinedNpmrc; +} +/** + * syncNpmrc() copies the .npmrc file to the target folder, and also trims unusable lines from the .npmrc file. + * If the source .npmrc file not exist, then syncNpmrc() will delete an .npmrc that is found in the target folder. + * + * IMPORTANT: THIS CODE SHOULD BE KEPT UP TO DATE WITH Utilities._syncNpmrc() + * + * @returns + * The text of the the synced .npmrc, if one exists. If one does not exist, then undefined is returned. + */ +function syncNpmrc(sourceNpmrcFolder, targetNpmrcFolder, useNpmrcPublish, logger = { + info: console.log, + error: console.error +}) { + const sourceNpmrcPath = path__WEBPACK_IMPORTED_MODULE_1__.join(sourceNpmrcFolder, !useNpmrcPublish ? '.npmrc' : '.npmrc-publish'); + const targetNpmrcPath = path__WEBPACK_IMPORTED_MODULE_1__.join(targetNpmrcFolder, '.npmrc'); + try { + if (fs__WEBPACK_IMPORTED_MODULE_0__.existsSync(sourceNpmrcPath)) { + return _copyAndTrimNpmrcFile(logger, sourceNpmrcPath, targetNpmrcPath); + } + else if (fs__WEBPACK_IMPORTED_MODULE_0__.existsSync(targetNpmrcPath)) { + // If the source .npmrc doesn't exist and there is one in the target, delete the one in the target + logger.info(`Deleting ${targetNpmrcPath}`); // Verbose + fs__WEBPACK_IMPORTED_MODULE_0__.unlinkSync(targetNpmrcPath); + } + } + catch (e) { + throw new Error(`Error syncing .npmrc file: ${e}`); + } +} +//# sourceMappingURL=npmrcUtilities.js.map + +/***/ }), + +/***/ 532081: +/*!********************************!*\ + !*** external "child_process" ***! + \********************************/ +/***/ ((module) => { + +module.exports = require("child_process"); + +/***/ }), + +/***/ 657147: +/*!*********************!*\ + !*** external "fs" ***! + \*********************/ +/***/ ((module) => { + +module.exports = require("fs"); + +/***/ }), + +/***/ 822037: +/*!*********************!*\ + !*** external "os" ***! + \*********************/ +/***/ ((module) => { + +module.exports = require("os"); + +/***/ }), + +/***/ 371017: +/*!***********************!*\ + !*** external "path" ***! + \***********************/ +/***/ ((module) => { + +module.exports = require("path"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +/*!*******************************************!*\ + !*** ./lib-esnext/scripts/install-run.js ***! + \*******************************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RUSH_JSON_FILENAME": () => (/* binding */ RUSH_JSON_FILENAME), +/* harmony export */ "findRushJsonFolder": () => (/* binding */ findRushJsonFolder), +/* harmony export */ "getNpmPath": () => (/* binding */ getNpmPath), +/* harmony export */ "installAndRun": () => (/* binding */ installAndRun), +/* harmony export */ "runWithErrorAndStatusCode": () => (/* binding */ runWithErrorAndStatusCode) +/* harmony export */ }); +/* harmony import */ var child_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! child_process */ 532081); +/* harmony import */ var child_process__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(child_process__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fs */ 657147); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var os__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! os */ 822037); +/* harmony import */ var os__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(os__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! path */ 371017); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _utilities_npmrcUtilities__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utilities/npmrcUtilities */ 679877); +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See the @microsoft/rush package's LICENSE file for license information. + + + + + +const RUSH_JSON_FILENAME = 'rush.json'; +const RUSH_TEMP_FOLDER_ENV_VARIABLE_NAME = 'RUSH_TEMP_FOLDER'; +const INSTALL_RUN_LOCKFILE_PATH_VARIABLE = 'INSTALL_RUN_LOCKFILE_PATH'; +const INSTALLED_FLAG_FILENAME = 'installed.flag'; +const NODE_MODULES_FOLDER_NAME = 'node_modules'; +const PACKAGE_JSON_FILENAME = 'package.json'; +/** + * Parse a package specifier (in the form of name\@version) into name and version parts. + */ +function _parsePackageSpecifier(rawPackageSpecifier) { + rawPackageSpecifier = (rawPackageSpecifier || '').trim(); + const separatorIndex = rawPackageSpecifier.lastIndexOf('@'); + let name; + let version = undefined; + if (separatorIndex === 0) { + // The specifier starts with a scope and doesn't have a version specified + name = rawPackageSpecifier; + } + else if (separatorIndex === -1) { + // The specifier doesn't have a version + name = rawPackageSpecifier; + } + else { + name = rawPackageSpecifier.substring(0, separatorIndex); + version = rawPackageSpecifier.substring(separatorIndex + 1); + } + if (!name) { + throw new Error(`Invalid package specifier: ${rawPackageSpecifier}`); + } + return { name, version }; +} +let _npmPath = undefined; +/** + * Get the absolute path to the npm executable + */ +function getNpmPath() { + if (!_npmPath) { + try { + if (os__WEBPACK_IMPORTED_MODULE_2__.platform() === 'win32') { + // We're on Windows + const whereOutput = child_process__WEBPACK_IMPORTED_MODULE_0__.execSync('where npm', { stdio: [] }).toString(); + const lines = whereOutput.split(os__WEBPACK_IMPORTED_MODULE_2__.EOL).filter((line) => !!line); + // take the last result, we are looking for a .cmd command + // see https://github.com/microsoft/rushstack/issues/759 + _npmPath = lines[lines.length - 1]; + } + else { + // We aren't on Windows - assume we're on *NIX or Darwin + _npmPath = child_process__WEBPACK_IMPORTED_MODULE_0__.execSync('command -v npm', { stdio: [] }).toString(); + } + } + catch (e) { + throw new Error(`Unable to determine the path to the NPM tool: ${e}`); + } + _npmPath = _npmPath.trim(); + if (!fs__WEBPACK_IMPORTED_MODULE_1__.existsSync(_npmPath)) { + throw new Error('The NPM executable does not exist'); + } + } + return _npmPath; +} +function _ensureFolder(folderPath) { + if (!fs__WEBPACK_IMPORTED_MODULE_1__.existsSync(folderPath)) { + const parentDir = path__WEBPACK_IMPORTED_MODULE_3__.dirname(folderPath); + _ensureFolder(parentDir); + fs__WEBPACK_IMPORTED_MODULE_1__.mkdirSync(folderPath); + } +} +/** + * Create missing directories under the specified base directory, and return the resolved directory. + * + * Does not support "." or ".." path segments. + * Assumes the baseFolder exists. + */ +function _ensureAndJoinPath(baseFolder, ...pathSegments) { + let joinedPath = baseFolder; + try { + for (let pathSegment of pathSegments) { + pathSegment = pathSegment.replace(/[\\\/]/g, '+'); + joinedPath = path__WEBPACK_IMPORTED_MODULE_3__.join(joinedPath, pathSegment); + if (!fs__WEBPACK_IMPORTED_MODULE_1__.existsSync(joinedPath)) { + fs__WEBPACK_IMPORTED_MODULE_1__.mkdirSync(joinedPath); + } + } + } + catch (e) { + throw new Error(`Error building local installation folder (${path__WEBPACK_IMPORTED_MODULE_3__.join(baseFolder, ...pathSegments)}): ${e}`); + } + return joinedPath; +} +function _getRushTempFolder(rushCommonFolder) { + const rushTempFolder = process.env[RUSH_TEMP_FOLDER_ENV_VARIABLE_NAME]; + if (rushTempFolder !== undefined) { + _ensureFolder(rushTempFolder); + return rushTempFolder; + } + else { + return _ensureAndJoinPath(rushCommonFolder, 'temp'); + } +} +/** + * Compare version strings according to semantic versioning. + * Returns a positive integer if "a" is a later version than "b", + * a negative integer if "b" is later than "a", + * and 0 otherwise. + */ +function _compareVersionStrings(a, b) { + const aParts = a.split(/[.-]/); + const bParts = b.split(/[.-]/); + const numberOfParts = Math.max(aParts.length, bParts.length); + for (let i = 0; i < numberOfParts; i++) { + if (aParts[i] !== bParts[i]) { + return (Number(aParts[i]) || 0) - (Number(bParts[i]) || 0); + } + } + return 0; +} +/** + * Resolve a package specifier to a static version + */ +function _resolvePackageVersion(logger, rushCommonFolder, { name, version }) { + if (!version) { + version = '*'; // If no version is specified, use the latest version + } + if (version.match(/^[a-zA-Z0-9\-\+\.]+$/)) { + // If the version contains only characters that we recognize to be used in static version specifiers, + // pass the version through + return version; + } + else { + // version resolves to + try { + const rushTempFolder = _getRushTempFolder(rushCommonFolder); + const sourceNpmrcFolder = path__WEBPACK_IMPORTED_MODULE_3__.join(rushCommonFolder, 'config', 'rush'); + (0,_utilities_npmrcUtilities__WEBPACK_IMPORTED_MODULE_4__.syncNpmrc)(sourceNpmrcFolder, rushTempFolder, undefined, logger); + const npmPath = getNpmPath(); + // This returns something that looks like: + // ``` + // [ + // "3.0.0", + // "3.0.1", + // ... + // "3.0.20" + // ] + // ``` + // + // if multiple versions match the selector, or + // + // ``` + // "3.0.0" + // ``` + // + // if only a single version matches. + const npmVersionSpawnResult = child_process__WEBPACK_IMPORTED_MODULE_0__.spawnSync(npmPath, ['view', `${name}@${version}`, 'version', '--no-update-notifier', '--json'], { + cwd: rushTempFolder, + stdio: [] + }); + if (npmVersionSpawnResult.status !== 0) { + throw new Error(`"npm view" returned error code ${npmVersionSpawnResult.status}`); + } + const npmViewVersionOutput = npmVersionSpawnResult.stdout.toString(); + const parsedVersionOutput = JSON.parse(npmViewVersionOutput); + const versions = Array.isArray(parsedVersionOutput) + ? parsedVersionOutput + : [parsedVersionOutput]; + let latestVersion = versions[0]; + for (let i = 1; i < versions.length; i++) { + const version = versions[i]; + if (_compareVersionStrings(version, latestVersion) > 0) { + latestVersion = version; + } + } + if (!latestVersion) { + throw new Error('No versions found for the specified version range.'); + } + return latestVersion; + } + catch (e) { + throw new Error(`Unable to resolve version ${version} of package ${name}: ${e}`); + } + } +} +let _rushJsonFolder; +/** + * Find the absolute path to the folder containing rush.json + */ +function findRushJsonFolder() { + if (!_rushJsonFolder) { + let basePath = __dirname; + let tempPath = __dirname; + do { + const testRushJsonPath = path__WEBPACK_IMPORTED_MODULE_3__.join(basePath, RUSH_JSON_FILENAME); + if (fs__WEBPACK_IMPORTED_MODULE_1__.existsSync(testRushJsonPath)) { + _rushJsonFolder = basePath; + break; + } + else { + basePath = tempPath; + } + } while (basePath !== (tempPath = path__WEBPACK_IMPORTED_MODULE_3__.dirname(basePath))); // Exit the loop when we hit the disk root + if (!_rushJsonFolder) { + throw new Error('Unable to find rush.json.'); + } + } + return _rushJsonFolder; +} +/** + * Detects if the package in the specified directory is installed + */ +function _isPackageAlreadyInstalled(packageInstallFolder) { + try { + const flagFilePath = path__WEBPACK_IMPORTED_MODULE_3__.join(packageInstallFolder, INSTALLED_FLAG_FILENAME); + if (!fs__WEBPACK_IMPORTED_MODULE_1__.existsSync(flagFilePath)) { + return false; + } + const fileContents = fs__WEBPACK_IMPORTED_MODULE_1__.readFileSync(flagFilePath).toString(); + return fileContents.trim() === process.version; + } + catch (e) { + return false; + } +} +/** + * Delete a file. Fail silently if it does not exist. + */ +function _deleteFile(file) { + try { + fs__WEBPACK_IMPORTED_MODULE_1__.unlinkSync(file); + } + catch (err) { + if (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') { + throw err; + } + } +} +/** + * Removes the following files and directories under the specified folder path: + * - installed.flag + * - + * - node_modules + */ +function _cleanInstallFolder(rushTempFolder, packageInstallFolder, lockFilePath) { + try { + const flagFile = path__WEBPACK_IMPORTED_MODULE_3__.resolve(packageInstallFolder, INSTALLED_FLAG_FILENAME); + _deleteFile(flagFile); + const packageLockFile = path__WEBPACK_IMPORTED_MODULE_3__.resolve(packageInstallFolder, 'package-lock.json'); + if (lockFilePath) { + fs__WEBPACK_IMPORTED_MODULE_1__.copyFileSync(lockFilePath, packageLockFile); + } + else { + // Not running `npm ci`, so need to cleanup + _deleteFile(packageLockFile); + const nodeModulesFolder = path__WEBPACK_IMPORTED_MODULE_3__.resolve(packageInstallFolder, NODE_MODULES_FOLDER_NAME); + if (fs__WEBPACK_IMPORTED_MODULE_1__.existsSync(nodeModulesFolder)) { + const rushRecyclerFolder = _ensureAndJoinPath(rushTempFolder, 'rush-recycler'); + fs__WEBPACK_IMPORTED_MODULE_1__.renameSync(nodeModulesFolder, path__WEBPACK_IMPORTED_MODULE_3__.join(rushRecyclerFolder, `install-run-${Date.now().toString()}`)); + } + } + } + catch (e) { + throw new Error(`Error cleaning the package install folder (${packageInstallFolder}): ${e}`); + } +} +function _createPackageJson(packageInstallFolder, name, version) { + try { + const packageJsonContents = { + name: 'ci-rush', + version: '0.0.0', + dependencies: { + [name]: version + }, + description: "DON'T WARN", + repository: "DON'T WARN", + license: 'MIT' + }; + const packageJsonPath = path__WEBPACK_IMPORTED_MODULE_3__.join(packageInstallFolder, PACKAGE_JSON_FILENAME); + fs__WEBPACK_IMPORTED_MODULE_1__.writeFileSync(packageJsonPath, JSON.stringify(packageJsonContents, undefined, 2)); + } + catch (e) { + throw new Error(`Unable to create package.json: ${e}`); + } +} +/** + * Run "npm install" in the package install folder. + */ +function _installPackage(logger, packageInstallFolder, name, version, command) { + try { + logger.info(`Installing ${name}...`); + const npmPath = getNpmPath(); + const result = child_process__WEBPACK_IMPORTED_MODULE_0__.spawnSync(npmPath, [command], { + stdio: 'inherit', + cwd: packageInstallFolder, + env: process.env + }); + if (result.status !== 0) { + throw new Error(`"npm ${command}" encountered an error`); + } + logger.info(`Successfully installed ${name}@${version}`); + } + catch (e) { + throw new Error(`Unable to install package: ${e}`); + } +} +/** + * Get the ".bin" path for the package. + */ +function _getBinPath(packageInstallFolder, binName) { + const binFolderPath = path__WEBPACK_IMPORTED_MODULE_3__.resolve(packageInstallFolder, NODE_MODULES_FOLDER_NAME, '.bin'); + const resolvedBinName = os__WEBPACK_IMPORTED_MODULE_2__.platform() === 'win32' ? `${binName}.cmd` : binName; + return path__WEBPACK_IMPORTED_MODULE_3__.resolve(binFolderPath, resolvedBinName); +} +/** + * Write a flag file to the package's install directory, signifying that the install was successful. + */ +function _writeFlagFile(packageInstallFolder) { + try { + const flagFilePath = path__WEBPACK_IMPORTED_MODULE_3__.join(packageInstallFolder, INSTALLED_FLAG_FILENAME); + fs__WEBPACK_IMPORTED_MODULE_1__.writeFileSync(flagFilePath, process.version); + } + catch (e) { + throw new Error(`Unable to create installed.flag file in ${packageInstallFolder}`); + } +} +function installAndRun(logger, packageName, packageVersion, packageBinName, packageBinArgs, lockFilePath = process.env[INSTALL_RUN_LOCKFILE_PATH_VARIABLE]) { + const rushJsonFolder = findRushJsonFolder(); + const rushCommonFolder = path__WEBPACK_IMPORTED_MODULE_3__.join(rushJsonFolder, 'common'); + const rushTempFolder = _getRushTempFolder(rushCommonFolder); + const packageInstallFolder = _ensureAndJoinPath(rushTempFolder, 'install-run', `${packageName}@${packageVersion}`); + if (!_isPackageAlreadyInstalled(packageInstallFolder)) { + // The package isn't already installed + _cleanInstallFolder(rushTempFolder, packageInstallFolder, lockFilePath); + const sourceNpmrcFolder = path__WEBPACK_IMPORTED_MODULE_3__.join(rushCommonFolder, 'config', 'rush'); + (0,_utilities_npmrcUtilities__WEBPACK_IMPORTED_MODULE_4__.syncNpmrc)(sourceNpmrcFolder, packageInstallFolder, undefined, logger); + _createPackageJson(packageInstallFolder, packageName, packageVersion); + const command = lockFilePath ? 'ci' : 'install'; + _installPackage(logger, packageInstallFolder, packageName, packageVersion, command); + _writeFlagFile(packageInstallFolder); + } + const statusMessage = `Invoking "${packageBinName} ${packageBinArgs.join(' ')}"`; + const statusMessageLine = new Array(statusMessage.length + 1).join('-'); + logger.info('\n' + statusMessage + '\n' + statusMessageLine + '\n'); + const binPath = _getBinPath(packageInstallFolder, packageBinName); + const binFolderPath = path__WEBPACK_IMPORTED_MODULE_3__.resolve(packageInstallFolder, NODE_MODULES_FOLDER_NAME, '.bin'); + // Windows environment variables are case-insensitive. Instead of using SpawnSyncOptions.env, we need to + // assign via the process.env proxy to ensure that we append to the right PATH key. + const originalEnvPath = process.env.PATH || ''; + let result; + try { + // Node.js on Windows can not spawn a file when the path has a space on it + // unless the path gets wrapped in a cmd friendly way and shell mode is used + const shouldUseShell = binPath.includes(' ') && os__WEBPACK_IMPORTED_MODULE_2__.platform() === 'win32'; + const platformBinPath = shouldUseShell ? `"${binPath}"` : binPath; + process.env.PATH = [binFolderPath, originalEnvPath].join(path__WEBPACK_IMPORTED_MODULE_3__.delimiter); + result = child_process__WEBPACK_IMPORTED_MODULE_0__.spawnSync(platformBinPath, packageBinArgs, { + stdio: 'inherit', + windowsVerbatimArguments: false, + shell: shouldUseShell, + cwd: process.cwd(), + env: process.env + }); + } + finally { + process.env.PATH = originalEnvPath; + } + if (result.status !== null) { + return result.status; + } + else { + throw result.error || new Error('An unknown error occurred.'); + } +} +function runWithErrorAndStatusCode(logger, fn) { + process.exitCode = 1; + try { + const exitCode = fn(); + process.exitCode = exitCode; + } + catch (e) { + logger.error('\n\n' + e.toString() + '\n\n'); + } +} +function _run() { + const [nodePath /* Ex: /bin/node */, scriptPath /* /repo/common/scripts/install-run-rush.js */, rawPackageSpecifier /* qrcode@^1.2.0 */, packageBinName /* qrcode */, ...packageBinArgs /* [-f, myproject/lib] */] = process.argv; + if (!nodePath) { + throw new Error('Unexpected exception: could not detect node path'); + } + if (path__WEBPACK_IMPORTED_MODULE_3__.basename(scriptPath).toLowerCase() !== 'install-run.js') { + // If install-run.js wasn't directly invoked, don't execute the rest of this function. Return control + // to the script that (presumably) imported this file + return; + } + if (process.argv.length < 4) { + console.log('Usage: install-run.js @ [args...]'); + console.log('Example: install-run.js qrcode@1.2.2 qrcode https://rushjs.io'); + process.exit(1); + } + const logger = { info: console.log, error: console.error }; + runWithErrorAndStatusCode(logger, () => { + const rushJsonFolder = findRushJsonFolder(); + const rushCommonFolder = _ensureAndJoinPath(rushJsonFolder, 'common'); + const packageSpecifier = _parsePackageSpecifier(rawPackageSpecifier); + const name = packageSpecifier.name; + const version = _resolvePackageVersion(logger, rushCommonFolder, packageSpecifier); + if (packageSpecifier.version !== version) { + console.log(`Resolved to ${name}@${version}`); + } + return installAndRun(logger, name, version, packageBinName, packageBinArgs); + }); +} +_run(); +//# sourceMappingURL=install-run.js.map +})(); + +module.exports = __webpack_exports__; +/******/ })() +; +//# sourceMappingURL=install-run.js.map \ No newline at end of file diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/a/config/rush-project.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/a/config/rush-project.json new file mode 100644 index 00000000000..3206537349d --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/a/config/rush-project.json @@ -0,0 +1,16 @@ +{ + "operationSettings": [ + { + "operationName": "_phase:build", + "outputFolderNames": ["dist"] + }, + { + "operationName": "cobuild", + "outputFolderNames": ["dist"] + }, + { + "operationName": "build", + "outputFolderNames": ["dist"] + } + ] +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/a/package.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/a/package.json new file mode 100644 index 00000000000..98957112d5e --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/a/package.json @@ -0,0 +1,10 @@ +{ + "name": "a", + "version": "1.0.0", + "scripts": { + "cobuild": "node ../build.js a", + "build": "node ../build.js a", + "__phase:build": "exit 1", + "_phase:build": "node ../build.js a" + } +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/b/config/rush-project.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/b/config/rush-project.json new file mode 100644 index 00000000000..3206537349d --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/b/config/rush-project.json @@ -0,0 +1,16 @@ +{ + "operationSettings": [ + { + "operationName": "_phase:build", + "outputFolderNames": ["dist"] + }, + { + "operationName": "cobuild", + "outputFolderNames": ["dist"] + }, + { + "operationName": "build", + "outputFolderNames": ["dist"] + } + ] +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/b/package.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/b/package.json new file mode 100644 index 00000000000..8b17917b744 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/b/package.json @@ -0,0 +1,9 @@ +{ + "name": "b", + "version": "1.0.0", + "scripts": { + "cobuild": "node ../build.js", + "build": "node ../build.js", + "_phase:build": "node ../build.js b" + } +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/build.js b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/build.js new file mode 100644 index 00000000000..15441feef29 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/build.js @@ -0,0 +1,14 @@ +/* eslint-env es6 */ +const path = require('path'); +const { FileSystem } = require('@rushstack/node-core-library'); + +const args = process.argv.slice(2); + +console.log('start', args.join(' ')); +setTimeout(() => { + const outputFolder = path.resolve(process.cwd(), 'dist'); + const outputFile = path.resolve(outputFolder, 'output.txt'); + FileSystem.ensureFolder(outputFolder); + FileSystem.writeFile(outputFile, `Hello world! ${args.join(' ')}`); + console.log('done'); +}, 2000); diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/c/config/rush-project.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/c/config/rush-project.json new file mode 100644 index 00000000000..3206537349d --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/c/config/rush-project.json @@ -0,0 +1,16 @@ +{ + "operationSettings": [ + { + "operationName": "_phase:build", + "outputFolderNames": ["dist"] + }, + { + "operationName": "cobuild", + "outputFolderNames": ["dist"] + }, + { + "operationName": "build", + "outputFolderNames": ["dist"] + } + ] +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/c/package.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/c/package.json new file mode 100644 index 00000000000..738c1444ab0 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/c/package.json @@ -0,0 +1,12 @@ +{ + "name": "c", + "version": "1.0.0", + "scripts": { + "cobuild": "node ../build.js", + "build": "node ../build.js", + "_phase:build": "node ../build.js" + }, + "dependencies": { + "b": "workspace:*" + } +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/d/config/rush-project.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/d/config/rush-project.json new file mode 100644 index 00000000000..3206537349d --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/d/config/rush-project.json @@ -0,0 +1,16 @@ +{ + "operationSettings": [ + { + "operationName": "_phase:build", + "outputFolderNames": ["dist"] + }, + { + "operationName": "cobuild", + "outputFolderNames": ["dist"] + }, + { + "operationName": "build", + "outputFolderNames": ["dist"] + } + ] +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/d/package.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/d/package.json new file mode 100644 index 00000000000..67707275a1e --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/d/package.json @@ -0,0 +1,13 @@ +{ + "name": "d", + "version": "1.0.0", + "scripts": { + "cobuild": "node ../build.js", + "build": "node ../build.js", + "_phase:build": "node ../build.js" + }, + "dependencies": { + "b": "workspace:*", + "c": "workspace:*" + } +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/e/config/rush-project.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/e/config/rush-project.json new file mode 100644 index 00000000000..3206537349d --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/e/config/rush-project.json @@ -0,0 +1,16 @@ +{ + "operationSettings": [ + { + "operationName": "_phase:build", + "outputFolderNames": ["dist"] + }, + { + "operationName": "cobuild", + "outputFolderNames": ["dist"] + }, + { + "operationName": "build", + "outputFolderNames": ["dist"] + } + ] +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/e/package.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/e/package.json new file mode 100644 index 00000000000..0b91c05a805 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/e/package.json @@ -0,0 +1,13 @@ +{ + "name": "e", + "version": "1.0.0", + "scripts": { + "cobuild": "node ../build.js", + "build": "node ../build.js", + "_phase:build": "node ../build.js" + }, + "dependencies": { + "b": "workspace:*", + "d": "workspace:*" + } +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/f/config/rush-project.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/f/config/rush-project.json new file mode 100644 index 00000000000..4e94028e909 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/f/config/rush-project.json @@ -0,0 +1,17 @@ +{ + "disableBuildCacheForProject": true, + "operationSettings": [ + { + "operationName": "_phase:build", + "outputFolderNames": ["dist"] + }, + { + "operationName": "cobuild", + "outputFolderNames": ["dist"] + }, + { + "operationName": "build", + "outputFolderNames": ["dist"] + } + ] +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/f/package.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/f/package.json new file mode 100644 index 00000000000..7bf2634a508 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/f/package.json @@ -0,0 +1,13 @@ +{ + "name": "f", + "version": "1.0.0", + "scripts": { + "cobuild": "node ../build.js", + "build": "node ../build.js", + "_phase:pre-build": "node ../pre-build.js", + "_phase:build": "node ../validate-pre-build.js && node ../build.js f" + }, + "dependencies": { + "b": "workspace:*" + } +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/g/package.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/g/package.json new file mode 100644 index 00000000000..29cd2f39532 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/g/package.json @@ -0,0 +1,13 @@ +{ + "name": "g", + "version": "1.0.0", + "scripts": { + "cobuild": "node ../build.js", + "build": "node ../build.js", + "_phase:pre-build": "node ../pre-build.js", + "_phase:build": "node ../validate-pre-build.js && node ../build.js g" + }, + "dependencies": { + "b": "workspace:*" + } +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/h/config/rush-project.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/h/config/rush-project.json new file mode 100644 index 00000000000..3206537349d --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/h/config/rush-project.json @@ -0,0 +1,16 @@ +{ + "operationSettings": [ + { + "operationName": "_phase:build", + "outputFolderNames": ["dist"] + }, + { + "operationName": "cobuild", + "outputFolderNames": ["dist"] + }, + { + "operationName": "build", + "outputFolderNames": ["dist"] + } + ] +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/h/package.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/h/package.json new file mode 100644 index 00000000000..cb74fb60a7d --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/h/package.json @@ -0,0 +1,12 @@ +{ + "name": "h", + "version": "1.0.0", + "scripts": { + "cobuild": "", + "build": "", + "_phase:build": "" + }, + "dependencies": { + "a": "workspace:*" + } +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/pre-build.js b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/pre-build.js new file mode 100644 index 00000000000..4d9f43e7afa --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/pre-build.js @@ -0,0 +1,11 @@ +/* eslint-env es6 */ +const path = require('path'); +const { FileSystem } = require('@rushstack/node-core-library'); + +setTimeout(() => { + const outputFolder = path.resolve(process.cwd(), 'dist'); + const outputFile = path.resolve(outputFolder, 'pre-build'); + FileSystem.ensureFolder(outputFolder); + FileSystem.writeFile(outputFile, `Hello world!`); + console.log('done'); +}, 2000); diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/validate-pre-build.js b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/validate-pre-build.js new file mode 100644 index 00000000000..218484000e3 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/projects/validate-pre-build.js @@ -0,0 +1,13 @@ +/* eslint-env es6 */ +const path = require('path'); +const { FileSystem } = require('@rushstack/node-core-library'); + +const outputFolder = path.resolve(process.cwd(), 'dist'); +const outputFile = path.resolve(outputFolder, 'pre-build'); + +if (!FileSystem.exists(outputFile)) { + console.error(`${outputFile} does not exist.`); + process.exit(1); +} + +console.log(`${outputFile} exists`); diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/rush.json b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/rush.json new file mode 100644 index 00000000000..012281bea0d --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/rush.json @@ -0,0 +1,41 @@ +{ + "rushVersion": "5.80.0", + "pnpmVersion": "7.13.0", + "pnpmOptions": { + "useWorkspaces": true + }, + "projects": [ + { + "packageName": "a", + "projectFolder": "projects/a" + }, + { + "packageName": "b", + "projectFolder": "projects/b" + }, + { + "packageName": "c", + "projectFolder": "projects/c" + }, + { + "packageName": "d", + "projectFolder": "projects/d" + }, + { + "packageName": "e", + "projectFolder": "projects/e" + }, + { + "packageName": "f", + "projectFolder": "projects/f" + }, + { + "packageName": "g", + "projectFolder": "projects/g" + }, + { + "packageName": "h", + "projectFolder": "projects/h" + } + ] +} diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/src/paths.ts b/build-tests/rush-redis-cobuild-plugin-integration-test/src/paths.ts new file mode 100644 index 00000000000..858c5f62257 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/src/paths.ts @@ -0,0 +1,5 @@ +import * as path from 'path'; + +const sandboxRepoFolder: string = path.resolve(__dirname, '../sandbox/repo'); + +export { sandboxRepoFolder }; diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/src/runRush.ts b/build-tests/rush-redis-cobuild-plugin-integration-test/src/runRush.ts new file mode 100644 index 00000000000..5dd95e8871d --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/src/runRush.ts @@ -0,0 +1,40 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// Import from lib-commonjs for easy debugging +import { RushCommandLineParser } from '@microsoft/rush-lib/lib-commonjs/cli/RushCommandLineParser'; +import * as rushLib from '@microsoft/rush-lib/lib-commonjs'; + +// Setup redis cobuild plugin +const builtInPluginConfigurations: rushLib._IBuiltInPluginConfiguration[] = []; + +const rushConfiguration: rushLib.RushConfiguration = rushLib.RushConfiguration.loadFromDefaultLocation({ + startingFolder: __dirname +}); +const project: rushLib.RushConfigurationProject | undefined = rushConfiguration.getProjectByName( + '@rushstack/rush-redis-cobuild-plugin' +); +if (!project) { + throw new Error('Project @rushstack/rush-redis-cobuild-plugin not found'); +} +builtInPluginConfigurations.push({ + packageName: '@rushstack/rush-redis-cobuild-plugin', + pluginName: 'rush-redis-cobuild-plugin', + pluginPackageFolder: project.projectFolder +}); + +async function rushRush(args: string[]): Promise { + const options: rushLib.ILaunchOptions = { + isManaged: false, + alreadyReportedNodeTooNewError: false, + builtInPluginConfigurations + }; + const parser: RushCommandLineParser = new RushCommandLineParser({ + alreadyReportedNodeTooNewError: options.alreadyReportedNodeTooNewError, + builtInPluginConfigurations: options.builtInPluginConfigurations + }); + console.log(`Executing: rush ${args.join(' ')}`); + await parser.execute(args).catch(console.error); // CommandLineParser.execute() should never reject the promise +} + +rushRush(process.argv.slice(2)).catch(console.error); diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/src/testLockProvider.ts b/build-tests/rush-redis-cobuild-plugin-integration-test/src/testLockProvider.ts new file mode 100644 index 00000000000..927d07b810e --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/src/testLockProvider.ts @@ -0,0 +1,60 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import { + RedisCobuildLockProvider, + IRedisCobuildLockProviderOptions +} from '@rushstack/rush-redis-cobuild-plugin'; +import { ConsoleTerminalProvider } from '@rushstack/node-core-library'; +import { OperationStatus, ICobuildContext, RushSession } from '@microsoft/rush-lib'; + +const options: IRedisCobuildLockProviderOptions = { + url: 'redis://localhost:6379', + password: 'redis123' +}; + +const rushSession: RushSession = new RushSession({ + terminalProvider: new ConsoleTerminalProvider(), + getIsDebugMode: () => true +}); + +async function main(): Promise { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const lockProvider: RedisCobuildLockProvider = new RedisCobuildLockProvider(options, rushSession as any); + await lockProvider.connectAsync(); + const context: ICobuildContext = { + contextId: 'context_id', + cacheId: 'cache_id', + lockKey: 'lock_key', + lockExpireTimeInSeconds: 30, + completedStateKey: 'completed_state_key', + clusterId: 'cluster_id', + runnerId: 'runner_id', + packageName: 'package_name', + phaseName: 'phase_name' + }; + await lockProvider.acquireLockAsync(context); + await lockProvider.renewLockAsync(context); + await lockProvider.setCompletedStateAsync(context, { + status: OperationStatus.Success, + cacheId: 'cache_id' + }); + const completedState = await lockProvider.getCompletedStateAsync(context); + console.log('Completed state: ', completedState); + await lockProvider.disconnectAsync(); +} + +process.exitCode = 1; + +main() + .then(() => { + process.exitCode = 0; + }) + .catch((err) => { + console.error(err); + }) + .finally(() => { + if (process.exitCode !== undefined) { + process.exit(process.exitCode); + } + }); diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/tsconfig.json b/build-tests/rush-redis-cobuild-plugin-integration-test/tsconfig.json new file mode 100644 index 00000000000..599b3beb19e --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/tsconfig.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json.schemastore.org/tsconfig", + + "compilerOptions": { + "outDir": "lib", + "rootDir": "src", + + "forceConsistentCasingInFileNames": true, + "jsx": "react", + "declaration": true, + "sourceMap": true, + "declarationMap": true, + "inlineSources": true, + "experimentalDecorators": true, + "esModuleInterop": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "types": ["node"], + + "module": "commonjs", + "target": "es2017", + "lib": ["es2017", "DOM"] + }, + "include": ["src/**/*.ts", "src/**/*.tsx"], + "exclude": ["node_modules", "lib"] +} diff --git a/common/changes/@microsoft/load-themed-styles/feat-cobuild_2023-08-16-03-17.json b/common/changes/@microsoft/load-themed-styles/feat-cobuild_2023-08-16-03-17.json new file mode 100644 index 00000000000..0a43a4d60f5 --- /dev/null +++ b/common/changes/@microsoft/load-themed-styles/feat-cobuild_2023-08-16-03-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/load-themed-styles", + "comment": "Use self.setTimeout() instead of setTimeout() to work around a Jest regression", + "type": "patch" + } + ], + "packageName": "@microsoft/load-themed-styles" +} \ No newline at end of file diff --git a/common/changes/@microsoft/rush/feat-cobuild_2023-02-17-07-02.json b/common/changes/@microsoft/rush/feat-cobuild_2023-02-17-07-02.json new file mode 100644 index 00000000000..396378277eb --- /dev/null +++ b/common/changes/@microsoft/rush/feat-cobuild_2023-02-17-07-02.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/rush", + "comment": "(EXPERIMENTAL) Initial release of the cobuild feature, a cheap way to distribute jobs Rush builds across multiple VMs. (GitHub #3485)", + "type": "none" + } + ], + "packageName": "@microsoft/rush" +} \ No newline at end of file diff --git a/common/changes/@rushstack/package-extractor/feat-cobuild_2023-08-24-08-58.json b/common/changes/@rushstack/package-extractor/feat-cobuild_2023-08-24-08-58.json new file mode 100644 index 00000000000..672fa0fcb35 --- /dev/null +++ b/common/changes/@rushstack/package-extractor/feat-cobuild_2023-08-24-08-58.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/package-extractor", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/package-extractor" +} \ No newline at end of file diff --git a/common/config/rush/nonbrowser-approved-packages.json b/common/config/rush/nonbrowser-approved-packages.json index 33ae9f6bd37..fdbf7174814 100644 --- a/common/config/rush/nonbrowser-approved-packages.json +++ b/common/config/rush/nonbrowser-approved-packages.json @@ -86,6 +86,10 @@ "name": "@pnpm/logger", "allowedCategories": [ "libraries" ] }, + { + "name": "@redis/client", + "allowedCategories": [ "libraries" ] + }, { "name": "@rushstack/debug-certificate-manager", "allowedCategories": [ "libraries" ] @@ -210,6 +214,10 @@ "name": "@rushstack/rush-http-build-cache-plugin", "allowedCategories": [ "libraries" ] }, + { + "name": "@rushstack/rush-redis-cobuild-plugin", + "allowedCategories": [ "tests" ] + }, { "name": "@rushstack/rush-sdk", "allowedCategories": [ "libraries", "tests", "vscode-extensions" ] @@ -778,6 +786,10 @@ "name": "url-loader", "allowedCategories": [ "libraries" ] }, + { + "name": "uuid", + "allowedCategories": [ "libraries" ] + }, { "name": "vsce", "allowedCategories": [ "vscode-extensions" ] diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index a81f14d2860..dd149a14f62 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -32,7 +32,7 @@ importers: '@rushstack/ts-command-line': link:../../libraries/ts-command-line colors: 1.2.5 js-yaml: 3.13.1 - resolve: 1.22.1 + resolve: 1.22.4 devDependencies: '@rushstack/eslint-config': link:../../eslint/eslint-config '@rushstack/heft': link:../heft @@ -72,7 +72,7 @@ importers: '@rushstack/ts-command-line': link:../../libraries/ts-command-line colors: 1.2.5 lodash: 4.17.21 - resolve: 1.22.1 + resolve: 1.22.4 semver: 7.5.4 source-map: 0.6.1 typescript: 5.0.4 @@ -178,7 +178,7 @@ importers: '@types/heft-jest': 1.0.1 '@types/js-yaml': 3.12.1 '@types/node': 14.18.36 - '@types/update-notifier': 6.0.2 + '@types/update-notifier': 6.0.4 ../../apps/lockfile-explorer-web: specifiers: @@ -198,13 +198,13 @@ importers: react-redux: ~8.0.4 redux: ~4.2.0 dependencies: - '@fluentui/react': 8.106.9_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react': 8.110.12_tlqvpdqnq63ssdllbmshthdmo4 '@lifaon/path': 2.1.0 - '@reduxjs/toolkit': 1.8.6_qfynotfwlyrsyq662adyrweaoe + '@reduxjs/toolkit': 1.8.6_wh4ihjgz7ckkj64srthnp7p2pq '@rushstack/rush-themed-ui': link:../../libraries/rush-themed-ui react: 16.13.1 react-dom: 16.13.1_react@16.13.1 - react-redux: 8.0.5_mq2cyprinb6qi7hdzoedcdddgq + react-redux: 8.0.7_nok3erdxukfns4p3xu5vwteodu redux: 4.2.1 devDependencies: '@rushstack/eslint-config': link:../../eslint/eslint-config @@ -228,7 +228,7 @@ importers: dependencies: '@rushstack/node-core-library': link:../../libraries/node-core-library '@rushstack/ts-command-line': link:../../libraries/ts-command-line - string-argv: 0.3.1 + string-argv: 0.3.2 devDependencies: '@rushstack/eslint-config': link:../../eslint/eslint-config '@rushstack/heft': link:../heft @@ -286,7 +286,7 @@ importers: '@rushstack/node-core-library': link:../../libraries/node-core-library '@rushstack/ts-command-line': link:../../libraries/ts-command-line colors: 1.2.5 - resolve: 1.22.1 + resolve: 1.22.4 semver: 7.5.4 typescript: 5.0.4 devDependencies: @@ -588,9 +588,9 @@ importers: '@types/webpack-env': 1.18.0 css-loader: 6.6.0_webpack@5.82.1 eslint: 8.7.0 - html-webpack-plugin: 5.5.0_webpack@5.82.1 + html-webpack-plugin: 5.5.3_webpack@5.82.1 source-map-loader: 3.0.2_webpack@5.82.1 - style-loader: 3.3.2_webpack@5.82.1 + style-loader: 3.3.3_webpack@5.82.1 typescript: 5.0.4 webpack: 5.82.1 @@ -795,7 +795,7 @@ importers: '@rushstack/heft': link:../../apps/heft '@rushstack/heft-node-rig': link:../../rigs/heft-node-rig '@types/node': 14.18.36 - '@typescript-eslint/parser': 5.59.7_2aulnmwxyjhjxqmg3aruit533m + '@typescript-eslint/parser': 5.59.11_2aulnmwxyjhjxqmg3aruit533m eslint: 7.30.0 typescript: 5.0.4 @@ -1149,12 +1149,12 @@ importers: '@types/react': 16.14.23 '@types/react-dom': 16.9.14 '@types/webpack-env': 1.18.0 - autoprefixer: 10.4.14_postcss@8.4.21 + autoprefixer: 10.4.14_postcss@8.4.27 css-loader: 5.2.7_webpack@4.44.2 eslint: 8.7.0 html-webpack-plugin: 4.5.2_webpack@4.44.2 - postcss: 8.4.21 - postcss-loader: 4.1.0_q6bo6nn7or7rkhjb274oworunu + postcss: 8.4.27 + postcss-loader: 4.1.0_ekdjxa4augitkpf5xi76zab6zu react: 16.13.1 react-dom: 16.13.1_react@16.13.1 sass: 1.3.2 @@ -1347,7 +1347,7 @@ importers: '@types/heft-jest': 1.0.1 '@types/webpack-env': 1.18.0 eslint: 8.7.0 - html-webpack-plugin: 5.5.0_webpack@5.82.1 + html-webpack-plugin: 5.5.3_webpack@5.82.1 tslint: 5.20.1_typescript@5.0.4 tslint-microsoft-contrib: 6.2.0_iya4g6zcyztd4u7rvedwwipq6a typescript: 5.0.4 @@ -1496,7 +1496,7 @@ importers: '@rushstack/heft-node-rig': link:../../rigs/heft-node-rig '@rushstack/node-core-library': link:../../libraries/node-core-library '@rushstack/rush-amazon-s3-build-cache-plugin': link:../../rush-plugins/rush-amazon-s3-build-cache-plugin - '@types/http-proxy': 1.17.10 + '@types/http-proxy': 1.17.11 '@types/node': 14.18.36 eslint: 8.7.0 http-proxy: 1.18.1 @@ -1536,6 +1536,32 @@ importers: '@rushstack/heft-node-rig': link:../../rigs/heft-node-rig '@types/node': 14.18.36 + ../../build-tests/rush-redis-cobuild-plugin-integration-test: + specifiers: + '@microsoft/rush-lib': workspace:* + '@rushstack/eslint-config': workspace:* + '@rushstack/heft': workspace:* + '@rushstack/heft-node-rig': workspace:* + '@rushstack/node-core-library': workspace:* + '@rushstack/rush-redis-cobuild-plugin': workspace:* + '@types/http-proxy': ~1.17.8 + '@types/node': 14.18.36 + eslint: ~8.7.0 + http-proxy: ~1.18.1 + typescript: ~5.0.4 + devDependencies: + '@microsoft/rush-lib': link:../../libraries/rush-lib + '@rushstack/eslint-config': link:../../eslint/eslint-config + '@rushstack/heft': link:../../apps/heft + '@rushstack/heft-node-rig': link:../../rigs/heft-node-rig + '@rushstack/node-core-library': link:../../libraries/node-core-library + '@rushstack/rush-redis-cobuild-plugin': link:../../rush-plugins/rush-redis-cobuild-plugin + '@types/http-proxy': 1.17.11 + '@types/node': 14.18.36 + eslint: 8.7.0 + http-proxy: 1.18.1 + typescript: 5.0.4 + ../../build-tests/set-webpack-public-path-plugin-webpack4-test: specifiers: '@rushstack/eslint-config': workspace:* @@ -1594,10 +1620,10 @@ importers: '@rushstack/eslint-plugin': link:../eslint-plugin '@rushstack/eslint-plugin-packlets': link:../eslint-plugin-packlets '@rushstack/eslint-plugin-security': link:../eslint-plugin-security - '@typescript-eslint/eslint-plugin': 5.59.7_7yosyjls7ieoemdl24ktrlsrzm - '@typescript-eslint/experimental-utils': 5.59.7_ucoohk2w7gukx6ccuul7rl7pnq - '@typescript-eslint/parser': 5.59.7_ucoohk2w7gukx6ccuul7rl7pnq - '@typescript-eslint/typescript-estree': 5.59.7_typescript@5.0.4 + '@typescript-eslint/eslint-plugin': 5.59.11_t4uc3crzdwrij7lgcgc6l6vdpy + '@typescript-eslint/experimental-utils': 5.59.11_ucoohk2w7gukx6ccuul7rl7pnq + '@typescript-eslint/parser': 5.59.11_ucoohk2w7gukx6ccuul7rl7pnq + '@typescript-eslint/typescript-estree': 5.59.11_typescript@5.0.4 eslint-plugin-promise: 6.0.1_eslint@8.7.0 eslint-plugin-react: 7.27.1_eslint@8.7.0 eslint-plugin-tsdoc: 0.2.17 @@ -1631,7 +1657,7 @@ importers: typescript: ~5.0.4 dependencies: '@rushstack/tree-pattern': link:../../libraries/tree-pattern - '@typescript-eslint/experimental-utils': 5.59.7_ucoohk2w7gukx6ccuul7rl7pnq + '@typescript-eslint/experimental-utils': 5.59.11_ucoohk2w7gukx6ccuul7rl7pnq devDependencies: '@rushstack/heft': 0.54.0_@types+node@14.18.36 '@rushstack/heft-node-rig': 2.2.6_nfozjgqil6u3mushzg237yh5re @@ -1639,8 +1665,8 @@ importers: '@types/estree': 0.0.50 '@types/heft-jest': 1.0.1 '@types/node': 14.18.36 - '@typescript-eslint/parser': 5.59.7_ucoohk2w7gukx6ccuul7rl7pnq - '@typescript-eslint/typescript-estree': 5.59.7_typescript@5.0.4 + '@typescript-eslint/parser': 5.59.11_ucoohk2w7gukx6ccuul7rl7pnq + '@typescript-eslint/typescript-estree': 5.59.11_typescript@5.0.4 eslint: 8.7.0 typescript: 5.0.4 @@ -1660,7 +1686,7 @@ importers: typescript: ~5.0.4 dependencies: '@rushstack/tree-pattern': link:../../libraries/tree-pattern - '@typescript-eslint/experimental-utils': 5.59.7_ucoohk2w7gukx6ccuul7rl7pnq + '@typescript-eslint/experimental-utils': 5.59.11_ucoohk2w7gukx6ccuul7rl7pnq devDependencies: '@rushstack/heft': 0.54.0_@types+node@14.18.36 '@rushstack/heft-node-rig': 2.2.6_nfozjgqil6u3mushzg237yh5re @@ -1668,8 +1694,8 @@ importers: '@types/estree': 0.0.50 '@types/heft-jest': 1.0.1 '@types/node': 14.18.36 - '@typescript-eslint/parser': 5.59.7_ucoohk2w7gukx6ccuul7rl7pnq - '@typescript-eslint/typescript-estree': 5.59.7_typescript@5.0.4 + '@typescript-eslint/parser': 5.59.11_ucoohk2w7gukx6ccuul7rl7pnq + '@typescript-eslint/typescript-estree': 5.59.11_typescript@5.0.4 eslint: 8.7.0 typescript: 5.0.4 @@ -1689,7 +1715,7 @@ importers: typescript: ~5.0.4 dependencies: '@rushstack/tree-pattern': link:../../libraries/tree-pattern - '@typescript-eslint/experimental-utils': 5.59.7_ucoohk2w7gukx6ccuul7rl7pnq + '@typescript-eslint/experimental-utils': 5.59.11_ucoohk2w7gukx6ccuul7rl7pnq devDependencies: '@rushstack/heft': 0.54.0_@types+node@14.18.36 '@rushstack/heft-node-rig': 2.2.6_nfozjgqil6u3mushzg237yh5re @@ -1697,8 +1723,8 @@ importers: '@types/estree': 0.0.50 '@types/heft-jest': 1.0.1 '@types/node': 14.18.36 - '@typescript-eslint/parser': 5.59.7_ucoohk2w7gukx6ccuul7rl7pnq - '@typescript-eslint/typescript-estree': 5.59.7_typescript@5.0.4 + '@typescript-eslint/parser': 5.59.11_ucoohk2w7gukx6ccuul7rl7pnq + '@typescript-eslint/typescript-estree': 5.59.11_typescript@5.0.4 eslint: 8.7.0 typescript: 5.0.4 @@ -1849,7 +1875,7 @@ importers: '@rushstack/heft-config-file': link:../../libraries/heft-config-file '@rushstack/node-core-library': link:../../libraries/node-core-library '@rushstack/typings-generator': link:../../libraries/typings-generator - postcss: 8.4.21 + postcss: 8.4.27 postcss-modules: 1.5.0 sass-embedded: 1.62.0 devDependencies: @@ -2106,7 +2132,7 @@ importers: '@rushstack/worker-pool': link:../worker-pool serialize-javascript: 6.0.0 source-map: 0.7.4 - terser: 5.16.8 + terser: 5.19.2 devDependencies: '@rushstack/eslint-config': link:../../eslint/eslint-config '@rushstack/heft': link:../../apps/heft @@ -2138,7 +2164,7 @@ importers: fs-extra: 7.0.1 import-lazy: 4.0.0 jju: 1.4.0 - resolve: 1.22.1 + resolve: 1.22.4 semver: 7.5.4 z-schema: 5.0.5 devDependencies: @@ -2228,7 +2254,7 @@ importers: resolve: ~1.22.1 strip-json-comments: ~3.1.1 dependencies: - resolve: 1.22.1 + resolve: 1.22.4 strip-json-comments: 3.1.1 devDependencies: '@rushstack/eslint-config': link:../../eslint/eslint-config @@ -2269,6 +2295,7 @@ importers: '@types/ssri': ~7.1.0 '@types/strict-uri-encode': 2.0.0 '@types/tar': 6.1.1 + '@types/uuid': ~8.3.4 '@types/webpack-env': 1.18.0 '@yarnpkg/lockfile': ~1.0.2 builtin-modules: ~3.1.0 @@ -2294,9 +2321,10 @@ importers: tapable: 2.2.1 tar: ~6.1.11 true-case-path: ~2.2.1 + uuid: ~8.3.2 webpack: ~5.82.1 dependencies: - '@pnpm/dependency-path': 2.1.2 + '@pnpm/dependency-path': 2.1.3 '@pnpm/link-bins': 5.3.25 '@rushstack/heft-config-file': link:../heft-config-file '@rushstack/node-core-library': link:../node-core-library @@ -2329,8 +2357,9 @@ importers: ssri: 8.0.1 strict-uri-encode: 2.0.0 tapable: 2.2.1 - tar: 6.1.13 + tar: 6.1.15 true-case-path: 2.2.1 + uuid: 8.3.2 devDependencies: '@pnpm/logger': 4.0.0 '@rushstack/eslint-config': link:../../eslint/eslint-config @@ -2349,6 +2378,7 @@ importers: '@types/ssri': 7.1.1 '@types/strict-uri-encode': 2.0.0 '@types/tar': 6.1.1 + '@types/uuid': 8.3.4 '@types/webpack-env': 1.18.0 webpack: 5.82.1 @@ -2403,11 +2433,11 @@ importers: react: 16.13.1 react-dom: 16.13.1_react@16.13.1 devDependencies: - '@radix-ui/colors': 0.1.8 - '@radix-ui/react-checkbox': 1.0.3_tlqvpdqnq63ssdllbmshthdmo4 + '@radix-ui/colors': 0.1.9 + '@radix-ui/react-checkbox': 1.0.4_tlqvpdqnq63ssdllbmshthdmo4 '@radix-ui/react-icons': 1.1.1_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-scroll-area': 1.0.3_tlqvpdqnq63ssdllbmshthdmo4 - '@radix-ui/react-tabs': 1.0.3_tlqvpdqnq63ssdllbmshthdmo4 + '@radix-ui/react-scroll-area': 1.0.4_tlqvpdqnq63ssdllbmshthdmo4 + '@radix-ui/react-tabs': 1.0.4_tlqvpdqnq63ssdllbmshthdmo4 '@rushstack/eslint-config': link:../../eslint/eslint-config '@rushstack/heft': link:../../apps/heft '@rushstack/heft-web-rig': link:../../rigs/heft-web-rig @@ -2508,7 +2538,7 @@ importers: '@types/argparse': 1.0.38 argparse: 1.0.10 colors: 1.2.5 - string-argv: 0.3.1 + string-argv: 0.3.2 devDependencies: '@rushstack/eslint-config': link:../../eslint/eslint-config '@rushstack/heft': 0.54.0_@types+node@14.18.36 @@ -2671,20 +2701,20 @@ importers: '@rushstack/heft-typescript-plugin': link:../../heft-plugins/heft-typescript-plugin '@rushstack/heft-webpack5-plugin': link:../../heft-plugins/heft-webpack5-plugin '@types/heft-jest': 1.0.1 - autoprefixer: 10.4.14_postcss@8.4.21 + autoprefixer: 10.4.14_postcss@8.4.27 css-loader: 6.6.0_webpack@5.82.1 css-minimizer-webpack-plugin: 3.4.1_webpack@5.82.1 eslint: 8.7.0 - html-webpack-plugin: 5.5.0_webpack@5.82.1 + html-webpack-plugin: 5.5.3_webpack@5.82.1 jest-environment-jsdom: 29.5.0 mini-css-extract-plugin: 2.5.3_webpack@5.82.1 - postcss: 8.4.21 - postcss-loader: 6.2.1_ppp6sa22bpb7xvyjstggfxu46e + postcss: 8.4.27 + postcss-loader: 6.2.1_3jh5p6n5i3mvhowydduikwr2gm sass: 1.49.11 sass-loader: 12.4.0_yam6yz2ljzjxm54mbm3teg4jcm source-map-loader: 3.0.2_webpack@5.82.1 - style-loader: 3.3.2_webpack@5.82.1 - terser-webpack-plugin: 5.3.7_webpack@5.82.1 + style-loader: 3.3.3_webpack@5.82.1 + terser-webpack-plugin: 5.3.9_webpack@5.82.1 typescript: 5.0.4 url-loader: 4.1.1_webpack@5.82.1 webpack: 5.82.1 @@ -2793,6 +2823,29 @@ importers: '@types/heft-jest': 1.0.1 '@types/node': 14.18.36 + ../../rush-plugins/rush-redis-cobuild-plugin: + specifiers: + '@microsoft/rush-lib': workspace:* + '@redis/client': ~1.5.5 + '@rushstack/eslint-config': workspace:* + '@rushstack/heft': workspace:* + '@rushstack/heft-node-rig': workspace:* + '@rushstack/node-core-library': workspace:* + '@rushstack/rush-sdk': workspace:* + '@types/heft-jest': 1.0.1 + '@types/node': 14.18.36 + dependencies: + '@redis/client': 1.5.8 + '@rushstack/node-core-library': link:../../libraries/node-core-library + '@rushstack/rush-sdk': link:../../libraries/rush-sdk + devDependencies: + '@microsoft/rush-lib': link:../../libraries/rush-lib + '@rushstack/eslint-config': link:../../eslint/eslint-config + '@rushstack/heft': link:../../apps/heft + '@rushstack/heft-node-rig': link:../../rigs/heft-node-rig + '@types/heft-jest': 1.0.1 + '@types/node': 14.18.36 + ../../rush-plugins/rush-serve-plugin: specifiers: '@rushstack/debug-certificate-manager': workspace:* @@ -2860,13 +2913,13 @@ importers: webpack: ~5.82.1 webpack-bundle-analyzer: ~4.5.0 dependencies: - '@fluentui/react': 8.106.9_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-components': 9.27.0_wewqak4xa7p37vdws7kvgszqra - '@reduxjs/toolkit': 1.8.6_qfynotfwlyrsyq662adyrweaoe + '@fluentui/react': 8.110.12_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-components': 9.27.4_wewqak4xa7p37vdws7kvgszqra + '@reduxjs/toolkit': 1.8.6_wh4ihjgz7ckkj64srthnp7p2pq react: 16.13.1 react-dom: 16.13.1_react@16.13.1 react-hook-form: 7.24.2_react@16.13.1 - react-redux: 8.0.5_mq2cyprinb6qi7hdzoedcdddgq + react-redux: 8.0.7_nok3erdxukfns4p3xu5vwteodu redux: 4.2.1 scheduler: 0.19.0 tslib: 2.3.1 @@ -2878,10 +2931,10 @@ importers: '@types/react': 16.14.23 '@types/react-dom': 16.9.14 '@types/react-redux': 7.1.25 - '@types/vscode': 1.80.0 + '@types/vscode': 1.81.0 '@types/webpack-env': 1.18.0 eslint: 8.7.0 - html-webpack-plugin: 5.5.0_webpack@5.82.1 + html-webpack-plugin: 5.5.3_webpack@5.82.1 webpack: 5.82.1 webpack-bundle-analyzer: 4.5.0 @@ -2923,7 +2976,7 @@ importers: '@types/glob': 7.1.1 '@types/mocha': 9.1.1 '@types/node': 14.18.36 - '@types/vscode': 1.80.0 + '@types/vscode': 1.81.0 '@types/webpack-env': 1.18.0 '@vscode/test-electron': 1.6.2 glob: 7.0.6 @@ -3245,12 +3298,16 @@ importers: packages: - /@ampproject/remapping/2.2.0: - resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + /@aashutoshrathi/word-wrap/1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + + /@ampproject/remapping/2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 /@aws-cdk/aws-apigatewayv2-alpha/2.7.0-alpha.0_4k7vh4k5vxgov5k3ju6unzjkgi: resolution: {integrity: sha512-NHm+Jet4Iz1YDEo7lik4ItfGU1w97jCqNKilET0kcPndtxynDJNVpD1O0ycOb9L6hhLtpT5I7Llutt9Dy5gjYA==} @@ -3310,9 +3367,6 @@ packages: /@aws-cdk/cloud-assembly-schema/2.7.0: resolution: {integrity: sha512-vKTKLMPvzUhsYo3c4/EbMJq+bwIgHkwK0lV9fc5mQlnTUTyHe6nGIvyzmWWMd5BVEkgNzw+QdecxeeYJNu/doA==} engines: {node: '>= 14.15.0'} - dependencies: - jsonschema: 1.4.1 - semver: 7.5.4 dev: true bundledDependencies: - jsonschema @@ -3336,7 +3390,6 @@ packages: engines: {node: '>= 14.15.0'} dependencies: '@aws-cdk/cloud-assembly-schema': 2.7.0 - semver: 7.5.4 dev: true bundledDependencies: - semver @@ -3353,57 +3406,59 @@ packages: tslib: 2.3.1 dev: false - /@azure/core-auth/1.4.0: - resolution: {integrity: sha512-HFrcTgmuSuukRf/EdPmqBrc5l6Q5Uu+2TbuhaKbgaCpP2TfAeiNaQPAadxO+CYBRHGUzIDteMAjFspFLDLnKVQ==} - engines: {node: '>=12.0.0'} + /@azure/core-auth/1.5.0: + resolution: {integrity: sha512-udzoBuYG1VBoHVohDTrvKjyzel34zt77Bhp7dQntVGGD0ehVq48owENbBG8fIgkHRNUBQH5k1r0hpoMu5L8+kw==} + engines: {node: '>=14.0.0'} dependencies: '@azure/abort-controller': 1.1.0 + '@azure/core-util': 1.4.0 tslib: 2.3.1 dev: false - /@azure/core-client/1.7.2: - resolution: {integrity: sha512-ye5554gnVnXdfZ64hptUtETgacXoRWxYv1JF5MctoAzTSH5dXhDPZd9gOjDPyWMcLIk58pnP5+p5vGX6PYn1ag==} + /@azure/core-client/1.7.3: + resolution: {integrity: sha512-kleJ1iUTxcO32Y06dH9Pfi9K4U+Tlb111WXEnbt7R/ne+NLRwppZiTGJuTD5VVoxTMK5NTbEtm5t2vcdNCFe2g==} engines: {node: '>=14.0.0'} dependencies: '@azure/abort-controller': 1.1.0 - '@azure/core-auth': 1.4.0 - '@azure/core-rest-pipeline': 1.10.2 + '@azure/core-auth': 1.5.0 + '@azure/core-rest-pipeline': 1.12.0 '@azure/core-tracing': 1.0.1 - '@azure/core-util': 1.2.0 + '@azure/core-util': 1.4.0 '@azure/logger': 1.0.4 tslib: 2.3.1 transitivePeerDependencies: - supports-color dev: false - /@azure/core-http/2.3.1: - resolution: {integrity: sha512-cur03BUwV0Tbv81bQBOLafFB02B6G++K6F2O3IMl8pSE2QlXm3cu11bfyBNlDUKi5U+xnB3GC63ae3athhkx6Q==} + /@azure/core-http/2.3.2: + resolution: {integrity: sha512-Z4dfbglV9kNZO177CNx4bo5ekFuYwwsvjLiKdZI4r84bYGv3irrbQz7JC3/rUfFH2l4T/W6OFleJaa2X0IaQqw==} engines: {node: '>=14.0.0'} dependencies: '@azure/abort-controller': 1.1.0 - '@azure/core-auth': 1.4.0 + '@azure/core-auth': 1.5.0 '@azure/core-tracing': 1.0.0-preview.13 - '@azure/core-util': 1.2.0 + '@azure/core-util': 1.4.0 '@azure/logger': 1.0.4 '@types/node-fetch': 2.6.2 '@types/tunnel': 0.0.3 form-data: 4.0.0 node-fetch: 2.6.7 process: 0.11.10 - tough-cookie: 4.1.2 + tough-cookie: 4.1.3 tslib: 2.3.1 tunnel: 0.0.6 uuid: 8.3.2 - xml2js: 0.4.23 + xml2js: 0.5.0 transitivePeerDependencies: - encoding dev: false - /@azure/core-lro/2.5.1: - resolution: {integrity: sha512-JHQy/bA3NOz2WuzOi5zEk6n/TJdAropupxUT521JIJvW7EXV2YN2SFYZrf/2RHeD28QAClGdynYadZsbmP+nyQ==} + /@azure/core-lro/2.5.4: + resolution: {integrity: sha512-3GJiMVH7/10bulzOKGrrLeG/uCBH/9VtxqaMcB9lIqAeamI/xYQSHJL/KcsLDuH+yTjYpro/u6D/MuRe4dN70Q==} engines: {node: '>=14.0.0'} dependencies: '@azure/abort-controller': 1.1.0 + '@azure/core-util': 1.4.0 '@azure/logger': 1.0.4 tslib: 2.3.1 dev: false @@ -3415,20 +3470,19 @@ packages: tslib: 2.3.1 dev: false - /@azure/core-rest-pipeline/1.10.2: - resolution: {integrity: sha512-e3WzAsRKLor5EgK2bQqR1OY5D7VBqzORHtlqtygZZQGCYOIBsynqrZBa8MFD1Ue9r8TPtofOLditalnlQHS45Q==} + /@azure/core-rest-pipeline/1.12.0: + resolution: {integrity: sha512-+MnSB0vGZjszSzr5AW8z93/9fkDu2RLtWmAN8gskURq7EW2sSwqy8jZa0V26rjuBVkwhdA3Hw8z3VWoeBUOw+A==} engines: {node: '>=14.0.0'} dependencies: '@azure/abort-controller': 1.1.0 - '@azure/core-auth': 1.4.0 + '@azure/core-auth': 1.5.0 '@azure/core-tracing': 1.0.1 - '@azure/core-util': 1.2.0 + '@azure/core-util': 1.4.0 '@azure/logger': 1.0.4 form-data: 4.0.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 tslib: 2.3.1 - uuid: 8.3.2 transitivePeerDependencies: - supports-color dev: false @@ -3448,8 +3502,8 @@ packages: tslib: 2.3.1 dev: false - /@azure/core-util/1.2.0: - resolution: {integrity: sha512-ffGIw+Qs8bNKNLxz5UPkz4/VBM/EZY07mPve1ZYFqYUdPwFqRj0RPk0U7LZMOfT7GCck9YjuT1Rfp1PApNl1ng==} + /@azure/core-util/1.4.0: + resolution: {integrity: sha512-eGAyJpm3skVQoLiRqm/xPa+SXi/NPDdSHMxbRAz2lSprd+Zs+qrpQGQQ2VQ3Nttu+nSZR4XoYQC71LbEI7jsig==} engines: {node: '>=14.0.0'} dependencies: '@azure/abort-controller': 1.1.0 @@ -3461,15 +3515,15 @@ packages: engines: {node: '>=12.0.0'} dependencies: '@azure/abort-controller': 1.1.0 - '@azure/core-auth': 1.4.0 - '@azure/core-client': 1.7.2 - '@azure/core-rest-pipeline': 1.10.2 + '@azure/core-auth': 1.5.0 + '@azure/core-client': 1.7.3 + '@azure/core-rest-pipeline': 1.12.0 '@azure/core-tracing': 1.0.1 - '@azure/core-util': 1.2.0 + '@azure/core-util': 1.4.0 '@azure/logger': 1.0.4 - '@azure/msal-browser': 2.34.0 + '@azure/msal-browser': 2.38.1 '@azure/msal-common': 7.6.0 - '@azure/msal-node': 1.16.0 + '@azure/msal-node': 1.18.1 events: 3.3.0 jws: 4.0.0 open: 8.4.2 @@ -3487,15 +3541,15 @@ packages: tslib: 2.3.1 dev: false - /@azure/msal-browser/2.34.0: - resolution: {integrity: sha512-stoXdlfAtyVIMOp1lS5PorgO5f66MGRi3Q1FBlXhVZFTsTfAWrNdSOx1m/PXWHskWE9aXO+NEzXVOoWmDNnvNA==} + /@azure/msal-browser/2.38.1: + resolution: {integrity: sha512-NROo7mLpw7aWtj8tWy9ZPz3WWiudwVAOIDZ1K3PPrjDAA4kFYayWlbZiJl1T1sD5Oqwa6FOtwzFSvuUj1CWp6Q==} engines: {node: '>=0.8.0'} dependencies: - '@azure/msal-common': 11.0.0 + '@azure/msal-common': 13.2.1 dev: false - /@azure/msal-common/11.0.0: - resolution: {integrity: sha512-SZH8ObQ3Hq5v3ogVGBYJp1nNW7p+MtM4PH4wfNadBP9wf7K0beQHF9iOtRcjPOkwZf+ZD49oXqw91LndIkdk8g==} + /@azure/msal-common/13.2.1: + resolution: {integrity: sha512-9CtyVdDtAOw+raemKg8gdBuE7gleObgSb7p4bzMIlUt8eM69/Gaow7uqr1gK3jLYINSrss32OZW8mBbdgVLiHg==} engines: {node: '>=0.8.0'} dev: false @@ -3504,12 +3558,12 @@ packages: engines: {node: '>=0.8.0'} dev: false - /@azure/msal-node/1.16.0: - resolution: {integrity: sha512-eGXPp65i++mAIvziafbCH970TCeECB6iaQP7aRzZEjtU238cW4zKm40U8YxkiCn9rR1G2VeMHENB5h6WRk7ZCQ==} + /@azure/msal-node/1.18.1: + resolution: {integrity: sha512-B4kUOWJoN4vD8b3pGJ9Q9mIZhaDb8EnQM1aN0x1otlQgTfzDvEk6rWc6fy8uGdtXqcNddBtiXdc4oRiItroVkA==} engines: {node: 10 || 12 || 14 || 16 || 18} dependencies: - '@azure/msal-common': 11.0.0 - jsonwebtoken: 9.0.0 + '@azure/msal-common': 13.2.1 + jsonwebtoken: 9.0.1 uuid: 8.3.2 dev: false @@ -3518,8 +3572,8 @@ packages: engines: {node: '>=12.0.0'} dependencies: '@azure/abort-controller': 1.1.0 - '@azure/core-http': 2.3.1 - '@azure/core-lro': 2.5.1 + '@azure/core-http': 2.3.2 + '@azure/core-lro': 2.5.4 '@azure/core-paging': 1.5.0 '@azure/core-tracing': 1.0.0-preview.13 '@azure/logger': 1.0.4 @@ -3532,38 +3586,39 @@ packages: /@babel/code-frame/7.12.11: resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} dependencies: - '@babel/highlight': 7.18.6 + '@babel/highlight': 7.22.10 dev: true - /@babel/code-frame/7.18.6: - resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + /@babel/code-frame/7.22.10: + resolution: {integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.18.6 + '@babel/highlight': 7.22.10 + chalk: 2.4.2 - /@babel/compat-data/7.21.0: - resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==} + /@babel/compat-data/7.22.9: + resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} engines: {node: '>=6.9.0'} /@babel/core/7.12.9: resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.21.3 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helpers': 7.21.0 - '@babel/parser': 7.21.3 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@babel/code-frame': 7.22.10 + '@babel/generator': 7.22.10 + '@babel/helper-module-transforms': 7.22.9_@babel+core@7.12.9 + '@babel/helpers': 7.22.10 + '@babel/parser': 7.22.10 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.10 + '@babel/types': 7.22.10 convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 lodash: 4.17.21 - resolve: 1.22.1 - semver: 5.7.1 + resolve: 1.22.4 + semver: 5.7.2 source-map: 0.5.7 transitivePeerDependencies: - supports-color @@ -3573,89 +3628,85 @@ packages: resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.21.3 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helpers': 7.21.0 - '@babel/parser': 7.21.3 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.10 + '@babel/generator': 7.22.10 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-module-transforms': 7.22.9_@babel+core@7.20.12 + '@babel/helpers': 7.22.10 + '@babel/parser': 7.22.10 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.10 + '@babel/types': 7.22.10 convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color - /@babel/generator/7.21.3: - resolution: {integrity: sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==} + /@babel/generator/7.22.10: + resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 + '@babel/types': 7.22.10 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 jsesc: 2.5.2 - /@babel/helper-annotate-as-pure/7.18.6: - resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} + /@babel/helper-annotate-as-pure/7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.10 dev: true - /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: - resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} + /@babel/helper-builder-binary-assignment-operator-visitor/7.22.10: + resolution: {integrity: sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-explode-assignable-expression': 7.18.6 - '@babel/types': 7.21.3 + '@babel/types': 7.22.10 dev: true - /@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} + /@babel/helper-compilation-targets/7.22.10: + resolution: {integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.21.0 - '@babel/core': 7.20.12 - '@babel/helper-validator-option': 7.21.0 - browserslist: 4.21.5 + '@babel/compat-data': 7.22.9 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.10 lru-cache: 5.1.1 - semver: 6.3.0 + semver: 6.3.1 - /@babel/helper-create-class-features-plugin/7.21.0_@babel+core@7.20.12: - resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==} + /@babel/helper-create-class-features-plugin/7.22.10_@babel+core@7.20.12: + resolution: {integrity: sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-member-expression-to-functions': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.18.6 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-create-regexp-features-plugin/7.21.0_@babel+core@7.20.12: - resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==} + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.9_@babel+core@7.20.12 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: true + + /@babel/helper-create-regexp-features-plugin/7.22.9_@babel+core@7.20.12: + resolution: {integrity: sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 + semver: 6.3.1 dev: true /@babel/helper-define-polyfill-provider/0.1.5_@babel+core@7.20.12: @@ -3664,188 +3715,184 @@ packages: '@babel/core': ^7.4.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/traverse': 7.21.3 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/traverse': 7.22.10 debug: 4.3.4 lodash.debounce: 4.0.8 - resolve: 1.22.1 - semver: 6.3.0 + resolve: 1.22.4 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.20.12: - resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} + /@babel/helper-define-polyfill-provider/0.4.2_@babel+core@7.20.12: + resolution: {integrity: sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==} peerDependencies: - '@babel/core': ^7.4.0-0 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4 lodash.debounce: 4.0.8 - resolve: 1.22.1 - semver: 6.3.0 + resolve: 1.22.4 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-environment-visitor/7.18.9: - resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} + /@babel/helper-environment-visitor/7.22.5: + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} engines: {node: '>=6.9.0'} - /@babel/helper-explode-assignable-expression/7.18.6: - resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} + /@babel/helper-function-name/7.22.5: + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 - dev: true + '@babel/template': 7.22.5 + '@babel/types': 7.22.10 - /@babel/helper-function-name/7.21.0: - resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} + /@babel/helper-hoist-variables/7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.21.3 + '@babel/types': 7.22.10 - /@babel/helper-hoist-variables/7.18.6: - resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + /@babel/helper-member-expression-to-functions/7.22.5: + resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.10 + dev: true - /@babel/helper-member-expression-to-functions/7.21.0: - resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==} + /@babel/helper-module-imports/7.22.5: + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 - dev: true + '@babel/types': 7.22.10 - /@babel/helper-module-imports/7.18.6: - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + /@babel/helper-module-transforms/7.22.9_@babel+core@7.12.9: + resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/types': 7.21.3 + '@babel/core': 7.12.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + dev: true - /@babel/helper-module-transforms/7.21.2: - resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} + /@babel/helper-module-transforms/7.22.9_@babel+core@7.20.12: + resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-simple-access': 7.20.2 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 - transitivePeerDependencies: - - supports-color - - /@babel/helper-optimise-call-expression/7.18.6: - resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} + '@babel/core': 7.20.12 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + + /@babel/helper-optimise-call-expression/7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.10 dev: true /@babel/helper-plugin-utils/7.10.4: resolution: {integrity: sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==} dev: true - /@babel/helper-plugin-utils/7.20.2: - resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} + /@babel/helper-plugin-utils/7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} - /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.20.12: - resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} + /@babel/helper-remap-async-to-generator/7.22.9_@babel+core@7.20.12: + resolution: {integrity: sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-wrap-function': 7.20.5 - '@babel/types': 7.21.3 - transitivePeerDependencies: - - supports-color + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-wrap-function': 7.22.10 dev: true - /@babel/helper-replace-supers/7.20.7: - resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} + /@babel/helper-replace-supers/7.22.9_@babel+core@7.20.12: + resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-member-expression-to-functions': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.20.12 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 dev: true - /@babel/helper-simple-access/7.20.2: - resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} + /@babel/helper-simple-access/7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.10 - /@babel/helper-skip-transparent-expression-wrappers/7.20.0: - resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} + /@babel/helper-skip-transparent-expression-wrappers/7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.10 dev: true - /@babel/helper-split-export-declaration/7.18.6: - resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + /@babel/helper-split-export-declaration/7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.10 - /@babel/helper-string-parser/7.19.4: - resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + /@babel/helper-string-parser/7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier/7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + /@babel/helper-validator-identifier/7.22.5: + resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option/7.21.0: - resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} + /@babel/helper-validator-option/7.22.5: + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} engines: {node: '>=6.9.0'} - /@babel/helper-wrap-function/7.20.5: - resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} + /@babel/helper-wrap-function/7.22.10: + resolution: {integrity: sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-function-name': 7.21.0 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 - transitivePeerDependencies: - - supports-color + '@babel/helper-function-name': 7.22.5 + '@babel/template': 7.22.5 + '@babel/types': 7.22.10 dev: true - /@babel/helpers/7.21.0: - resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} + /@babel/helpers/7.22.10: + resolution: {integrity: sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.10 + '@babel/types': 7.22.10 transitivePeerDependencies: - supports-color - /@babel/highlight/7.18.6: - resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + /@babel/highlight/7.22.10: + resolution: {integrity: sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 @@ -3855,46 +3902,31 @@ packages: hasBin: true dev: false - /@babel/parser/7.21.3: - resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==} + /@babel/parser/7.22.10: + resolution: {integrity: sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==} engines: {node: '>=6.0.0'} hasBin: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.20.12 - dev: true - - /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.12 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.22.10_@babel+core@7.20.12 dev: true /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.20.12: @@ -3904,95 +3936,33 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.20.12: - resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-decorators/7.21.0_@babel+core@7.20.12: - resolution: {integrity: sha512-MfgX49uRrFUTL/HvWtmx3zmpyzMMr4MTj3d527MLlr/4RTT9G/ytFFP7qet2uM2Ve03b+BkpWUpK+lRXnQ+v9w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/plugin-syntax-decorators': 7.21.0_@babel+core@7.20.12 - transitivePeerDependencies: - - supports-color + '@babel/helper-create-class-features-plugin': 7.22.10_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} + /@babel/plugin-proposal-decorators/7.22.10_@babel+core@7.20.12: + resolution: {integrity: sha512-KxN6TqZzcFi4uD3UifqXElBTBNLAEH1l3vzMQj6JwJZbL2sZlThxSViOKCYY+4Ah4V4JhQ95IVB7s/Y6SJSlMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 + '@babel/helper-create-class-features-plugin': 7.22.10_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.9_@babel+core@7.20.12 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/plugin-syntax-decorators': 7.22.10_@babel+core@7.20.12 dev: true - /@babel/plugin-proposal-export-default-from/7.18.10_@babel+core@7.20.12: - resolution: {integrity: sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==} + /@babel/plugin-proposal-export-default-from/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-UCe1X/hplyv6A5g2WnQ90tnHRvYL29dabCWww92lO7VdfMVTVReBTRrhiMrKQejHD9oVkdnRdwYuzUZkBVQisg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-export-default-from': 7.18.6_@babel+core@7.20.12 - dev: true - - /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.20.12: - resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12 - dev: true - - /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 - dev: true - - /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-default-from': 7.22.5_@babel+core@7.20.12 dev: true /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.20.12: @@ -4002,30 +3972,19 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 dev: true - /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 - dev: true - /@babel/plugin-proposal-object-rest-spread/7.12.1_@babel+core@7.12.9: resolution: {integrity: sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.10.4 '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.9 - '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.12.9 + '@babel/plugin-transform-parameters': 7.22.5_@babel+core@7.12.9 dev: true /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.20.12: @@ -4034,23 +3993,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 + '@babel/compat-data': 7.22.9 '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.20.12 - dev: true - - /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-transform-parameters': 7.22.5_@babel+core@7.20.12 dev: true /@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.20.12: @@ -4060,8 +4008,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 dev: true @@ -4072,36 +4020,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - transitivePeerDependencies: - - supports-color + '@babel/helper-create-class-features-plugin': 7.22.10_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.20.12: - resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} + /@babel/plugin-proposal-private-property-in-object/7.21.0-placeholder-for-preset-env.2_@babel+core@7.20.12: + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} - engines: {node: '>=4'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.20.12 - '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.20.12: @@ -4110,7 +4039,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} @@ -4118,7 +4047,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.12: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} @@ -4126,7 +4055,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.20.12: resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} @@ -4135,17 +4064,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-decorators/7.21.0_@babel+core@7.20.12: - resolution: {integrity: sha512-tIoPpGBR8UuM4++ccWN3gifhVvQu7ZizuR1fklhRJrd5ewgbkUS+0KVFeWWxELtn18NTLoW32XV7zyOgIAiz+w==} + /@babel/plugin-syntax-decorators/7.22.10_@babel+core@7.20.12: + resolution: {integrity: sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.20.12: @@ -4154,17 +4083,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-export-default-from/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==} + /@babel/plugin-syntax-export-default-from/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-ODAqWWXB/yReh/jVQDag/3/tl6lgBueQkk/TcfW/59Oykm4c8a55XloX0CTk2k2VJiFWMgHby9xNX29IbCv9dQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.20.12: @@ -4173,27 +4102,37 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-flow/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} + /@babel/plugin-syntax-flow/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.20.12: - resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} + /@babel/plugin-syntax-import-assertions/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-attributes/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.20.12: @@ -4202,7 +4141,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} @@ -4210,7 +4149,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-jsx/7.12.1_@babel+core@7.12.9: resolution: {integrity: sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==} @@ -4218,17 +4157,17 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + /@babel/plugin-syntax-jsx/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.20.12: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} @@ -4236,7 +4175,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} @@ -4244,7 +4183,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.20.12: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} @@ -4252,7 +4191,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.12.9: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} @@ -4260,7 +4199,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.20.12: @@ -4269,7 +4208,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} @@ -4277,7 +4216,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} @@ -4285,7 +4224,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.20.12: resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} @@ -4294,7 +4233,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.20.12: @@ -4304,493 +4243,661 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.12: - resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} + /@babel/plugin-syntax-typescript/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} + /@babel/plugin-syntax-unicode-sets-regex/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-regexp-features-plugin': 7.22.9_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-arrow-functions/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} + /@babel/plugin-transform-async-generator-functions/7.22.10_@babel+core@7.20.12: + resolution: {integrity: sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.12 - transitivePeerDependencies: - - supports-color + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.9_@babel+core@7.20.12 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 + dev: true + + /@babel/plugin-transform-async-to-generator/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.9_@babel+core@7.20.12 dev: true - /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} + /@babel/plugin-transform-block-scoped-functions/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.20.12: - resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} + /@babel/plugin-transform-block-scoping/7.22.10_@babel+core@7.20.12: + resolution: {integrity: sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-classes/7.21.0_@babel+core@7.20.12: - resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} + /@babel/plugin-transform-class-properties/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.22.10_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-class-static-block/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-class-features-plugin': 7.22.10_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12 + dev: true + + /@babel/plugin-transform-classes/7.22.6_@babel+core@7.20.12: + resolution: {integrity: sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.9_@babel+core@7.20.12 + '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} + /@babel/plugin-transform-computed-properties/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/template': 7.20.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.5 dev: true - /@babel/plugin-transform-destructuring/7.21.3_@babel+core@7.20.12: - resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} + /@babel/plugin-transform-destructuring/7.22.10_@babel+core@7.20.12: + resolution: {integrity: sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} + /@babel/plugin-transform-dotall-regex/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-create-regexp-features-plugin': 7.22.9_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.20.12: - resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} + /@babel/plugin-transform-duplicate-keys/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + /@babel/plugin-transform-dynamic-import/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 dev: true - /@babel/plugin-transform-flow-strip-types/7.21.0_@babel+core@7.20.12: - resolution: {integrity: sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==} + /@babel/plugin-transform-exponentiation-operator/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.20.12 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.10 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-for-of/7.21.0_@babel+core@7.20.12: - resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} + /@babel/plugin-transform-export-namespace-from/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12 dev: true - /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.20.12: - resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + /@babel/plugin-transform-flow-strip-types/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.22.5_@babel+core@7.20.12 dev: true - /@babel/plugin-transform-literals/7.18.9_@babel+core@7.20.12: - resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + /@babel/plugin-transform-for-of/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + /@babel/plugin-transform-function-name/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.20.12: - resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} + /@babel/plugin-transform-json-strings/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 dev: true - /@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.20.12: - resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} + /@babel/plugin-transform-literals/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-simple-access': 7.20.2 - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.20.12: - resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} + /@babel/plugin-transform-logical-assignment-operators/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-identifier': 7.19.1 - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 dev: true - /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + /@babel/plugin-transform-member-expression-literals/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-module-transforms': 7.21.2 - '@babel/helper-plugin-utils': 7.20.2 - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-amd/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-module-transforms': 7.22.9_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-commonjs/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-module-transforms': 7.22.9_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-systemjs/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.22.9_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-umd/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-module-transforms': 7.22.9_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.20.12: - resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} + /@babel/plugin-transform-named-capturing-groups-regex/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-create-regexp-features-plugin': 7.22.9_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} + /@babel/plugin-transform-new-target/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + /@babel/plugin-transform-nullish-coalescing-operator/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-replace-supers': 7.20.7 - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 + dev: true + + /@babel/plugin-transform-numeric-separator/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 + dev: true + + /@babel/plugin-transform-object-rest-spread/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.20.12 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-transform-parameters': 7.22.5_@babel+core@7.20.12 + dev: true + + /@babel/plugin-transform-object-super/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.9_@babel+core@7.20.12 dev: true - /@babel/plugin-transform-parameters/7.21.3_@babel+core@7.12.9: - resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} + /@babel/plugin-transform-optional-catch-binding/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 + dev: true + + /@babel/plugin-transform-optional-chaining/7.22.10_@babel+core@7.20.12: + resolution: {integrity: sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 + dev: true + + /@babel/plugin-transform-parameters/7.22.5_@babel+core@7.12.9: + resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-parameters/7.21.3_@babel+core@7.20.12: - resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} + /@babel/plugin-transform-parameters/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} + /@babel/plugin-transform-private-methods/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-create-class-features-plugin': 7.22.10_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-react-display-name/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} + /@babel/plugin-transform-private-property-in-object/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.10_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12 dev: true - /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} + /@babel/plugin-transform-property-literals/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/plugin-transform-react-jsx': 7.21.0_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-react-jsx/7.21.0_@babel+core@7.20.12: - resolution: {integrity: sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==} + /@babel/plugin-transform-react-display-name/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12 - '@babel/types': 7.21.3 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-react-pure-annotations/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==} + /@babel/plugin-transform-react-jsx-development/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-transform-react-jsx': 7.22.5_@babel+core@7.20.12 dev: true - /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.20.12: - resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} + /@babel/plugin-transform-react-jsx/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - regenerator-transform: 0.15.1 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.22.5_@babel+core@7.20.12 + '@babel/types': 7.22.10 dev: true - /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} + /@babel/plugin-transform-react-pure-annotations/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + /@babel/plugin-transform-regenerator/7.22.10_@babel+core@7.20.12: + resolution: {integrity: sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.2 dev: true - /@babel/plugin-transform-spread/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} + /@babel/plugin-transform-reserved-words/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} + /@babel/plugin-transform-shorthand-properties/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.20.12: - resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + /@babel/plugin-transform-spread/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.20.12: - resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} + /@babel/plugin-transform-sticky-regex/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typescript/7.21.3_@babel+core@7.20.12: - resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} + /@babel/plugin-transform-template-literals/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.20.12: - resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} + /@babel/plugin-transform-typeof-symbol/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} + /@babel/plugin-transform-typescript/7.22.10_@babel+core@7.20.12: + resolution: {integrity: sha512-7++c8I/ymsDo4QQBAgbraXLzIM6jmfao11KgIBEYZRReWzNWH9NtNgJcyrZiXsOPh523FQm6LfpLyy/U5fn46A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.10_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.22.5_@babel+core@7.20.12 dev: true - /@babel/preset-env/7.20.2_@babel+core@7.20.12: - resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} + /@babel/plugin-transform-unicode-escapes/7.22.10_@babel+core@7.20.12: + resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.21.0 '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-class-static-block': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-private-property-in-object': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-property-regex/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-regexp-features-plugin': 7.22.9_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-regex/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-regexp-features-plugin': 7.22.9_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-sets-regex/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-regexp-features-plugin': 7.22.9_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/preset-env/7.22.10_@babel+core@7.20.12: + resolution: {integrity: sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.20.12 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2_@babel+core@7.20.12 '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.12 '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12 '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.20.12 + '@babel/plugin-syntax-import-assertions': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-syntax-import-attributes': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.20.12 '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 @@ -4800,105 +4907,120 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12 '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12 - '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-destructuring': 7.21.3_@babel+core@7.20.12 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.20.12 - '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.20.12 - '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.20.12 - '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.20.12 - '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.20.12 - '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.20.12 - '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.20.12 - '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.20.12 - '@babel/preset-modules': 0.1.5_@babel+core@7.20.12 - '@babel/types': 7.21.3 - babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.12 - babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.12 - babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.12 - core-js-compat: 3.29.1 - semver: 6.3.0 + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-arrow-functions': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-async-generator-functions': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-transform-async-to-generator': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-block-scoped-functions': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-block-scoping': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-transform-class-properties': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-class-static-block': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-classes': 7.22.6_@babel+core@7.20.12 + '@babel/plugin-transform-computed-properties': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-destructuring': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-transform-dotall-regex': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-duplicate-keys': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-dynamic-import': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-exponentiation-operator': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-export-namespace-from': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-for-of': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-function-name': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-json-strings': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-literals': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-logical-assignment-operators': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-member-expression-literals': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-modules-amd': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-modules-commonjs': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-modules-systemjs': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-modules-umd': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-new-target': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-nullish-coalescing-operator': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-numeric-separator': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-object-rest-spread': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-object-super': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-optional-catch-binding': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-optional-chaining': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-transform-parameters': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-private-methods': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-private-property-in-object': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-property-literals': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-regenerator': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-transform-reserved-words': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-shorthand-properties': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-spread': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-sticky-regex': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-template-literals': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-typeof-symbol': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-unicode-escapes': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-transform-unicode-property-regex': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-unicode-regex': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-unicode-sets-regex': 7.22.5_@babel+core@7.20.12 + '@babel/preset-modules': 0.1.6-no-external-plugins_@babel+core@7.20.12 + '@babel/types': 7.22.10 + babel-plugin-polyfill-corejs2: 0.4.5_@babel+core@7.20.12 + babel-plugin-polyfill-corejs3: 0.8.3_@babel+core@7.20.12 + babel-plugin-polyfill-regenerator: 0.5.2_@babel+core@7.20.12 + core-js-compat: 3.32.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-flow/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==} + /@babel/preset-flow/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-transform-flow-strip-types': 7.21.0_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-transform-flow-strip-types': 7.22.5_@babel+core@7.20.12 dev: true - /@babel/preset-modules/0.1.5_@babel+core@7.20.12: - resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + /@babel/preset-modules/0.1.6-no-external-plugins_@babel+core@7.20.12: + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.12 - '@babel/types': 7.21.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.22.10 esutils: 2.0.3 dev: true - /@babel/preset-react/7.18.6_@babel+core@7.20.12: - resolution: {integrity: sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==} + /@babel/preset-react/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-transform-react-display-name': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-react-jsx': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-react-pure-annotations': 7.18.6_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-transform-react-display-name': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-react-jsx': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-react-jsx-development': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-react-pure-annotations': 7.22.5_@babel+core@7.20.12 dev: true - /@babel/preset-typescript/7.21.0_@babel+core@7.20.12: - resolution: {integrity: sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==} + /@babel/preset-typescript/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-transform-typescript': 7.21.3_@babel+core@7.20.12 - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-syntax-jsx': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-modules-commonjs': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-typescript': 7.22.10_@babel+core@7.20.12 dev: true - /@babel/register/7.21.0_@babel+core@7.20.12: - resolution: {integrity: sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==} + /@babel/register/7.22.5_@babel+core@7.20.12: + resolution: {integrity: sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4907,7 +5029,7 @@ packages: clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 - pirates: 4.0.5 + pirates: 4.0.6 source-map-support: 0.5.21 dev: true @@ -4915,49 +5037,45 @@ packages: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime/7.21.0: - resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} + /@babel/runtime/7.22.10: + resolution: {integrity: sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.13.11 + regenerator-runtime: 0.14.0 - /@babel/template/7.20.7: - resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} + /@babel/template/7.22.5: + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/parser': 7.21.3 - '@babel/types': 7.21.3 + '@babel/code-frame': 7.22.10 + '@babel/parser': 7.22.10 + '@babel/types': 7.22.10 - /@babel/traverse/7.21.3: - resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==} + /@babel/traverse/7.22.10: + resolution: {integrity: sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.21.3 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.21.3 - '@babel/types': 7.21.3 + '@babel/code-frame': 7.22.10 + '@babel/generator': 7.22.10 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.22.10 + '@babel/types': 7.22.10 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types/7.21.3: - resolution: {integrity: sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==} + /@babel/types/7.22.10: + resolution: {integrity: sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.19.4 - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 to-fast-properties: 2.0.0 - /@balena/dockerignore/1.0.2: - resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} - dev: true - /@base2/pretty-print-object/1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} dev: true @@ -4965,8 +5083,8 @@ packages: /@bcoe/v8-coverage/0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - /@bufbuild/protobuf/1.2.1: - resolution: {integrity: sha512-cwwGvLGqvoaOZmoP5+i4v/rbW+rHkguvTehuZyM2p/xpmaNSdT2h3B7kHw33aiffv35t1XrYHIkdJSEkSEMJuA==} + /@bufbuild/protobuf/1.3.0: + resolution: {integrity: sha512-G372ods0pLt46yxVRsnP/e2btVPuuzArcMPFpIDeIwiGPuuglEs9y75iG0HMvZgncsj5TvbYRWqbVyOe3PLCWQ==} dev: false /@cnakazawa/watch/1.0.4: @@ -5011,7 +5129,7 @@ packages: '@types/react': '>=16' react: '>=16.3.0' dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 '@emotion/cache': 10.0.29 '@emotion/css': 10.0.27 '@emotion/serialize': 0.11.16 @@ -5033,8 +5151,8 @@ packages: resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} dev: true - /@emotion/hash/0.9.0: - resolution: {integrity: sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==} + /@emotion/hash/0.9.1: + resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} /@emotion/is-prop-valid/0.8.8: resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} @@ -5046,8 +5164,8 @@ packages: resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} dev: true - /@emotion/memoize/0.8.0: - resolution: {integrity: sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==} + /@emotion/memoize/0.8.1: + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} dev: true /@emotion/serialize/0.11.16: @@ -5060,13 +5178,13 @@ packages: csstype: 2.6.21 dev: true - /@emotion/serialize/1.1.1: - resolution: {integrity: sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==} + /@emotion/serialize/1.1.2: + resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==} dependencies: - '@emotion/hash': 0.9.0 - '@emotion/memoize': 0.8.0 - '@emotion/unitless': 0.8.0 - '@emotion/utils': 1.2.0 + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/unitless': 0.8.1 + '@emotion/utils': 1.2.1 csstype: 3.1.2 dev: true @@ -5081,7 +5199,7 @@ packages: '@types/react': '>=16' react: '>=16.3.0' dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 '@emotion/core': 10.3.1_qjwx5m6wssz3lnb35xwkc3pz6q '@emotion/is-prop-valid': 0.8.8 '@emotion/serialize': 0.11.16 @@ -5112,24 +5230,24 @@ packages: resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} dev: true - /@emotion/unitless/0.8.0: - resolution: {integrity: sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==} + /@emotion/unitless/0.8.1: + resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} dev: true /@emotion/utils/0.11.3: resolution: {integrity: sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==} dev: true - /@emotion/utils/1.2.0: - resolution: {integrity: sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==} + /@emotion/utils/1.2.1: + resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} dev: true /@emotion/weak-memoize/0.2.5: resolution: {integrity: sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==} dev: true - /@esbuild/android-arm/0.17.14: - resolution: {integrity: sha512-0CnlwnjDU8cks0yJLXfkaU/uoLyRf9VZJs4p1PskBr2AlAHeEsFEwJEo0of/Z3g+ilw5mpyDwThlxzNEIxOE4g==} + /@esbuild/android-arm/0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -5137,8 +5255,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64/0.17.14: - resolution: {integrity: sha512-eLOpPO1RvtsP71afiFTvS7tVFShJBCT0txiv/xjFBo5a7R7Gjw7X0IgIaFoLKhqXYAXhahoXm7qAmRXhY4guJg==} + /@esbuild/android-arm64/0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -5146,8 +5264,8 @@ packages: dev: true optional: true - /@esbuild/android-x64/0.17.14: - resolution: {integrity: sha512-nrfQYWBfLGfSGLvRVlt6xi63B5IbfHm3tZCdu/82zuFPQ7zez4XjmRtF/wIRYbJQ/DsZrxJdEvYFE67avYXyng==} + /@esbuild/android-x64/0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -5155,8 +5273,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64/0.17.14: - resolution: {integrity: sha512-eoSjEuDsU1ROwgBH/c+fZzuSyJUVXQTOIN9xuLs9dE/9HbV/A5IqdXHU1p2OfIMwBwOYJ9SFVGGldxeRCUJFyw==} + /@esbuild/darwin-arm64/0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -5164,8 +5282,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64/0.17.14: - resolution: {integrity: sha512-zN0U8RWfrDttdFNkHqFYZtOH8hdi22z0pFm0aIJPsNC4QQZv7je8DWCX5iA4Zx6tRhS0CCc0XC2m7wKsbWEo5g==} + /@esbuild/darwin-x64/0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -5173,8 +5291,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64/0.17.14: - resolution: {integrity: sha512-z0VcD4ibeZWVQCW1O7szaLxGsx54gcCnajEJMdYoYjLiq4g1jrP2lMq6pk71dbS5+7op/L2Aod+erw+EUr28/A==} + /@esbuild/freebsd-arm64/0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -5182,8 +5300,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64/0.17.14: - resolution: {integrity: sha512-hd9mPcxfTgJlolrPlcXkQk9BMwNBvNBsVaUe5eNUqXut6weDQH8whcNaKNF2RO8NbpT6GY8rHOK2A9y++s+ehw==} + /@esbuild/freebsd-x64/0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -5191,8 +5309,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm/0.17.14: - resolution: {integrity: sha512-BNTl+wSJ1omsH8s3TkQmIIIQHwvwJrU9u1ggb9XU2KTVM4TmthRIVyxSp2qxROJHhZuW/r8fht46/QE8hU8Qvg==} + /@esbuild/linux-arm/0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -5200,8 +5318,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64/0.17.14: - resolution: {integrity: sha512-FhAMNYOq3Iblcj9i+K0l1Fp/MHt+zBeRu/Qkf0LtrcFu3T45jcwB6A1iMsemQ42vR3GBhjNZJZTaCe3VFPbn9g==} + /@esbuild/linux-arm64/0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -5209,8 +5327,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32/0.17.14: - resolution: {integrity: sha512-91OK/lQ5y2v7AsmnFT+0EyxdPTNhov3y2CWMdizyMfxSxRqHazXdzgBKtlmkU2KYIc+9ZK3Vwp2KyXogEATYxQ==} + /@esbuild/linux-ia32/0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -5227,8 +5345,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.17.14: - resolution: {integrity: sha512-vp15H+5NR6hubNgMluqqKza85HcGJgq7t6rMH7O3Y6ApiOWPkvW2AJfNojUQimfTp6OUrACUXfR4hmpcENXoMQ==} + /@esbuild/linux-loong64/0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -5236,8 +5354,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el/0.17.14: - resolution: {integrity: sha512-90TOdFV7N+fgi6c2+GO9ochEkmm9kBAKnuD5e08GQMgMINOdOFHuYLPQ91RYVrnWwQ5683sJKuLi9l4SsbJ7Hg==} + /@esbuild/linux-mips64el/0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -5245,8 +5363,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64/0.17.14: - resolution: {integrity: sha512-NnBGeoqKkTugpBOBZZoktQQ1Yqb7aHKmHxsw43NddPB2YWLAlpb7THZIzsRsTr0Xw3nqiPxbA1H31ZMOG+VVPQ==} + /@esbuild/linux-ppc64/0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -5254,8 +5372,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64/0.17.14: - resolution: {integrity: sha512-0qdlKScLXA8MGVy21JUKvMzCYWovctuP8KKqhtE5A6IVPq4onxXhSuhwDd2g5sRCzNDlDjitc5sX31BzDoL5Fw==} + /@esbuild/linux-riscv64/0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -5263,8 +5381,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x/0.17.14: - resolution: {integrity: sha512-Hdm2Jo1yaaOro4v3+6/zJk6ygCqIZuSDJHdHaf8nVH/tfOuoEX5Riv03Ka15LmQBYJObUTNS1UdyoMk0WUn9Ww==} + /@esbuild/linux-s390x/0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -5272,8 +5390,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64/0.17.14: - resolution: {integrity: sha512-8KHF17OstlK4DuzeF/KmSgzrTWQrkWj5boluiiq7kvJCiQVzUrmSkaBvcLB2UgHpKENO2i6BthPkmUhNDaJsVw==} + /@esbuild/linux-x64/0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -5281,8 +5399,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64/0.17.14: - resolution: {integrity: sha512-nVwpqvb3yyXztxIT2+VsxJhB5GCgzPdk1n0HHSnchRAcxqKO6ghXwHhJnr0j/B+5FSyEqSxF4q03rbA2fKXtUQ==} + /@esbuild/netbsd-x64/0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -5290,8 +5408,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64/0.17.14: - resolution: {integrity: sha512-1RZ7uQQ9zcy/GSAJL1xPdN7NDdOOtNEGiJalg/MOzeakZeTrgH/DoCkbq7TaPDiPhWqnDF+4bnydxRqQD7il6g==} + /@esbuild/openbsd-x64/0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -5299,8 +5417,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64/0.17.14: - resolution: {integrity: sha512-nqMjDsFwv7vp7msrwWRysnM38Sd44PKmW8EzV01YzDBTcTWUpczQg6mGao9VLicXSgW/iookNK6AxeogNVNDZA==} + /@esbuild/sunos-x64/0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -5308,8 +5426,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64/0.17.14: - resolution: {integrity: sha512-xrD0mccTKRBBIotrITV7WVQAwNJ5+1va6L0H9zN92v2yEdjfAN7864cUaZwJS7JPEs53bDTzKFbfqVlG2HhyKQ==} + /@esbuild/win32-arm64/0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -5317,8 +5435,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32/0.17.14: - resolution: {integrity: sha512-nXpkz9bbJrLLyUTYtRotSS3t5b+FOuljg8LgLdINWFs3FfqZMtbnBCZFUmBzQPyxqU87F8Av+3Nco/M3hEcu1w==} + /@esbuild/win32-ia32/0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -5326,8 +5444,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64/0.17.14: - resolution: {integrity: sha512-gPQmsi2DKTaEgG14hc3CHXHp62k8g6qr0Pas+I4lUxRMugGSATh/Bi8Dgusoz9IQ0IfdrvLpco6kujEIBoaogA==} + /@esbuild/win32-x64/0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -5342,17 +5460,17 @@ packages: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: eslint: 7.30.0 - eslint-visitor-keys: 3.4.0 + eslint-visitor-keys: 3.4.2 dev: true - /@eslint-community/eslint-utils/4.4.0_eslint@8.36.0: + /@eslint-community/eslint-utils/4.4.0_eslint@8.46.0: resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.36.0 - eslint-visitor-keys: 3.4.0 + eslint: 8.46.0 + eslint-visitor-keys: 3.4.2 dev: true /@eslint-community/eslint-utils/4.4.0_eslint@8.7.0: @@ -5362,11 +5480,11 @@ packages: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: eslint: 8.7.0 - eslint-visitor-keys: 3.4.0 + eslint-visitor-keys: 3.4.2 dev: false - /@eslint-community/regexpp/4.4.1: - resolution: {integrity: sha512-BISJ6ZE4xQsuL/FmsyRaiffpq977bMlsKfGHTQrOGFErfByxIe6iZTxPf/00Zon9b9a7iUykfQwejN3s2ZW/Bw==} + /@eslint-community/regexpp/4.6.2: + resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} /@eslint/eslintrc/0.4.3: @@ -5392,7 +5510,7 @@ packages: dependencies: ajv: 6.12.6 debug: 4.3.4 - espree: 9.5.0 + espree: 9.6.1 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -5402,13 +5520,13 @@ packages: transitivePeerDependencies: - supports-color - /@eslint/eslintrc/2.0.1: - resolution: {integrity: sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==} + /@eslint/eslintrc/2.1.1: + resolution: {integrity: sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 - espree: 9.5.0 + espree: 9.6.1 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -5419,8 +5537,8 @@ packages: - supports-color dev: true - /@eslint/js/8.36.0: - resolution: {integrity: sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==} + /@eslint/js/8.46.0: + resolution: {integrity: sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -5439,62 +5557,69 @@ packages: resolution: {integrity: sha512-ty7wnUd/GeSqKTC2Jozsl5xGbnxUnEFC0On2/zPv/8ixywipQmVZwuWvNGnBoitJ2wixwVqofwXNua8j6Y62lQ==} dependencies: '@fastify/forwarded': 1.0.0 - ipaddr.js: 2.0.1 + ipaddr.js: 2.1.0 dev: false - /@floating-ui/core/1.3.1: - resolution: {integrity: sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==} + /@floating-ui/core/1.4.1: + resolution: {integrity: sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==} + dependencies: + '@floating-ui/utils': 0.1.1 dev: false - /@floating-ui/dom/1.4.5: - resolution: {integrity: sha512-96KnRWkRnuBSSFbj0sFGwwOUd8EkiecINVl0O9wiZlZ64EkpyAOG3Xc2vKKNJmru0Z7RqWNymA+6b8OZqjgyyw==} + /@floating-ui/dom/1.5.1: + resolution: {integrity: sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==} dependencies: - '@floating-ui/core': 1.3.1 + '@floating-ui/core': 1.4.1 + '@floating-ui/utils': 0.1.1 + dev: false + + /@floating-ui/utils/0.1.1: + resolution: {integrity: sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==} dev: false - /@fluentui/date-time-utilities/8.5.6: - resolution: {integrity: sha512-BS5EgnB5GFLg4p84GWqCjt6Pbnjnz0RZA94FAfVOYoqHcnjLURZ1BkQuorGdwS7ipaE4AVgNaQsPq90PsAfuXw==} + /@fluentui/date-time-utilities/8.5.13: + resolution: {integrity: sha512-X3clbPKh0URkDj21QoARw6SNec7dWg7Gt7SkTlkVYFzmZUdC4ZIrYk3n36xKe3U1wcGp26EVmKjhAhB262ugpw==} dependencies: - '@fluentui/set-version': 8.2.6 + '@fluentui/set-version': 8.2.11 tslib: 2.3.1 dev: false - /@fluentui/dom-utilities/2.2.6: - resolution: {integrity: sha512-yJOEiFj/TfR307hzZn15kNocC0P3j2BltrAJznhgXywMKJhIczATFTfj2len7YMHxLttnR5yDz/oYpyBLSk4rw==} + /@fluentui/dom-utilities/2.2.11: + resolution: {integrity: sha512-2tXfg7/9PXu9nfU72/P3o3waHEFEQtHUfQbVexUaYqNNAxMj6sOfsqpUx4vd5nPgO+grSWrl+spqlLN2yej51w==} dependencies: - '@fluentui/set-version': 8.2.6 + '@fluentui/set-version': 8.2.11 tslib: 2.3.1 dev: false - /@fluentui/font-icons-mdl2/8.5.13_qjwx5m6wssz3lnb35xwkc3pz6q: - resolution: {integrity: sha512-3JjYN7lJZefpBdNPoQRFOiNpyVw+BOGynMkmYglnGjEWlg3uodawNi9lnKBODXCy31OHh900n9pAPFyNpdCbBg==} + /@fluentui/font-icons-mdl2/8.5.23_qjwx5m6wssz3lnb35xwkc3pz6q: + resolution: {integrity: sha512-jZjUtfQm9/84jX34zhwwsoZME86xXXgKAgBYuMvRStKzXGdZcd7YSOlmuT8lbISmtFL/SWwUGOEal1nLCUNeNA==} dependencies: - '@fluentui/set-version': 8.2.6 - '@fluentui/style-utilities': 8.9.6_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/utilities': 8.13.9_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/set-version': 8.2.11 + '@fluentui/style-utilities': 8.9.16_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/utilities': 8.13.18_qjwx5m6wssz3lnb35xwkc3pz6q tslib: 2.3.1 transitivePeerDependencies: - '@types/react' - react dev: false - /@fluentui/foundation-legacy/8.2.33_qjwx5m6wssz3lnb35xwkc3pz6q: - resolution: {integrity: sha512-Z1Nl1hmyICAjTwaU2fvIGenzczRfyf0P3oaRniwac4gAa5MidE6QlpAkEcwCka2QEG/qUjcx/cMacDGLN/Dd0A==} + /@fluentui/foundation-legacy/8.2.43_qjwx5m6wssz3lnb35xwkc3pz6q: + resolution: {integrity: sha512-rXr71KxNcWDH2LmTsFZbP75p8HssLlVLaFAqEdLE+sKf/LNKmqkDVTNhDbHZxzxy0QnguI4aNHcyGhMZUH3MPA==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/merge-styles': 8.5.7 - '@fluentui/set-version': 8.2.6 - '@fluentui/style-utilities': 8.9.6_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/utilities': 8.13.9_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/merge-styles': 8.5.12 + '@fluentui/set-version': 8.2.11 + '@fluentui/style-utilities': 8.9.16_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/utilities': 8.13.18_qjwx5m6wssz3lnb35xwkc3pz6q '@types/react': 16.14.23 react: 16.13.1 tslib: 2.3.1 dev: false - /@fluentui/keyboard-key/0.4.6: - resolution: {integrity: sha512-p59zLGs3ucDPc7ZVaPxVCaQsfNwERDt3n+yLE0w/FFBlPWJcOSkiZHIieMhqk5ur5YGzbgs9WppPrtxNga23fw==} + /@fluentui/keyboard-key/0.4.11: + resolution: {integrity: sha512-TVB/EloWado9AVp1niChgcdDOQAHGP5B30Dinmtfe7zi8OnstwPoxwFP6dHJDdpLQ6ZEUTaEHViSzvewl7Chag==} dependencies: tslib: 2.3.1 dev: false @@ -5505,10 +5630,10 @@ packages: '@swc/helpers': 0.4.14 dev: false - /@fluentui/merge-styles/8.5.7: - resolution: {integrity: sha512-t/mOQTigj51n7z6VPZ1nlb9getkzoLVhN0aUbOJUSD5qvu0gZqSBh7Y9xIP6QeYWF4q6wcZhEggo8HOgYqaWQw==} + /@fluentui/merge-styles/8.5.12: + resolution: {integrity: sha512-ZnUo0YuMP7AYi68dkknFqVxopIAgbrUnqR/MZlemmRvBYyy1SMj1WQeHcoiLFA8mF8YKn7B+jxQgJbN2bfcrRw==} dependencies: - '@fluentui/set-version': 8.2.6 + '@fluentui/set-version': 8.2.11 tslib: 2.3.1 dev: false @@ -5518,8 +5643,8 @@ packages: '@swc/helpers': 0.4.14 dev: false - /@fluentui/react-accordion/9.1.25_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-iyMPG/b8vR74txbjLBlK97YyJAlKFD+DhF0dmG0c2Kyc0S983KVznRgEQm9kaMmAc/TEv4yT1+m5a68KqK+rLg==} + /@fluentui/react-accordion/9.3.0_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-8z235o4qxfwg2ed5Z+wdeGJf8gvMkE4Sbfl3UWQHwphXsvhFStQUAYF1xj74btXcVNZwFeVjUdNpPkHWZHbpaQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -5527,15 +5652,15 @@ packages: react-dom: '>=16.8.0 <19.0.0' scheduler: ^0.19.0 || ^0.20.0 dependencies: - '@fluentui/react-aria': 9.3.27_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-context-selector': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-aria': 9.3.28_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-context-selector': 9.1.27_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -5544,22 +5669,22 @@ packages: scheduler: 0.19.0 dev: false - /@fluentui/react-alert/9.0.0-beta.60_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-YguPYqBW0NFD2XVX6uZebk/lX9j+ktAfB/nSra5TTMm7wU/cyAR0eLRk1YefkXmIxyLmkkO947947udcXwtROA==} + /@fluentui/react-alert/9.0.0-beta.63_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-QGyD3fMCJjPVBPHaTHlm35k/mGBPo34LsEXQh2mjns02Cex7Tj6naCE8g9DOYvuaEOXQxxLJT2SGkqCgAsCt4g==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-avatar': 9.5.14_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-button': 9.3.25_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-avatar': 9.5.17_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-button': 9.3.27_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -5569,8 +5694,8 @@ packages: - scheduler dev: false - /@fluentui/react-aria/9.3.27_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-cp+vB6E4X25DmE0RSmsnjAvmeHVAR3h+112z42ZuOF8/Rl7s7Pw8rGqMEGdIslJ29cx1Ka/raHTBn8h+OQB3Mw==} + /@fluentui/react-aria/9.3.28_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-D9Bfql9AL5ehNvjYDrNW6vUccGvGI3CYV1dO814OO77mZ0BAe6rsDzk0pT46i2rFKt083qPcq5zw8K9kd7cQfw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -5578,7 +5703,7 @@ packages: react-dom: '>=16.8.0 <19.0.0' dependencies: '@fluentui/keyboard-keys': 9.0.3 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -5586,8 +5711,8 @@ packages: react-dom: 16.13.1_react@16.13.1 dev: false - /@fluentui/react-avatar/9.5.14_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-g7zOE3xkkWCPINnWUzruota9eqarvzVMn6e3LGksmivexjGGdq6c+W4oGbW1IWJXDYb+ltef5GeS6r00mOE2PQ==} + /@fluentui/react-avatar/9.5.17_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-LY6jx+AHucluYmNT/4O9soeixKjkwHq26oivoCE4kP1DcZbshqvV7QHOIvWNhwntaxqEgYZV4uDw9Ubsl5O+EQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -5595,17 +5720,17 @@ packages: react-dom: '>=16.8.0 <19.0.0' scheduler: ^0.19.0 || ^0.20.0 dependencies: - '@fluentui/react-badge': 9.1.22_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-context-selector': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-popover': 9.7.8_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-tooltip': 9.2.25_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-badge': 9.1.24_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-context-selector': 9.1.27_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-popover': 9.7.11_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-tooltip': 9.2.28_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -5614,20 +5739,20 @@ packages: scheduler: 0.19.0 dev: false - /@fluentui/react-badge/9.1.22_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-uEFkNDpqWMwz2ymkJ38pz6N476Lz8rQ/d8tTy/LPttCOzDiZtL1qdqkRY3N7C2SsnZyX8/rap5zxVBqf/2XGGw==} + /@fluentui/react-badge/9.1.24_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-oiSG7rsnKx/Qzog5s+CVai73dKc0xGp/0DjFlEy5hoUkpzyrKy2tYFqyG9tSn9knB6e2YWb6cgBft3zcGVn1IA==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -5635,8 +5760,8 @@ packages: react-dom: 16.13.1_react@16.13.1 dev: false - /@fluentui/react-button/9.3.25_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-i9ZM2hEUduZak3DcxCot1OYaN6h4OcH3W98nx4qkMMRu76KLssfsrR6z5C7xQ9KTNNTkVG5Un86ko28HYNxuhQ==} + /@fluentui/react-button/9.3.27_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-8wcXJYBRU/PZn9xAHacANwAqwGpKWT0z2LPbVvCx/hP3obxJyGx4DX1w4nXGTc6PxOJuASRyjc3BjRKUnAyFog==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -5644,14 +5769,14 @@ packages: react-dom: '>=16.8.0 <19.0.0' dependencies: '@fluentui/keyboard-keys': 9.0.3 - '@fluentui/react-aria': 9.3.27_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-aria': 9.3.28_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -5659,8 +5784,8 @@ packages: react-dom: 16.13.1_react@16.13.1 dev: false - /@fluentui/react-card/9.0.24_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-O6XGs9ex2bFiTKIyp7b5P5SMaf0IIuBg+vJf0nTegGGX6AmOGqihLnrJ6ldLgqHdLWRoUR6+mg+6CVWuRaTEig==} + /@fluentui/react-card/9.0.26_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-2kvdxJDPfYGexkuJ2T/tevQIKBIEEciyUpdAHW20JBLnfKN9Pu6gCTLaXi7E8vhlYpAZ6K8QS9mFUvuc8tXU4Q==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -5668,11 +5793,11 @@ packages: react-dom: '>=16.8.0 <19.0.0' dependencies: '@fluentui/keyboard-keys': 9.0.3 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -5680,23 +5805,23 @@ packages: react-dom: 16.13.1_react@16.13.1 dev: false - /@fluentui/react-checkbox/9.1.26_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-54ULGOANGh5pF8ADUUq6TNceZtejv21GXXO8x3pYCOisVAlxiO875K5ekneeufBl3pDkhuHLyd5c2C1l9e+0uQ==} + /@fluentui/react-checkbox/9.1.28_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-0uYqEI8sFZZ6DjYtVXUSL6+hDCU67zeHC7R6X/1YuEt1VTAeTrFLbvbjLmxvbMxKJ4bTsxyHwWlwFzTizSTWRw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-field': 9.1.13_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-label': 9.1.21_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-field': 9.1.15_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-label': 9.1.23_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -5706,8 +5831,8 @@ packages: - scheduler dev: false - /@fluentui/react-combobox/9.4.9_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-icsYF2X/Ea/Dai0jdSloWHynA2MNcF/VTVkKD7eHKG9VizmvFpN2duQR4vou3ugSVFDJJqrj9ZU2EbncLpzGpQ==} + /@fluentui/react-combobox/9.5.1_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-beTh2hWrA1RlYS+qk/fjopX25MiMJJaC2m02EsDm3Ji0+59rtZA7Q/cSzD+DhtiYLbfYX0FRG+DNLJZcmWcqmQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -5716,16 +5841,16 @@ packages: scheduler: ^0.19.0 || ^0.20.0 dependencies: '@fluentui/keyboard-keys': 9.0.3 - '@fluentui/react-context-selector': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-field': 9.1.13_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-portal': 9.3.3_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-positioning': 9.8.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-context-selector': 9.1.27_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-field': 9.1.15_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-portal': 9.3.5_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-positioning': 9.9.2_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -5734,8 +5859,8 @@ packages: scheduler: 0.19.0 dev: false - /@fluentui/react-components/9.27.0_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-E2hBBR9UKc3+wjUNrL2OoNiYZl0MZuRfO0UiroqLswHPEb2XlCUrsZVC0nwbNwPwLFqZS/9lKPpVnUTY1rmIzg==} + /@fluentui/react-components/9.27.4_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-nVujr+ABELXF+SzkIE+17qmUkgpN2jqYSAoqKld+in6IYi5p/9waSmQvEUvPrXTe7B7Yc6vennx7SDZkfIbDiA==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -5743,52 +5868,52 @@ packages: react-dom: '>=16.8.0 <19.0.0' scheduler: ^0.19.0 || ^0.20.0 dependencies: - '@fluentui/react-accordion': 9.1.25_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-alert': 9.0.0-beta.60_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-avatar': 9.5.14_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-badge': 9.1.22_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-button': 9.3.25_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-card': 9.0.24_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-checkbox': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-combobox': 9.4.9_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-dialog': 9.5.18_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-divider': 9.2.21_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-drawer': 9.0.0-beta.10_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-field': 9.1.13_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-image': 9.1.18_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-infobutton': 9.0.0-beta.44_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-input': 9.4.23_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-label': 9.1.21_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-link': 9.1.4_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-menu': 9.11.1_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-overflow': 9.0.24_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-persona': 9.2.24_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-popover': 9.7.8_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-portal': 9.3.3_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-positioning': 9.8.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-progress': 9.1.23_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-provider': 9.7.11_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-radio': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-select': 9.1.23_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-skeleton': 9.0.11_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-slider': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-spinbutton': 9.2.23_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-spinner': 9.3.1_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-switch': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-table': 9.7.0_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-tabs': 9.3.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-text': 9.3.18_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-textarea': 9.3.23_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-toast': 9.0.5_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-toolbar': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-tooltip': 9.2.25_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-tree': 9.0.0-beta.27_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-virtualizer': 9.0.0-alpha.29_tlqvpdqnq63ssdllbmshthdmo4 - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-accordion': 9.3.0_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-alert': 9.0.0-beta.63_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-avatar': 9.5.17_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-badge': 9.1.24_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-button': 9.3.27_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-card': 9.0.26_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-checkbox': 9.1.28_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-combobox': 9.5.1_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-dialog': 9.5.20_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-divider': 9.2.23_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-drawer': 9.0.0-beta.12_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-field': 9.1.15_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-image': 9.1.20_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-infobutton': 9.0.0-beta.47_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-input': 9.4.25_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-label': 9.1.23_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-link': 9.1.6_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-menu': 9.12.3_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-overflow': 9.0.25_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-persona': 9.2.27_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-popover': 9.7.11_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-portal': 9.3.5_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-positioning': 9.9.2_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-progress': 9.1.25_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-provider': 9.7.14_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-radio': 9.1.28_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-select': 9.1.25_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-skeleton': 9.0.13_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-slider': 9.1.28_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-spinbutton': 9.2.25_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-spinner': 9.3.3_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-switch': 9.1.28_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-table': 9.7.3_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-tabs': 9.3.28_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-text': 9.3.20_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-textarea': 9.3.25_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-toast': 9.1.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-toolbar': 9.1.28_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-tooltip': 9.2.28_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-tree': 9.0.0-beta.30_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-virtualizer': 9.0.0-alpha.30_tlqvpdqnq63ssdllbmshthdmo4 + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -5797,8 +5922,8 @@ packages: scheduler: 0.19.0 dev: false - /@fluentui/react-context-selector/9.1.26_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-9Pbo2GpnkZH7eoVvhCppnENmAI8Z8Asb6GC9YySMoLbM2NPkqdCcOwyKEnIc/J9LQoyPkFuSL5Msf7Y84coTiw==} + /@fluentui/react-context-selector/9.1.27_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-l6YypPlNQRtGkavDJTXqdZbQCpS69L7/1mx8GU5aqzcWYyfUyfP4Y0lPpgXjlm1dvHnz/5k6gprEB0dWkfCpxA==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -5806,7 +5931,7 @@ packages: react-dom: '>=16.8.0 <19.0.0' scheduler: ^0.19.0 || ^0.20.0 dependencies: - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -5815,8 +5940,8 @@ packages: scheduler: 0.19.0 dev: false - /@fluentui/react-dialog/9.5.18_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-+w/kLdCXy//tnUkUlSBgv38/ufBmVyWASTSLBRdtop1Nx0Dwwl78UyJr+ljEASmGXJqJziT2p7sVY610vqPoVQ==} + /@fluentui/react-dialog/9.5.20_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-n/lZSyoUvinOXmwOrMkugNGVuQ3ehJTPj4ZJ4PN87SKkDatHpl5inaYzoUfdRqH0KNlxJEi10uhJThh1mgk6ZQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -5824,16 +5949,16 @@ packages: react-dom: '>=16.8.0 <19.0.0' dependencies: '@fluentui/keyboard-keys': 9.0.3 - '@fluentui/react-aria': 9.3.27_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-context-selector': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-portal': 9.3.3_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-aria': 9.3.28_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-context-selector': 9.1.27_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-portal': 9.3.5_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -5843,19 +5968,19 @@ packages: - scheduler dev: false - /@fluentui/react-divider/9.2.21_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-SUDOqDnac6YZTDVToNrBCmuOgDil1zGAxm/1wuVbONfJtPWI5egfi6p+tUYmxRmnPsUFo66OWn4TjaOVeDB6Pw==} + /@fluentui/react-divider/9.2.23_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-MHmlmlbtdbd1zwuMrbwIp9ULhGmBW9bVvak/W0RkdJFj7aSsbPZ5kovnHwrnkRU/nZl4WQ+giXOkkEypBVqOig==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -5863,20 +5988,20 @@ packages: react-dom: 16.13.1_react@16.13.1 dev: false - /@fluentui/react-drawer/9.0.0-beta.10_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-l2id1h29q65AF18x6v0Nq1GCDEWZ8G7ZmI9aHehUaqGmME5b+q/2SH3WavHc3E0ab//cWXTcTiZ8Vm2VXze7ow==} + /@fluentui/react-drawer/9.0.0-beta.12_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-pKw2xOwxo4tSPptMwL6vOQq702SWVdFGrXUHR4DWDqFRstUFtbsV6aWJg66T0l+P3AwWJ1rtu0+LF/LBgd7/hw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-dialog': 9.5.18_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-dialog': 9.5.20_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -5886,21 +6011,21 @@ packages: - scheduler dev: false - /@fluentui/react-field/9.1.13_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-I9aSHa+GlIE+URwgdMkXyNHonmLCCEkG/6tQTeuZc5mqXT6w81mSidx/QrTDlkqNwfBNUrDUnB3SHsUnKWfjgQ==} + /@fluentui/react-field/9.1.15_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-0a5Q/caBuHnmxXt5NmpiJC0lop0qYbzAPe5UD1WBOfhfMRWGYS3wkXwkykybIzSx5xrQ8SkWDsTEJFKzhHyiUQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-context-selector': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-label': 9.1.21_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-context-selector': 9.1.27_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-label': 9.1.23_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -5910,59 +6035,59 @@ packages: - scheduler dev: false - /@fluentui/react-focus/8.8.19_qjwx5m6wssz3lnb35xwkc3pz6q: - resolution: {integrity: sha512-Gswx0aOazRVFJONmcsj5o6SI/ebWQeZyBAlOsdFeSUuK38aRlVy4DbwVQ+5tQ675u3wmf/+Ln2a0xCixOAVvWg==} + /@fluentui/react-focus/8.8.30_qjwx5m6wssz3lnb35xwkc3pz6q: + resolution: {integrity: sha512-dKQQtNTZbQOE+u/Tmh7AbtJPSpzQNI0L8o55a22y4U7s33rizUd++CIiToXsB+bPvlotcmpZswZQ8V06zM4KIw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/keyboard-key': 0.4.6 - '@fluentui/merge-styles': 8.5.7 - '@fluentui/set-version': 8.2.6 - '@fluentui/style-utilities': 8.9.6_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/utilities': 8.13.9_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/keyboard-key': 0.4.11 + '@fluentui/merge-styles': 8.5.12 + '@fluentui/set-version': 8.2.11 + '@fluentui/style-utilities': 8.9.16_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/utilities': 8.13.18_qjwx5m6wssz3lnb35xwkc3pz6q '@types/react': 16.14.23 react: 16.13.1 tslib: 2.3.1 dev: false - /@fluentui/react-hooks/8.6.20_qjwx5m6wssz3lnb35xwkc3pz6q: - resolution: {integrity: sha512-vb90tgc0nGWvahE2zuPPtEpknIfAA0ABq7/ro7+CAcKgDx2sleGZKRGdzKXdYS026OxjQ8TN2K7/D3OI1v4Rjg==} + /@fluentui/react-hooks/8.6.29_qjwx5m6wssz3lnb35xwkc3pz6q: + resolution: {integrity: sha512-MeVevmGJtrYxdhoarrkVWE0Hs4XdzOc9A3tiOjMBIcwOvoOYOAoOELoHK/wuulPVwUn2R9Y+7JpJ6oCe4ImdJw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-window-provider': 2.2.9_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/set-version': 8.2.6 - '@fluentui/utilities': 8.13.9_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-window-provider': 2.2.15_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/set-version': 8.2.11 + '@fluentui/utilities': 8.13.18_qjwx5m6wssz3lnb35xwkc3pz6q '@types/react': 16.14.23 react: 16.13.1 tslib: 2.3.1 dev: false - /@fluentui/react-icons/2.0.208_react@16.13.1: - resolution: {integrity: sha512-NsohaKa/UN5cvbuv/fOqA1Uk7y6osB3tv07qbg9NOBo2qX0vHiERLA7kjVUaGFe7owtmIglxAqlMDyVq4kuTrQ==} + /@fluentui/react-icons/2.0.209_react@16.13.1: + resolution: {integrity: sha512-9xMFMZBai0cPd9qaipDZxAZlMyt/WxD/sJnq5OT2HaitWPf5A37e423vjLaPyNaghtgiPDdfKlC5eRRx1MfoDw==} peerDependencies: react: '>=16.8.0 <19.0.0' dependencies: - '@griffel/react': 1.5.12_react@16.13.1 + '@griffel/react': 1.5.14_react@16.13.1 react: 16.13.1 tslib: 2.3.1 dev: false - /@fluentui/react-image/9.1.18_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-JF2OXrdd2MBcZXyRCtlSz4tedNGmGQ6Z+Abl+rXxfE0nxgjAFXYXXbGspjQFrYL4W5d02iA1e1SrL5JSsEWN1Q==} + /@fluentui/react-image/9.1.20_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-F1cK42RgN0iK6uQxrErm8NS/9NdT+nUN/+eLDJSZD0zstR4xAcQQ5PAOGrttpxQaZPyh1NO7mb9oLlcBVptSDw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -5970,22 +6095,22 @@ packages: react-dom: 16.13.1_react@16.13.1 dev: false - /@fluentui/react-infobutton/9.0.0-beta.44_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-DS04oym7s93hNCMOgbWHat8w3dqMiemQT5GZX9z0gmYvZJhVhw+BfN3nLg5MXcXq6jmwtbAStPja+40FLlvebw==} + /@fluentui/react-infobutton/9.0.0-beta.47_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-aK/DLZO6/pzvGIbqJLCHIR5ram01Dpuai+C4M77bxKYO+t6iWb1JNZhfgXmDZRuPxhfEWA2J0pwQmHiVK1Bd9g==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-label': 9.1.21_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-popover': 9.7.8_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-label': 9.1.23_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-popover': 9.7.11_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -5995,20 +6120,20 @@ packages: - scheduler dev: false - /@fluentui/react-input/9.4.23_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-v6XegtJ0UGRUUHhfveOnse4pssSvyimTbewVexHKLai9YE86Gvi9mm2nFi9grGDVS7cAk+qY1fyOrCwtFLP8Ag==} + /@fluentui/react-input/9.4.25_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-TCMQZGOLwk219239eOxEvVYMPAztmAg+BqNKhZA6wtqtBt5jcXPCTCdRZn5ZRaSREfze3TYOkqIoXowV/gTO1w==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-field': 9.1.13_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-field': 9.1.15_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6018,31 +6143,31 @@ packages: - scheduler dev: false - /@fluentui/react-jsx-runtime/9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q: - resolution: {integrity: sha512-902KIzK55KWbJ+2ArMIXUR2OJFnfunwOpTSyDo1N3c3ZMxWeLkHZahyYVmAnXCwQDgnwyR0K8HBjl24gKtNqAw==} + /@fluentui/react-jsx-runtime/9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q: + resolution: {integrity: sha512-/teGLjOPs2SNatpFpVDk38HyQO6X97Y9/n8eNwFq8+9Sq+hqb4DcnQudQMoOs1TG2m6t+zQIw1n5a0/AfFaeFA==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q '@swc/helpers': 0.4.14 '@types/react': 16.14.23 react: 16.13.1 dev: false - /@fluentui/react-label/9.1.21_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-7kr+6IxjOkVRBopMCiuqPQS/bjNuyyIp0w1Dthu8EsQgLkj/fa7Y2A1Ea7Kkmqbsgq+J51U9Rjzd3GKsLxKn0A==} + /@fluentui/react-label/9.1.23_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-NCYcVqJLlKN2DP3nsquitg7e5ycRMG20hqbmDOCOelyRfjjX83BtHteeZv5GYbZXp4ERdWvAb2FwQwtSW9G1Xw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6050,8 +6175,8 @@ packages: react-dom: 16.13.1_react@16.13.1 dev: false - /@fluentui/react-link/9.1.4_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-u2JEQlvJsMiAueHcNkYx3nlwfdO5CtYV7TEooSppjQqa6REKfsaVjJoo/wUfjnPjyy+RGszME+6fL4+qDkUrEg==} + /@fluentui/react-link/9.1.6_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-n5aafZlphaTDxp0786xJOQi5OEls8w9ncdsi7QrFx+d7wdTtb8GQDsLZ4V3y7jR4CDZJxN4IfMnxJB6eQmm5GA==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -6059,12 +6184,12 @@ packages: react-dom: '>=16.8.0 <19.0.0' dependencies: '@fluentui/keyboard-keys': 9.0.3 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6072,8 +6197,8 @@ packages: react-dom: 16.13.1_react@16.13.1 dev: false - /@fluentui/react-menu/9.11.1_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-WET1FoFn2efEi+dZVP4GTM2cJB5Wp5N7r5HtH8e+2Dd1Ep0jriu24OqVIm2E8BaQtZFbT6BjVvpGsxGcen9vMg==} + /@fluentui/react-menu/9.12.3_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-UcC7d0+ZfIEfUsPkWTyQ3wXF6z+hUe73y+QReD3nlvf9SL/JHKA0r+41OZxStqSZA7lITP/Tju3YSmXTuIoK6Q==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -6082,17 +6207,17 @@ packages: scheduler: ^0.19.0 || ^0.20.0 dependencies: '@fluentui/keyboard-keys': 9.0.3 - '@fluentui/react-aria': 9.3.27_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-context-selector': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-portal': 9.3.3_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-positioning': 9.8.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-aria': 9.3.28_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-context-selector': 9.1.27_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-portal': 9.3.5_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-positioning': 9.9.2_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6101,8 +6226,8 @@ packages: scheduler: 0.19.0 dev: false - /@fluentui/react-overflow/9.0.24_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-mNG1iyvZpDS2sML1F8HrMgE2phtMsqRxoSy/igE27ZnTodKr8ihBSTuwOKGiguxw0fkhx4D02A79drx2drp5nQ==} + /@fluentui/react-overflow/9.0.25_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-Q/EctUJ9cqWBq8H9KYFFOjC0mHajiC/EmcyxcoFPkY8XGVGbD87aCz1Hx7cDv7nCDw+/zSCaMBWO7WvQ8AIL9Q==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -6111,10 +6236,10 @@ packages: scheduler: ^0.19.0 || ^0.20.0 dependencies: '@fluentui/priority-overflow': 9.1.2 - '@fluentui/react-context-selector': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-context-selector': 9.1.27_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6123,21 +6248,21 @@ packages: scheduler: 0.19.0 dev: false - /@fluentui/react-persona/9.2.24_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-+oNxmQ1XQGz9tdCz+aJch8xrPqrUumBGCOvsOT1j5DF1GwPiR23G8FKte5yDsRkZ51kwghiivNzFIMUKV+siKA==} + /@fluentui/react-persona/9.2.27_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-XpmzTnqBRoJ82cdi11yzwd6ABCc9V1uSCFj7I03hftVUOB0BXH3zDYOcjNfrD5jPDbpzFxXsK4QnzwwaKBOQUQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-avatar': 9.5.14_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-badge': 9.1.22_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-avatar': 9.5.17_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-badge': 9.1.24_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6147,8 +6272,8 @@ packages: - scheduler dev: false - /@fluentui/react-popover/9.7.8_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-Wyqui6ZBTGqmtAkULWA4y6Qhts2JgINjx6RfLAEPgYCOkpJ4ZH0AllWTCXE5Tg8PhQnaQ5b6xUeJWZkOBGr0tA==} + /@fluentui/react-popover/9.7.11_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-lvnTMJwuIR8heAxSlqesrWmynK3bYhwxCRXTTsCxkLyVx4WMzWlhDC2f6SljwV7yr7i9BrG02v5TkqjlBE2OFQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -6157,16 +6282,16 @@ packages: scheduler: ^0.19.0 || ^0.20.0 dependencies: '@fluentui/keyboard-keys': 9.0.3 - '@fluentui/react-aria': 9.3.27_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-context-selector': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-portal': 9.3.3_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-positioning': 9.8.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-aria': 9.3.28_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-context-selector': 9.1.27_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-portal': 9.3.5_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-positioning': 9.9.2_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6175,8 +6300,8 @@ packages: scheduler: 0.19.0 dev: false - /@fluentui/react-portal-compat-context/9.0.5_qjwx5m6wssz3lnb35xwkc3pz6q: - resolution: {integrity: sha512-vgGvv74jPi/salcxv37TCm06lOFn44CfNLX5wZw5HQIe9LYGUw/J7vkaniwNIzmQZsn62Y+fVxDS6Sq5S823tA==} + /@fluentui/react-portal-compat-context/9.0.6_qjwx5m6wssz3lnb35xwkc3pz6q: + resolution: {integrity: sha512-HUt0/YXKRB4chtzlGbZ+7y7FHFyqaI0CeMFAe/QBXVOiOwA01QOr2j4Uky+30vupspIt6mjodLanuw1jMybmqQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' @@ -6186,18 +6311,18 @@ packages: react: 16.13.1 dev: false - /@fluentui/react-portal/9.3.3_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-zjYr+TI0cXVu0Dv1pfebBzlNVLoaemdtjsPRe0SoXXNtK0hC97cMI5UsNHSdPKBus/WtxRerYvuXJntf+eRZqw==} + /@fluentui/react-portal/9.3.5_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-BEflpuJne2RildQY2e5HrjBtMpcmsg+FKGQdkcq2Hav0CL2B++B6Wnbw+r8Zax2Hw97KuoIDQ+aJ0iQMJkYROQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6206,19 +6331,19 @@ packages: use-disposable: 1.0.1_tlqvpdqnq63ssdllbmshthdmo4 dev: false - /@fluentui/react-positioning/9.8.0_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-2eXai4GdLfbKj4AmCPBS1T9PaaqHkfboFMkCI+zOujGSg7FgIz4U3XzSowms9b9g5bKpUDrEExzd396ZMG8Vjw==} + /@fluentui/react-positioning/9.9.2_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-s5syo2kaM6eKdmRH0I9IhklOy2I6gQKZ/Vy2KnDJHBu0Wz/jQmgswFden+lnF3JOsTOj86V6O4TkI3FGFr5NZw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@floating-ui/dom': 1.4.5 - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@floating-ui/dom': 1.5.1 + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6226,20 +6351,20 @@ packages: react-dom: 16.13.1_react@16.13.1 dev: false - /@fluentui/react-progress/9.1.23_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-cTMJUK5d1HJIgLwQZDcwrKUg5xzU1CKgUAMH8MxlyOl7rBeVgPxQCMaGrnLIbqlqXXtDxW3r0GI25yWBaGvGIg==} + /@fluentui/react-progress/9.1.25_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-RicajpUXy1vYPn6uHh3+JCV1KLCvKXof1hTeRRjbZHKyjVUBXjSpNTqQ5Zzh0LvHobu2AyT7Fked6/4pFmQfHA==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-field': 9.1.13_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-field': 9.1.15_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6249,21 +6374,21 @@ packages: - scheduler dev: false - /@fluentui/react-provider/9.7.11_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-BPe/JDz67XX7LByO9TjQulAIDpBdm05MQyxfhrT1ujuD9rNF+veC87Y7HBGI7Ry6mtlb3zFe3XIxO5hezB1paw==} + /@fluentui/react-provider/9.7.14_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-F7uWn5TM4NA/UkXMaDRfXnRKnHfVuHG9nM9BQj8ht/R8odcJsfgtI0yIiQkZO9oBreJcokjOkbAXwETGq2Rwhg==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/core': 1.13.1 - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/core': 1.14.1 + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6271,8 +6396,8 @@ packages: react-dom: 16.13.1_react@16.13.1 dev: false - /@fluentui/react-radio/9.1.26_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-lIX0BiOor2IHTRJToeRJM/reUBSgOHoEwhSpSYHMPlJB4YQd15fpEVq/5LXIQvljVEjHN03XPaeWSZ+NiuOsYg==} + /@fluentui/react-radio/9.1.28_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-YoXzseySLhwcWD1gj0bXf3TvmtYigYh6txm3eeciZQ4LD+ecek4lMA3u/r3xP2sYgbqSuIKXUc+ubyzpXHoMMg==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -6280,15 +6405,15 @@ packages: react-dom: '>=16.8.0 <19.0.0' scheduler: ^0.19.0 || ^0.20.0 dependencies: - '@fluentui/react-field': 9.1.13_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-label': 9.1.21_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-field': 9.1.15_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-label': 9.1.23_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6297,21 +6422,21 @@ packages: scheduler: 0.19.0 dev: false - /@fluentui/react-select/9.1.23_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-OG3hu4L3yWs5c7S2llvEf78P/jsD4Qb6opE0zi4x8k7mu5w58M6b/POliWfemY0imNisf5PorZ7s5fcucZZEkQ==} + /@fluentui/react-select/9.1.25_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-VPczz/vMtQLDagjNWm7aSLFhN+Y+qrVNRwmpaV7LuvsqFwjUorZvH9aBEO8ldhCD0m7i/2UkLFlWH8kjbyTQSg==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-field': 9.1.13_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-field': 9.1.15_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6321,32 +6446,32 @@ packages: - scheduler dev: false - /@fluentui/react-shared-contexts/9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q: - resolution: {integrity: sha512-sFyMPHJB4UgqPAEmxVikDo9mfBYgpm6mHOpMdM3+T7E3BZUY+7rFlo8XVbk6DzuclAIp85YA/ytHkI+jQyn1cw==} + /@fluentui/react-shared-contexts/9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q: + resolution: {integrity: sha512-9WuIKRYM2sM6Qb/xq4fxorWWLdypjZQoeFPfaiCnVUHh+RA/cRxeDGeGTcDzjxXLlJZHgK8ARym+KN2ASrQkJw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-theme': 9.1.9 + '@fluentui/react-theme': 9.1.10 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 react: 16.13.1 dev: false - /@fluentui/react-skeleton/9.0.11_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-6/puvXQGK47jYjD4D41cxvsBqoYsnR1Zo9PkJD08H6lij7/NjaImTAmZa+UH0aBMjG/sX3oOyF0ORzmnUt81zQ==} + /@fluentui/react-skeleton/9.0.13_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-CQwva2vcMHHzqBMavQ3Qt35LDFoojs2zTkSkhZVo8MfuSOm8VHKNPPLhB11m0OEonRb7Rsdts1HHGZdSzUg3FA==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-field': 9.1.13_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-field': 9.1.15_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6356,21 +6481,21 @@ packages: - scheduler dev: false - /@fluentui/react-slider/9.1.26_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-oRU188p2vxqi/VHe6iegikMH80ZyQzHEEVvr74pf3E+bfp1XtB/Um+A/B2NSRRGY8L2zDJgc5u7OSs0Hz9AdEA==} + /@fluentui/react-slider/9.1.28_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-b2WqMwCtqwEz1uP2Y/FviBRuw8lGxMnNt6z12+jvNp+udJ4H8eQZpGTzGSGn3dfnOfNoLSvB+dzgSa4ZKiZHVg==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-field': 9.1.13_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-field': 9.1.15_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6380,8 +6505,8 @@ packages: - scheduler dev: false - /@fluentui/react-spinbutton/9.2.23_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-aXaoa4VyRo3FldLkUMr/LMCGlDVuaO2kN0qipIUu9+Ttp5ottXRg98SS47Hi9f2ItVIyafckOnlTp0UjDFow3Q==} + /@fluentui/react-spinbutton/9.2.25_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-0qadqh2A+0TaujKSGlLN78yDJNyq9Drhj4wXDnD/x+Vq+fRe4n9hGyikNPRbJ6sKr2oVmv2BKkcgSD2vydIJJw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -6389,13 +6514,13 @@ packages: react-dom: '>=16.8.0 <19.0.0' dependencies: '@fluentui/keyboard-keys': 9.0.3 - '@fluentui/react-field': 9.1.13_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-field': 9.1.15_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6405,20 +6530,20 @@ packages: - scheduler dev: false - /@fluentui/react-spinner/9.3.1_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-hOlAjALWqpaiyd2GOwTpbsntSwXzbhMRVE2Mnd7MIy5j5GqN/29IWRTXR5D2P6svQiMkgNh5R1qToV05DobrYg==} + /@fluentui/react-spinner/9.3.3_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-nBFltn4pH5Km5iN1eHp+/se/rcD+rHKrKtQtCmsV3XwWjogSZL8MdH1y3akg7Qx4I/NZsGQ4RhikAuAzJtLu9w==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-label': 9.1.21_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-label': 9.1.23_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6426,23 +6551,23 @@ packages: react-dom: 16.13.1_react@16.13.1 dev: false - /@fluentui/react-switch/9.1.26_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-XRLigK7HZ63eqNfl3OCcTpU/xaXeAhmx7rGFZIGlVzxHjIHPvb5k70KlgAczUhuvvrC5KP1QWaVrsDDbBlXZOw==} + /@fluentui/react-switch/9.1.28_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-LVjX81pTFbr3HhzMdV7d9YcKS8bhsAPcZ40Div5URAx7tneAEhqzDHxgxJ6/Wxm/7kfBPSGE/xNFWJEKw/X96Q==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-field': 9.1.13_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-label': 9.1.21_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-field': 9.1.15_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-label': 9.1.23_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6452,8 +6577,8 @@ packages: - scheduler dev: false - /@fluentui/react-table/9.7.0_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-uB2W3VCE2/Gc3XUnGx8nn5Ww0aq7Q1dfYkTdMYkFiM682N2124HgVLJANnPfrJQ1VlpMYLZlsIAnp4jzaUr+0A==} + /@fluentui/react-table/9.7.3_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-s6j/p1jSzhWM975VDOmzfoZzOfIS24nV6HenJrpAr8PwVH54+45rkA7WXBCx8DIBB7sgY18JBE5nwzUgiJ7XdQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -6461,18 +6586,18 @@ packages: react-dom: '>=16.8.0 <19.0.0' dependencies: '@fluentui/keyboard-keys': 9.0.3 - '@fluentui/react-aria': 9.3.27_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-avatar': 9.5.14_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-checkbox': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-context-selector': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-radio': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-aria': 9.3.28_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-avatar': 9.5.17_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-checkbox': 9.1.28_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-context-selector': 9.1.27_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-radio': 9.1.28_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6482,8 +6607,8 @@ packages: - scheduler dev: false - /@fluentui/react-tabs/9.3.26_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-Jj2jQ0FsZg7Y+4jxZmEk3esIlgusHgjP9tzkqaHeR29NNBCv5mw/mL+gGtWQe+pBrPiLiK+o2IwzIi4AksiPng==} + /@fluentui/react-tabs/9.3.28_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-X4lq1bh+vVlg3U4dtWdCvLpkNmCQ5E6c0J2+cmSPDAxisLeuOC7RtrwBcxdS+gHz5TZtvDq6SEv6UhrYeUAPcg==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -6491,13 +6616,13 @@ packages: react-dom: '>=16.8.0 <19.0.0' scheduler: ^0.19.0 || ^0.20.0 dependencies: - '@fluentui/react-context-selector': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-context-selector': 9.1.27_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6506,40 +6631,40 @@ packages: scheduler: 0.19.0 dev: false - /@fluentui/react-tabster/9.11.0_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-WgM6cZfm+EWK0Q6op8ZtnxG85J9FWgOigPFwcbghDI2cUaPE15DH83jxAKy4BACnJGXbNrraYgZ2hIoF+5OVag==} + /@fluentui/react-tabster/9.12.0_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-dKIJh9+nFCRt0+gSimCVwxHkdBxid2MKQ6DPtyLvVJRYiBxSNG9EJYuNCHtE9873HO06zS4GrD4KmKEQPfwP5A==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 keyborg: 2.0.0 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 - tabster: 4.7.0 + tabster: 4.7.2 dev: false - /@fluentui/react-text/9.3.18_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-kXMA6CEKoqGTASAr84SRPf6o1//8qAOCGUzW5Ut+wkTtKqIX0dghogEP9vd8zpQWRSSG0OAxOx25rXO8ysMvJw==} + /@fluentui/react-text/9.3.20_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-0tfkK/Kdqb1ILAVcHJ2elkouNWYufxdKgE7jaA+fxmt2kwiKxTc/kbB1LHmyIuZCErJmX7U8ymig0WjlG+L/cw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6547,20 +6672,20 @@ packages: react-dom: 16.13.1_react@16.13.1 dev: false - /@fluentui/react-textarea/9.3.23_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-vbCf5pKc+wygr0U3VfRkt3i/rauq9TPqK2BByNjgdF6guTYd2yHJ735W04wAnFgJONrWqUQIJYU6pMBO44uaMA==} + /@fluentui/react-textarea/9.3.25_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-z5ZgQMW3qwpKY1XgLiYQhynpSGkxPEMkpFsFmMqkhA5eFCB4wGKhD4BFHXm3mLK8PFZUwkpiJSzB2wNiTlsAZg==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-field': 9.1.13_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-field': 9.1.15_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6570,30 +6695,31 @@ packages: - scheduler dev: false - /@fluentui/react-theme/9.1.9: - resolution: {integrity: sha512-xzcc8uhNyVEqy5XGqbKE4Obg/8sFj356L8scBJdYq+iIAySmu0SRn8qvfLajzVDayqCgEfZ64h1qmeS1K//R1w==} + /@fluentui/react-theme/9.1.10: + resolution: {integrity: sha512-E6W5LB9wg7aJSzDM87FyYBOOADCSh554W81msLRTXwLzuKHPtLannyyYXKO0tP2ZJfiySQ2LWNzHnIqV8fUuxQ==} dependencies: - '@fluentui/tokens': 1.0.0-alpha.6 + '@fluentui/tokens': 1.0.0-alpha.7 '@swc/helpers': 0.4.14 dev: false - /@fluentui/react-toast/9.0.5_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-0jGYrfjKFK4m/BwrGSEyb2Vb6uYcJHsy3JThiGYEdthePfOyHvuS0LUwCICbj/UMnAC6+mPkTKPA1gZLHwDgYQ==} + /@fluentui/react-toast/9.1.0_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-f4A9qUSVRvrCcmcPyOvPoKGdk4bjMo+sIZe3Z63AuNs4c9wr4Zj5B58B5qMdUaMEWHcwQdaWUVGR/zmyooG1Bw==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-aria': 9.3.27_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-portal': 9.3.3_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/keyboard-keys': 9.0.3 + '@fluentui/react-aria': 9.3.28_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-portal': 9.3.5_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6602,24 +6728,24 @@ packages: react-transition-group: 4.4.5_5owmthsvj5ictknaj3ev736ofq dev: false - /@fluentui/react-toolbar/9.1.26_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-fl8deVegN0S9jN4G80QpxIp4+ezvdsaDgT4BWZGHstKG6OgvvbEtZl8QbmqEuHen1kl9ZgblfQcwGRetY6RREQ==} + /@fluentui/react-toolbar/9.1.28_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-VWCznC2nURa7XRMYKakIq1i1KU2WNT2Z1inaT3ZeB+4Ia6LONLyjomt067wytEwlIPjHvuxf+7dZ54wOGwisWA==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-button': 9.3.25_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-context-selector': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-divider': 9.2.21_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-radio': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-button': 9.3.27_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-context-selector': 9.1.27_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-divider': 9.2.23_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-radio': 9.1.28_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6629,8 +6755,8 @@ packages: - scheduler dev: false - /@fluentui/react-tooltip/9.2.25_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-NGAh2QTQApDZQojXCI6jejvJR+0J/WVYcDr5vv7jX2CcAwvH30yCOXL36zNWzXUTGzOztZUnqKdrjQX/BrkCCQ==} + /@fluentui/react-tooltip/9.2.28_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-/IWEKWtASRguOrYWCPvI0IaDmVMve6jaWrdUz4xF9ZMvCp6bD5HJFWHSy0Yg55n/7LOY4952lwJTYeziN5xZiQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -6638,13 +6764,13 @@ packages: react-dom: '>=16.8.0 <19.0.0' dependencies: '@fluentui/keyboard-keys': 9.0.3 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-portal': 9.3.3_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-positioning': 9.8.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-portal': 9.3.5_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-positioning': 9.9.2_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6652,8 +6778,8 @@ packages: react-dom: 16.13.1_react@16.13.1 dev: false - /@fluentui/react-tree/9.0.0-beta.27_wewqak4xa7p37vdws7kvgszqra: - resolution: {integrity: sha512-KsZQNqo2YxKOyOHfVEf7yN9HnKC3ghXorxrZTqBFSbXVZW4l5qxf02SqdKWzyzR2kcr64sWSuiwPSAba30moPw==} + /@fluentui/react-tree/9.0.0-beta.30_wewqak4xa7p37vdws7kvgszqra: + resolution: {integrity: sha512-sx0eGi1GFfwH080aXvU+MuZ1Ud3laXuCdfU+KdepMIGLMJ5ecbOONnX83ddpazzk5j9rNKzbUXA/P2GRVw0B7g==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' @@ -6661,20 +6787,20 @@ packages: react-dom: '>=16.8.0 <19.0.0' dependencies: '@fluentui/keyboard-keys': 9.0.3 - '@fluentui/react-aria': 9.3.27_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-avatar': 9.5.14_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-button': 9.3.25_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-checkbox': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-context-selector': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-icons': 2.0.208_react@16.13.1 - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-portal': 9.3.3_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-radio': 9.1.26_wewqak4xa7p37vdws7kvgszqra - '@fluentui/react-shared-contexts': 9.6.0_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-tabster': 9.11.0_tlqvpdqnq63ssdllbmshthdmo4 - '@fluentui/react-theme': 9.1.9 - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-aria': 9.3.28_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-avatar': 9.5.17_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-button': 9.3.27_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-checkbox': 9.1.28_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-context-selector': 9.1.27_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-icons': 2.0.209_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-portal': 9.3.5_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-radio': 9.1.28_wewqak4xa7p37vdws7kvgszqra + '@fluentui/react-shared-contexts': 9.7.1_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-tabster': 9.12.0_tlqvpdqnq63ssdllbmshthdmo4 + '@fluentui/react-theme': 9.1.10 + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6684,8 +6810,8 @@ packages: - scheduler dev: false - /@fluentui/react-utilities/9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q: - resolution: {integrity: sha512-TckWldeYrTy4tneWyPV8oHZFbxUZJA3r+cOSN3pNsyxwLs9vYrsZvpvZJTcOF3VNoEJKFDaehnzuBHEUoL7hmQ==} + /@fluentui/react-utilities/9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q: + resolution: {integrity: sha512-+lK8OU7jX5QFNfvMPwekQk9NPStETi3rHknb7S9oSEhXAnKFvH7L8Jp9LD+/CCeKrbkoGUX4t8AyDgBhtgx40g==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' @@ -6696,17 +6822,17 @@ packages: react: 16.13.1 dev: false - /@fluentui/react-virtualizer/9.0.0-alpha.29_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-cwNKwrej47AUZrd+OoKSDo+h5oyZ5+0P9FjvuRYXPPxuiGT2XI6cG7g2LKcRRuLmCTplrdEZ2GHX6UxD7bHKEA==} + /@fluentui/react-virtualizer/9.0.0-alpha.30_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-dUYZTGfUeuVKNAjZ9Thy6jBjATRBuGCj8xo/G+52iw++xno7jZKobfeFPGFIr6SS1+bDgGwkz0qSCKU1fNNvCA==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/react-jsx-runtime': 9.0.0-alpha.12_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-utilities': 9.10.1_qjwx5m6wssz3lnb35xwkc3pz6q - '@griffel/react': 1.5.12_react@16.13.1 + '@fluentui/react-jsx-runtime': 9.0.0-alpha.13_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-utilities': 9.11.0_qjwx5m6wssz3lnb35xwkc3pz6q + '@griffel/react': 1.5.14_react@16.13.1 '@swc/helpers': 0.4.14 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6714,38 +6840,38 @@ packages: react-dom: 16.13.1_react@16.13.1 dev: false - /@fluentui/react-window-provider/2.2.9_qjwx5m6wssz3lnb35xwkc3pz6q: - resolution: {integrity: sha512-BRa23ITjwUgewS9ynzCnW2bJIgaNHwhPUY0htLKcYSSv3fG7iib91B6FVC7QqmXDBTia00kqVul1TZz5G0qrlQ==} + /@fluentui/react-window-provider/2.2.15_qjwx5m6wssz3lnb35xwkc3pz6q: + resolution: {integrity: sha512-RraWvRe7wakpPJRBX2tlCV/cybOKiqLJ1UBLPNf5xq7ZIs0T0g/hh3G3Zb5teOeipjuRnl6srkdDUT9Dy9wrBg==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/set-version': 8.2.6 + '@fluentui/set-version': 8.2.11 '@types/react': 16.14.23 react: 16.13.1 tslib: 2.3.1 dev: false - /@fluentui/react/8.106.9_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-MVBeGgqHgw/pp3ueJmg+PRulQ9HobhUgiNQeyp9Q1caAiRb9Xzjebdv+qr4XNhVChAmyYN7FlaepSFwhX2LlNQ==} + /@fluentui/react/8.110.12_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-SQOUhatXtDlbfyX7Ip2aYWjUBHiCZGPk5SVnb+/jv9IhxKLcMXaxA8faps/bp2h/VlS5Fjk6RkbvQM/qoEjlvg==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' '@types/react-dom': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' react-dom: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/date-time-utilities': 8.5.6 - '@fluentui/font-icons-mdl2': 8.5.13_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/foundation-legacy': 8.2.33_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/merge-styles': 8.5.7 - '@fluentui/react-focus': 8.8.19_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-hooks': 8.6.20_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-portal-compat-context': 9.0.5_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/react-window-provider': 2.2.9_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/set-version': 8.2.6 - '@fluentui/style-utilities': 8.9.6_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/theme': 2.6.25_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/utilities': 8.13.9_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/date-time-utilities': 8.5.13 + '@fluentui/font-icons-mdl2': 8.5.23_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/foundation-legacy': 8.2.43_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/merge-styles': 8.5.12 + '@fluentui/react-focus': 8.8.30_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-hooks': 8.6.29_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-portal-compat-context': 9.0.6_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/react-window-provider': 2.2.15_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/set-version': 8.2.11 + '@fluentui/style-utilities': 8.9.16_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/theme': 2.6.34_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/utilities': 8.13.18_qjwx5m6wssz3lnb35xwkc3pz6q '@microsoft/load-themed-styles': 1.10.295 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -6754,19 +6880,19 @@ packages: tslib: 2.3.1 dev: false - /@fluentui/set-version/8.2.6: - resolution: {integrity: sha512-zXIfscQ1ZAiEpHc5taMrDEtTP2NtPBGlz2HbOpZiQ3aj/xcnUT7nT73ctb+Q2bHIqlDCHEaFRQxy/HG6koGYAA==} + /@fluentui/set-version/8.2.11: + resolution: {integrity: sha512-UI03tysau/adBO1a3q4uFZWQ3lfkiFcAWIFng4k5odWcCokfCm5IxA0urKqj5W5JRYdyoBUaq8QbcNGkFB4dCw==} dependencies: tslib: 2.3.1 dev: false - /@fluentui/style-utilities/8.9.6_qjwx5m6wssz3lnb35xwkc3pz6q: - resolution: {integrity: sha512-glhexQzJNnLws66Tb7a0WPStYVE1tRy0QWwbtOdIRXsd/3CA1FZse76itss8/yqGakPin2PElkej/jTKpaRWew==} + /@fluentui/style-utilities/8.9.16_qjwx5m6wssz3lnb35xwkc3pz6q: + resolution: {integrity: sha512-8hS5HscCFYvcWjAdk37frPZJZthr7f/cu5db7gjrPy+DEhf13WAZRHsropWm17+8GhJhvKt98BQf/Kzxtt34Eg==} dependencies: - '@fluentui/merge-styles': 8.5.7 - '@fluentui/set-version': 8.2.6 - '@fluentui/theme': 2.6.25_qjwx5m6wssz3lnb35xwkc3pz6q - '@fluentui/utilities': 8.13.9_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/merge-styles': 8.5.12 + '@fluentui/set-version': 8.2.11 + '@fluentui/theme': 2.6.34_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/utilities': 8.13.18_qjwx5m6wssz3lnb35xwkc3pz6q '@microsoft/load-themed-styles': 1.10.295 tslib: 2.3.1 transitivePeerDependencies: @@ -6774,35 +6900,35 @@ packages: - react dev: false - /@fluentui/theme/2.6.25_qjwx5m6wssz3lnb35xwkc3pz6q: - resolution: {integrity: sha512-slp+Tk+FEDj6HtZNWzckEMPLZMYfe2bECz4hLj/aq2ok51f2ztVTM8rjjmiJjOAidcTirF/gdYVbayc/5MOKag==} + /@fluentui/theme/2.6.34_qjwx5m6wssz3lnb35xwkc3pz6q: + resolution: {integrity: sha512-2Ssi3sX2snnbPJ4PmxbpCDCGePRE36tvGj2qKgdKiSh/fPVsg1b+Q50YlpFl9sXmbhl1uFmxjAx6WPsVGTl7vQ==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/merge-styles': 8.5.7 - '@fluentui/set-version': 8.2.6 - '@fluentui/utilities': 8.13.9_qjwx5m6wssz3lnb35xwkc3pz6q + '@fluentui/merge-styles': 8.5.12 + '@fluentui/set-version': 8.2.11 + '@fluentui/utilities': 8.13.18_qjwx5m6wssz3lnb35xwkc3pz6q '@types/react': 16.14.23 react: 16.13.1 tslib: 2.3.1 dev: false - /@fluentui/tokens/1.0.0-alpha.6: - resolution: {integrity: sha512-3fF2rWSltn4HUdg3Q1Sb9qS6gCT6XsCDeEgbwMt93BWT2qu3cn8n4IQKbeqT/WUv4yd1AhMt7D8JUze2A1I9Kg==} + /@fluentui/tokens/1.0.0-alpha.7: + resolution: {integrity: sha512-djgLw4HVx0Jx0GYKQEu65aQ5nY59CkcV850LrLPHOERV+KhuWqoI4CdrvL2fFqrAvqLlfK940MP1mPrvy8NAow==} dependencies: '@swc/helpers': 0.4.14 dev: false - /@fluentui/utilities/8.13.9_qjwx5m6wssz3lnb35xwkc3pz6q: - resolution: {integrity: sha512-8SkDFN+v3FZ2DNQtnRHnUxkY2tVQo6ojHVPWsR5WAbfKDAdlDUWxf5bM+U/8d4E4v49x4HpKY1fqsrx3hLAhyA==} + /@fluentui/utilities/8.13.18_qjwx5m6wssz3lnb35xwkc3pz6q: + resolution: {integrity: sha512-/0rX9EzltLKwU1SS14VV7agWoOzruVTU3oagZq1QgFAvoj8qi7fNqvSX/VEeRy+0gmbsCkrEViUPkmC7drKzPg==} peerDependencies: '@types/react': '>=16.8.0 <19.0.0' react: '>=16.8.0 <19.0.0' dependencies: - '@fluentui/dom-utilities': 2.2.6 - '@fluentui/merge-styles': 8.5.7 - '@fluentui/set-version': 8.2.6 + '@fluentui/dom-utilities': 2.2.11 + '@fluentui/merge-styles': 8.5.12 + '@fluentui/set-version': 8.2.11 '@types/react': 16.14.23 react: 16.13.1 tslib: 2.3.1 @@ -6819,7 +6945,7 @@ packages: dependencies: globby: 11.1.0 graphql: 15.8.0 - tslib: 2.5.0 + tslib: 2.6.1 unixify: 1.0.0 dev: true @@ -6841,7 +6967,7 @@ packages: dependencies: '@graphql-tools/utils': 8.9.0_graphql@15.8.0 graphql: 15.8.0 - tslib: 2.5.0 + tslib: 2.6.1 dev: true /@graphql-tools/schema/8.5.1_graphql@15.8.0: @@ -6852,7 +6978,7 @@ packages: '@graphql-tools/merge': 8.3.1_graphql@15.8.0 '@graphql-tools/utils': 8.9.0_graphql@15.8.0 graphql: 15.8.0 - tslib: 2.5.0 + tslib: 2.6.1 value-or-promise: 1.0.11 dev: true @@ -6871,38 +6997,38 @@ packages: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: graphql: 15.8.0 - tslib: 2.5.0 + tslib: 2.6.1 dev: true - /@griffel/core/1.13.1: - resolution: {integrity: sha512-+4lY2qXWdLBX9QUmA7B4eY2/7slh7mJtrvgdHfQmcdZ+4RzHh5E2e0ALwuXu7/6ffa7lwAif4u+ke6L14MrQXg==} + /@griffel/core/1.14.1: + resolution: {integrity: sha512-KQ6yueap1zff9TJrn7MdfSAHDMDVP6Ec97gnpCi4NOeKiyCyT13MwPCmkkK0o/poaV1f9MdHhUTQZCpK0QtxzQ==} dependencies: - '@emotion/hash': 0.9.0 - '@griffel/style-types': 1.0.0 + '@emotion/hash': 0.9.1 + '@griffel/style-types': 1.0.1 csstype: 3.1.2 rtl-css-js: 1.16.1 stylis: 4.3.0 tslib: 2.3.1 dev: false - /@griffel/react/1.5.12_react@16.13.1: - resolution: {integrity: sha512-HofsQm7ZdwhPqiA0RJJZtHfaokiQgmO0m+CtZMGg+Ycz9Up7c/BtfkrL81enIbz5D5Oqg4+kNPm8K61DTadghQ==} + /@griffel/react/1.5.14_react@16.13.1: + resolution: {integrity: sha512-/x6cy6xMtpow1r+Zrw/hMKHwo+imFAgKaZ3A/+M8GyT3L9AFxK1Kyg4JvARPjLBAn9Q2q5dkCr78jOguuVSScg==} peerDependencies: react: '>=16.8.0 <19.0.0' dependencies: - '@griffel/core': 1.13.1 + '@griffel/core': 1.14.1 react: 16.13.1 tslib: 2.3.1 dev: false - /@griffel/style-types/1.0.0: - resolution: {integrity: sha512-/4I5OYwyCxJ60YJUcwlPQO2vAm2L+JfC5w/6kpdb052NxczI7KqPcgCwnhqhYagCLlJBM8Ur8dBv7lNNLKndNw==} + /@griffel/style-types/1.0.1: + resolution: {integrity: sha512-nhVryiNHhoBt5L93tfDYGoE4KtWvhBvY7y1yR1n6WKpRjasgw3GI2pBwiMiVt68bycnyvXIvcJjJTr0QM22VLQ==} dependencies: csstype: 3.1.2 dev: false - /@humanwhocodes/config-array/0.11.8: - resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} + /@humanwhocodes/config-array/0.11.10: + resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 @@ -6955,15 +7081,15 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - /@jest/console/29.5.0: - resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} + /@jest/console/29.6.2: + resolution: {integrity: sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 '@types/node': 14.18.36 chalk: 4.1.2 - jest-message-util: 29.5.0 - jest-util: 29.5.0 + jest-message-util: 29.6.2 + jest-util: 29.6.2 slash: 3.0.0 /@jest/core/29.5.0: @@ -6975,9 +7101,9 @@ packages: node-notifier: optional: true dependencies: - '@jest/console': 29.5.0 + '@jest/console': 29.6.2 '@jest/reporters': 29.5.0 - '@jest/test-result': 29.5.0_@types+node@14.18.36 + '@jest/test-result': 29.6.2_@types+node@14.18.36 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@types/node': 14.18.36 @@ -6988,68 +7114,112 @@ packages: graceful-fs: 4.2.11 jest-changed-files: 29.5.0 jest-config: 29.5.0_@types+node@14.18.36 - jest-haste-map: 29.5.0 - jest-message-util: 29.5.0 + jest-haste-map: 29.6.2 + jest-message-util: 29.6.2 jest-regex-util: 29.4.3 jest-resolve: 29.5.0 - jest-resolve-dependencies: 29.5.0 - jest-runner: 29.5.0 - jest-runtime: 29.5.0 + jest-resolve-dependencies: 29.6.2 + jest-runner: 29.6.2 + jest-runtime: 29.6.2 jest-snapshot: 29.5.0 - jest-util: 29.5.0 - jest-validate: 29.5.0 - jest-watcher: 29.5.0 + jest-util: 29.6.2 + jest-validate: 29.6.2 + jest-watcher: 29.6.2 micromatch: 4.0.5 - pretty-format: 29.5.0 + pretty-format: 29.6.2 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: + - babel-plugin-macros - supports-color - ts-node - /@jest/environment/29.5.0: - resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} + /@jest/core/29.6.2: + resolution: {integrity: sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true dependencies: - '@jest/fake-timers': 29.5.0 - '@jest/types': 29.5.0 + '@jest/console': 29.6.2 + '@jest/reporters': 29.6.2 + '@jest/test-result': 29.6.2_@types+node@14.18.36 + '@jest/transform': 29.6.2 + '@jest/types': 29.6.1 + '@types/node': 14.18.36 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.8.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.5.0 + jest-config: 29.6.2_@types+node@14.18.36 + jest-haste-map: 29.6.2 + jest-message-util: 29.6.2 + jest-regex-util: 29.4.3 + jest-resolve: 29.6.2 + jest-resolve-dependencies: 29.6.2 + jest-runner: 29.6.2 + jest-runtime: 29.6.2 + jest-snapshot: 29.6.2 + jest-util: 29.6.2 + jest-validate: 29.6.2 + jest-watcher: 29.6.2 + micromatch: 4.0.5 + pretty-format: 29.6.2 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /@jest/environment/29.6.2: + resolution: {integrity: sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/fake-timers': 29.6.2 + '@jest/types': 29.6.1 '@types/node': 14.18.36 - jest-mock: 29.5.0 + jest-mock: 29.6.2 - /@jest/expect-utils/29.5.0: - resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} + /@jest/expect-utils/29.6.2: + resolution: {integrity: sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 - /@jest/expect/29.5.0: - resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} + /@jest/expect/29.6.2: + resolution: {integrity: sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - expect: 29.5.0 - jest-snapshot: 29.5.0 + expect: 29.6.2 + jest-snapshot: 29.6.2 transitivePeerDependencies: - supports-color - /@jest/fake-timers/29.5.0: - resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} + /@jest/fake-timers/29.6.2: + resolution: {integrity: sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 - '@sinonjs/fake-timers': 10.0.2 + '@jest/types': 29.6.1 + '@sinonjs/fake-timers': 10.3.0 '@types/node': 14.18.36 - jest-message-util: 29.5.0 - jest-mock: 29.5.0 - jest-util: 29.5.0 + jest-message-util: 29.6.2 + jest-mock: 29.6.2 + jest-util: 29.6.2 - /@jest/globals/29.5.0: - resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} + /@jest/globals/29.6.2: + resolution: {integrity: sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.5.0 - '@jest/expect': 29.5.0 - '@jest/types': 29.5.0 - jest-mock: 29.5.0 + '@jest/environment': 29.6.2 + '@jest/expect': 29.6.2 + '@jest/types': 29.6.1 + jest-mock: 29.6.2 transitivePeerDependencies: - supports-color @@ -7063,26 +7233,26 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.5.0 - '@jest/test-result': 29.5.0_@types+node@14.18.36 + '@jest/console': 29.6.2 + '@jest/test-result': 29.6.2_@types+node@14.18.36 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.19 '@types/istanbul-lib-coverage': 2.0.4 '@types/node': 14.18.36 chalk: 4.1.2 - collect-v8-coverage: 1.0.1_@types+node@14.18.36 + collect-v8-coverage: 1.0.2_@types+node@14.18.36 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.0 istanbul-lib-instrument: 5.2.1 - istanbul-lib-report: 3.0.0 + istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.5 - jest-message-util: 29.5.0 - jest-util: 29.5.0 - jest-worker: 29.5.0 + istanbul-reports: 3.1.6 + jest-message-util: 29.6.2 + jest-util: 29.6.2 + jest-worker: 29.6.2 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 @@ -7090,40 +7260,78 @@ packages: transitivePeerDependencies: - supports-color - /@jest/schemas/29.4.3: - resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} + /@jest/reporters/29.6.2: + resolution: {integrity: sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true dependencies: - '@sinclair/typebox': 0.25.24 + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.6.2 + '@jest/test-result': 29.6.2_@types+node@14.18.36 + '@jest/transform': 29.6.2 + '@jest/types': 29.6.1 + '@jridgewell/trace-mapping': 0.3.19 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/node': 14.18.36 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2_@types+node@14.18.36 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-instrument: 5.2.1 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + jest-message-util: 29.6.2 + jest-util: 29.6.2 + jest-worker: 29.6.2 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/schemas/29.6.0: + resolution: {integrity: sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 - /@jest/source-map/29.4.3: - resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} + /@jest/source-map/29.6.0: + resolution: {integrity: sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.19 callsites: 3.1.0 graceful-fs: 4.2.11 - /@jest/test-result/29.5.0_@types+node@14.18.36: - resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} + /@jest/test-result/29.6.2_@types+node@14.18.36: + resolution: {integrity: sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.5.0 - '@jest/types': 29.5.0 + '@jest/console': 29.6.2 + '@jest/types': 29.6.1 '@types/istanbul-lib-coverage': 2.0.4 - collect-v8-coverage: 1.0.1_@types+node@14.18.36 - jest-haste-map: 29.5.0 - jest-resolve: 29.5.0 + collect-v8-coverage: 1.0.2_@types+node@14.18.36 + jest-haste-map: 29.6.2 + jest-resolve: 29.6.2 transitivePeerDependencies: - '@types/node' - /@jest/test-sequencer/29.5.0_@types+node@14.18.36: - resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} + /@jest/test-sequencer/29.6.2_@types+node@14.18.36: + resolution: {integrity: sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.5.0_@types+node@14.18.36 + '@jest/test-result': 29.6.2_@types+node@14.18.36 graceful-fs: 4.2.11 - jest-haste-map: 29.5.0 + jest-haste-map: 29.6.2 slash: 3.0.0 transitivePeerDependencies: - '@types/node' @@ -7143,7 +7351,7 @@ packages: jest-regex-util: 26.0.0 jest-util: 26.6.2 micromatch: 4.0.5 - pirates: 4.0.5 + pirates: 4.0.6 slash: 3.0.0 source-map: 0.6.1 write-file-atomic: 3.0.3 @@ -7157,17 +7365,39 @@ packages: dependencies: '@babel/core': 7.20.12 '@jest/types': 29.5.0 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.19 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 - jest-haste-map: 29.5.0 + jest-haste-map: 29.6.2 jest-regex-util: 29.4.3 - jest-util: 29.5.0 + jest-util: 29.6.2 micromatch: 4.0.5 - pirates: 4.0.5 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + /@jest/transform/29.6.2: + resolution: {integrity: sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.20.12 + '@jest/types': 29.6.1 + '@jridgewell/trace-mapping': 0.3.19 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.6.2 + jest-regex-util: 29.4.3 + jest-util: 29.6.2 + micromatch: 4.0.5 + pirates: 4.0.6 slash: 3.0.0 write-file-atomic: 4.0.2 transitivePeerDependencies: @@ -7188,50 +7418,54 @@ packages: resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.4.3 + '@jest/schemas': 29.6.0 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 '@types/node': 14.18.36 '@types/yargs': 17.0.24 chalk: 4.1.2 - /@jridgewell/gen-mapping/0.1.1: - resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} - engines: {node: '>=6.0.0'} + /@jest/types/29.6.1: + resolution: {integrity: sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jest/schemas': 29.6.0 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 14.18.36 + '@types/yargs': 17.0.24 + chalk: 4.1.2 - /@jridgewell/gen-mapping/0.3.2: - resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} + /@jridgewell/gen-mapping/0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.19 - /@jridgewell/resolve-uri/3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + /@jridgewell/resolve-uri/3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} /@jridgewell/set-array/1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - /@jridgewell/source-map/0.3.2: - resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} + /@jridgewell/source-map/0.3.5: + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 - /@jridgewell/sourcemap-codec/1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + /@jridgewell/sourcemap-codec/1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping/0.3.17: - resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} + /@jridgewell/trace-mapping/0.3.19: + resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 /@jsii/check-node/1.50.0: resolution: {integrity: sha512-CkL3EtRIxglzPraC2bR+plEw4pxrbCLUZRjTDxALjhJaO67SWyMUhtHkFerPH9vqIe7rQVkvrv6kJTwpNFRU5Q==} @@ -7320,7 +7554,7 @@ packages: '@rushstack/ts-command-line': 4.15.0 colors: 1.2.5 lodash: 4.17.21 - resolve: 1.22.1 + resolve: 1.22.4 semver: 7.3.8 source-map: 0.6.1 typescript: 5.0.4 @@ -7427,13 +7661,13 @@ packages: dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 - core-js-pure: 3.29.1 + core-js-pure: 3.32.0 error-stack-parser: 2.1.4 find-up: 5.0.0 - html-entities: 2.3.3 + html-entities: 2.4.0 loader-utils: 2.0.4 react-refresh: 0.11.0 - schema-utils: 3.1.2 + schema-utils: 3.3.0 source-map: 0.7.4 webpack: 4.44.2 dev: true @@ -7452,12 +7686,12 @@ packages: rfc4648: 1.5.2 dev: false - /@pnpm/dependency-path/2.1.2: - resolution: {integrity: sha512-BXEMdGHZG2y8z7hZAVn+r0z+IdszFZbVPpAp3xyDH3gDN30A4HCVhhCUUf0mthqQZsT131jK4HW82EUwEiW01A==} + /@pnpm/dependency-path/2.1.3: + resolution: {integrity: sha512-OKuLDqRZfAJAb4fnPZyPyrR827ISL1WV5YBs0q4BitPAz8ORUPSXSCFVailLhoyZWLE0Ag6hROy42Jkw/WnCUw==} engines: {node: '>=16.14'} dependencies: '@pnpm/crypto.base32-hash': 2.0.0 - '@pnpm/types': 9.1.0 + '@pnpm/types': 9.2.0 encode-registry: 3.0.0 semver: 7.5.4 dev: false @@ -7548,8 +7782,8 @@ packages: engines: {node: '>=14.6'} dev: false - /@pnpm/types/9.1.0: - resolution: {integrity: sha512-MMPDMLOY17bfNhLhR9Qmq6/2keoocnR5DWXZfZDC4dKXugrMsE1jB6RnuU8swJIo4zyCsMT/iVSAtl/XK+9Z+A==} + /@pnpm/types/9.2.0: + resolution: {integrity: sha512-LtkHgtJ5Bjny4poUWyMhOKHc822/zm8NhPx+7VbopfDYnTrKgJwTyTbZjZEyN5KpDw3R1Fr8VYdmv5gn4eyWbw==} engines: {node: '>=16.14'} dev: false @@ -7567,102 +7801,121 @@ packages: /@polka/url/1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} - /@popperjs/core/2.11.7: - resolution: {integrity: sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==} + /@popperjs/core/2.11.8: + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: true - /@radix-ui/colors/0.1.8: - resolution: {integrity: sha512-jwRMXYwC0hUo0mv6wGpuw254Pd9p/R6Td5xsRpOmaWkUHlooNWqVcadgyzlRumMq3xfOTXwJReU0Jv+EIy4Jbw==} + /@radix-ui/colors/0.1.9: + resolution: {integrity: sha512-Vxq944ErPJsdVepjEUhOLO9ApUVOocA63knc+V2TkJ09D/AVOjiMIgkca/7VoYgODcla0qbSIBjje0SMfZMbAw==} dev: true - /@radix-ui/number/1.0.0: - resolution: {integrity: sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==} + /@radix-ui/number/1.0.1: + resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 dev: true - /@radix-ui/primitive/1.0.0: - resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==} + /@radix-ui/primitive/1.0.1: + resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 dev: true - /@radix-ui/react-checkbox/1.0.3_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-55B8/vKzTuzxllH5sGJO4zaBf9gYpJuJRRzaOKm+0oAefRnMvbf+Kgww7IOANVN0w3z7agFJgtnXaZl8Uj95AA==} + /@radix-ui/react-checkbox/1.0.4_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-CBuGQa52aAYnADZVt/KBQzXrwx6TqnlwtcIPGtVt5JkkzQwMOLJjPukimhfKEr4GQNd43C+djUh5Ikopj8pSLg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.21.0 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-compose-refs': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-context': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-presence': 1.0.0_tlqvpdqnq63ssdllbmshthdmo4 - '@radix-ui/react-primitive': 1.0.2_tlqvpdqnq63ssdllbmshthdmo4 - '@radix-ui/react-use-controllable-state': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-use-previous': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-use-size': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm + '@babel/runtime': 7.22.10 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-context': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-presence': 1.0.1_tlqvpdqnq63ssdllbmshthdmo4 + '@radix-ui/react-primitive': 1.0.3_tlqvpdqnq63ssdllbmshthdmo4 + '@radix-ui/react-use-controllable-state': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-use-previous': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-use-size': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm '@types/react': 16.14.23 '@types/react-dom': 16.9.14 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 dev: true - /@radix-ui/react-collection/1.0.2_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-s8WdQQ6wNXpaxdZ308KSr8fEWGrg4un8i4r/w7fhiS4ElRNjk5rRcl0/C6TANG2LvLOGIxtzo/jAg6Qf73TEBw==} + /@radix-ui/react-collection/1.0.3_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.21.0 - '@radix-ui/react-compose-refs': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-context': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-primitive': 1.0.2_tlqvpdqnq63ssdllbmshthdmo4 - '@radix-ui/react-slot': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@babel/runtime': 7.22.10 + '@radix-ui/react-compose-refs': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-context': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-primitive': 1.0.3_tlqvpdqnq63ssdllbmshthdmo4 + '@radix-ui/react-slot': 1.0.2_sftehf4lpwv3vmg4pl5jfvkfmm '@types/react': 16.14.23 '@types/react-dom': 16.9.14 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 dev: true - /@radix-ui/react-compose-refs/1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm: - resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==} + /@radix-ui/react-compose-refs/1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm: + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 react: 16.13.1 dev: true - /@radix-ui/react-context/1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm: - resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==} + /@radix-ui/react-context/1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm: + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 react: 16.13.1 dev: true - /@radix-ui/react-direction/1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm: - resolution: {integrity: sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==} + /@radix-ui/react-direction/1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm: + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 react: 16.13.1 @@ -7680,206 +7933,261 @@ packages: react: 16.13.1 dev: true - /@radix-ui/react-id/1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm: - resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==} + /@radix-ui/react-id/1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm: + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.21.0 - '@radix-ui/react-use-layout-effect': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm + '@babel/runtime': 7.22.10 + '@radix-ui/react-use-layout-effect': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm '@types/react': 16.14.23 '@types/react-dom': 16.9.14 react: 16.13.1 dev: true - /@radix-ui/react-presence/1.0.0_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==} + /@radix-ui/react-presence/1.0.1_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.21.0 - '@radix-ui/react-compose-refs': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-use-layout-effect': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm + '@babel/runtime': 7.22.10 + '@radix-ui/react-compose-refs': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-use-layout-effect': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm '@types/react': 16.14.23 '@types/react-dom': 16.9.14 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 dev: true - /@radix-ui/react-primitive/1.0.2_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-zY6G5Qq4R8diFPNwtyoLRZBxzu1Z+SXMlfYpChN7Dv8gvmx9X3qhDqiLWvKseKVJMuedFeU/Sa0Sy/Ia+t06Dw==} + /@radix-ui/react-primitive/1.0.3_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.21.0 - '@radix-ui/react-slot': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@babel/runtime': 7.22.10 + '@radix-ui/react-slot': 1.0.2_sftehf4lpwv3vmg4pl5jfvkfmm '@types/react': 16.14.23 '@types/react-dom': 16.9.14 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 dev: true - /@radix-ui/react-roving-focus/1.0.3_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-stjCkIoMe6h+1fWtXlA6cRfikdBzCLp3SnVk7c48cv/uy3DTGoXhN76YaOYUJuy3aEDvDIKwKR5KSmvrtPvQPQ==} + /@radix-ui/react-roving-focus/1.0.4_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.21.0 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-collection': 1.0.2_tlqvpdqnq63ssdllbmshthdmo4 - '@radix-ui/react-compose-refs': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-context': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-direction': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-id': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-primitive': 1.0.2_tlqvpdqnq63ssdllbmshthdmo4 - '@radix-ui/react-use-callback-ref': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-use-controllable-state': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm + '@babel/runtime': 7.22.10 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3_tlqvpdqnq63ssdllbmshthdmo4 + '@radix-ui/react-compose-refs': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-context': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-direction': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-id': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-primitive': 1.0.3_tlqvpdqnq63ssdllbmshthdmo4 + '@radix-ui/react-use-callback-ref': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-use-controllable-state': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm '@types/react': 16.14.23 '@types/react-dom': 16.9.14 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 dev: true - /@radix-ui/react-scroll-area/1.0.3_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-sBX9j8Q+0/jReNObEAveKIGXJtk3xUoSIx4cMKygGtO128QJyVDn01XNOFsyvihKDCTcu7SINzQ2jPAZEhIQtw==} + /@radix-ui/react-scroll-area/1.0.4_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-OIClwBkwPG+FKvC4OMTRaa/3cfD069nkKFFL/TQzRzaO42Ce5ivKU9VMKgT7UU6UIkjcQqKBrDOIzWtPGw6e6w==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.21.0 - '@radix-ui/number': 1.0.0 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-compose-refs': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-context': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-direction': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-presence': 1.0.0_tlqvpdqnq63ssdllbmshthdmo4 - '@radix-ui/react-primitive': 1.0.2_tlqvpdqnq63ssdllbmshthdmo4 - '@radix-ui/react-use-callback-ref': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-use-layout-effect': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm + '@babel/runtime': 7.22.10 + '@radix-ui/number': 1.0.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-context': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-direction': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-presence': 1.0.1_tlqvpdqnq63ssdllbmshthdmo4 + '@radix-ui/react-primitive': 1.0.3_tlqvpdqnq63ssdllbmshthdmo4 + '@radix-ui/react-use-callback-ref': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-use-layout-effect': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm '@types/react': 16.14.23 '@types/react-dom': 16.9.14 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 dev: true - /@radix-ui/react-slot/1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm: - resolution: {integrity: sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==} + /@radix-ui/react-slot/1.0.2_sftehf4lpwv3vmg4pl5jfvkfmm: + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.21.0 - '@radix-ui/react-compose-refs': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm + '@babel/runtime': 7.22.10 + '@radix-ui/react-compose-refs': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm '@types/react': 16.14.23 '@types/react-dom': 16.9.14 react: 16.13.1 dev: true - /@radix-ui/react-tabs/1.0.3_tlqvpdqnq63ssdllbmshthdmo4: - resolution: {integrity: sha512-4CkF/Rx1GcrusI/JZ1Rvyx4okGUs6wEenWA0RG/N+CwkRhTy7t54y7BLsWUXrAz/GRbBfHQg/Odfs/RoW0CiRA==} + /@radix-ui/react-tabs/1.0.4_tlqvpdqnq63ssdllbmshthdmo4: + resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true dependencies: - '@babel/runtime': 7.21.0 - '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-context': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-direction': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-id': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm - '@radix-ui/react-presence': 1.0.0_tlqvpdqnq63ssdllbmshthdmo4 - '@radix-ui/react-primitive': 1.0.2_tlqvpdqnq63ssdllbmshthdmo4 - '@radix-ui/react-roving-focus': 1.0.3_tlqvpdqnq63ssdllbmshthdmo4 - '@radix-ui/react-use-controllable-state': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm + '@babel/runtime': 7.22.10 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-direction': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-id': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm + '@radix-ui/react-presence': 1.0.1_tlqvpdqnq63ssdllbmshthdmo4 + '@radix-ui/react-primitive': 1.0.3_tlqvpdqnq63ssdllbmshthdmo4 + '@radix-ui/react-roving-focus': 1.0.4_tlqvpdqnq63ssdllbmshthdmo4 + '@radix-ui/react-use-controllable-state': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm '@types/react': 16.14.23 '@types/react-dom': 16.9.14 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 dev: true - /@radix-ui/react-use-callback-ref/1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm: - resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==} + /@radix-ui/react-use-callback-ref/1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm: + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 react: 16.13.1 dev: true - /@radix-ui/react-use-controllable-state/1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm: - resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==} + /@radix-ui/react-use-controllable-state/1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm: + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.21.0 - '@radix-ui/react-use-callback-ref': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm + '@babel/runtime': 7.22.10 + '@radix-ui/react-use-callback-ref': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm '@types/react': 16.14.23 '@types/react-dom': 16.9.14 react: 16.13.1 dev: true - /@radix-ui/react-use-layout-effect/1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm: - resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==} + /@radix-ui/react-use-layout-effect/1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm: + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 react: 16.13.1 dev: true - /@radix-ui/react-use-previous/1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm: - resolution: {integrity: sha512-RG2K8z/K7InnOKpq6YLDmT49HGjNmrK+fr82UCVKT2sW0GYfVnYp4wZWBooT/EYfQ5faA9uIjvsuMMhH61rheg==} + /@radix-ui/react-use-previous/1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm: + resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 react: 16.13.1 dev: true - /@radix-ui/react-use-size/1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm: - resolution: {integrity: sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==} + /@radix-ui/react-use-size/1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm: + resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@babel/runtime': 7.21.0 - '@radix-ui/react-use-layout-effect': 1.0.0_sftehf4lpwv3vmg4pl5jfvkfmm + '@babel/runtime': 7.22.10 + '@radix-ui/react-use-layout-effect': 1.0.1_sftehf4lpwv3vmg4pl5jfvkfmm '@types/react': 16.14.23 '@types/react-dom': 16.9.14 react: 16.13.1 dev: true - /@reduxjs/toolkit/1.8.6_qfynotfwlyrsyq662adyrweaoe: + /@redis/client/1.5.8: + resolution: {integrity: sha512-xzElwHIO6rBAqzPeVnCzgvrnBEcFL1P0w8P65VNLRkdVW8rOE58f52hdj0BDgmsdOm4f1EoXPZtH4Fh7M/qUpw==} + engines: {node: '>=14'} + dependencies: + cluster-key-slot: 1.1.2 + generic-pool: 3.9.0 + yallist: 4.0.0 + dev: false + + /@reduxjs/toolkit/1.8.6_wh4ihjgz7ckkj64srthnp7p2pq: resolution: {integrity: sha512-4Ia/Loc6WLmdSOzi7k5ff7dLK8CgG2b8aqpLsCAJhazAzGdp//YBUSaj0ceW6a3kDBDNRrq5CRwyCS0wBiL1ig==} peerDependencies: react: ^16.9.0 || ^17.0.0 || ^18 @@ -7892,14 +8200,14 @@ packages: dependencies: immer: 9.0.21 react: 16.13.1 - react-redux: 8.0.5_mq2cyprinb6qi7hdzoedcdddgq + react-redux: 8.0.7_nok3erdxukfns4p3xu5vwteodu redux: 4.2.1 redux-thunk: 2.4.2_redux@4.2.1 - reselect: 4.1.7 + reselect: 4.1.8 dev: false - /@remix-run/router/1.4.0: - resolution: {integrity: sha512-BJ9SxXux8zAg991UmT8slpwpsd31K1dHHbD3Ba4VzD+liLQ4WAMSxQp2d2ZPRPfN0jN2NPRowcSSoM7lCaF08Q==} + /@remix-run/router/1.7.2: + resolution: {integrity: sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A==} engines: {node: '>=14'} dev: true @@ -7913,10 +8221,10 @@ packages: '@rushstack/eslint-plugin': 0.12.0_2aulnmwxyjhjxqmg3aruit533m '@rushstack/eslint-plugin-packlets': 0.7.0_2aulnmwxyjhjxqmg3aruit533m '@rushstack/eslint-plugin-security': 0.6.0_2aulnmwxyjhjxqmg3aruit533m - '@typescript-eslint/eslint-plugin': 5.59.7_c3hx2p4vcdwcxdeh6yw5lktxre - '@typescript-eslint/experimental-utils': 5.59.7_2aulnmwxyjhjxqmg3aruit533m - '@typescript-eslint/parser': 5.59.7_2aulnmwxyjhjxqmg3aruit533m - '@typescript-eslint/typescript-estree': 5.59.7_typescript@5.0.4 + '@typescript-eslint/eslint-plugin': 5.59.11_5mon44wjbprshrigq6xxm7uwqu + '@typescript-eslint/experimental-utils': 5.59.11_2aulnmwxyjhjxqmg3aruit533m + '@typescript-eslint/parser': 5.59.11_2aulnmwxyjhjxqmg3aruit533m + '@typescript-eslint/typescript-estree': 5.59.11_typescript@5.0.4 eslint: 7.30.0 eslint-plugin-promise: 6.0.1_eslint@7.30.0 eslint-plugin-react: 7.27.1_eslint@7.30.0 @@ -7936,7 +8244,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@rushstack/tree-pattern': 0.2.4 - '@typescript-eslint/experimental-utils': 5.59.7_2aulnmwxyjhjxqmg3aruit533m + '@typescript-eslint/experimental-utils': 5.59.11_2aulnmwxyjhjxqmg3aruit533m eslint: 7.30.0 transitivePeerDependencies: - supports-color @@ -7949,7 +8257,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@rushstack/tree-pattern': 0.2.4 - '@typescript-eslint/experimental-utils': 5.59.7_2aulnmwxyjhjxqmg3aruit533m + '@typescript-eslint/experimental-utils': 5.59.11_2aulnmwxyjhjxqmg3aruit533m eslint: 7.30.0 transitivePeerDependencies: - supports-color @@ -7962,7 +8270,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@rushstack/tree-pattern': 0.2.4 - '@typescript-eslint/experimental-utils': 5.59.7_2aulnmwxyjhjxqmg3aruit533m + '@typescript-eslint/experimental-utils': 5.59.11_2aulnmwxyjhjxqmg3aruit533m eslint: 7.30.0 transitivePeerDependencies: - supports-color @@ -8023,6 +8331,7 @@ packages: lodash: 4.17.21 transitivePeerDependencies: - '@types/node' + - babel-plugin-macros - node-notifier - supports-color - ts-node @@ -8045,6 +8354,7 @@ packages: lodash: 4.17.21 transitivePeerDependencies: - '@types/node' + - babel-plugin-macros - node-notifier - supports-color - ts-node @@ -8091,6 +8401,7 @@ packages: typescript: 5.0.4 transitivePeerDependencies: - '@types/node' + - babel-plugin-macros - node-notifier - supports-color - ts-node @@ -8113,6 +8424,7 @@ packages: typescript: 5.0.4 transitivePeerDependencies: - '@types/node' + - babel-plugin-macros - node-notifier - supports-color - ts-node @@ -8183,7 +8495,7 @@ packages: fs-extra: 7.0.1 import-lazy: 4.0.0 jju: 1.4.0 - resolve: 1.22.1 + resolve: 1.22.4 semver: 7.3.8 z-schema: 5.0.5 dev: true @@ -8191,7 +8503,7 @@ packages: /@rushstack/rig-package/0.3.20: resolution: {integrity: sha512-XemFRFbH9FOk1Es1kTjrYydenf3hXtrV3xxMCEWPuOSn2Lcll/dsLzEULbhCL0Nf5nGMe52ewEiVtX3odd5Ukg==} dependencies: - resolve: 1.22.1 + resolve: 1.22.4 strip-json-comments: 3.1.1 dev: true @@ -8205,7 +8517,7 @@ packages: '@types/argparse': 1.0.38 argparse: 1.0.10 colors: 1.2.5 - string-argv: 0.3.1 + string-argv: 0.3.2 dev: true /@serverless-stack/aws-lambda-ric/2.0.13: @@ -8228,7 +8540,7 @@ packages: '@serverless-stack/resources': 0.67.0 aws-cdk: 2.7.0 aws-cdk-lib: 2.7.0_constructs@10.0.130 - aws-sdk: 2.1344.0 + aws-sdk: 2.1431.0 body-parser: 1.20.2 chalk: 4.1.2 chokidar: 3.5.3 @@ -8256,7 +8568,7 @@ packages: async-retry: 1.3.3 aws-cdk: 2.7.0 aws-cdk-lib: 2.7.0_constructs@10.0.130 - aws-sdk: 2.1344.0 + aws-sdk: 2.1431.0 chalk: 4.1.2 chokidar: 3.5.3 ci-info: 3.8.0 @@ -8268,7 +8580,7 @@ packages: dotenv: 10.0.0 dotenv-expand: 5.1.0 esbuild: 0.14.54 - eslint: 8.36.0 + eslint: 8.46.0 express: 4.18.1 fs-extra: 9.1.0 immer: 9.0.21 @@ -8299,7 +8611,7 @@ packages: chalk: 4.1.2 constructs: 10.0.130 cross-spawn: 7.0.3 - esbuild: 0.17.14 + esbuild: 0.18.20 fs-extra: 9.1.0 glob: 7.2.3 graphql: 15.8.0 @@ -8308,22 +8620,22 @@ packages: - supports-color dev: true - /@sinclair/typebox/0.25.24: - resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} + /@sinclair/typebox/0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} /@sindresorhus/is/4.6.0: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - /@sinonjs/commons/2.0.0: - resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} + /@sinonjs/commons/3.0.0: + resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} dependencies: type-detect: 4.0.8 - /@sinonjs/fake-timers/10.0.2: - resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} + /@sinonjs/fake-timers/10.3.0: + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} dependencies: - '@sinonjs/commons': 2.0.0 + '@sinonjs/commons': 3.0.0 /@storybook/addon-actions/6.4.22_e4p5kqppx5gth2ijr2xdvk24ma: resolution: {integrity: sha512-t2w3iLXFul+R/1ekYxIEzUOZZmvEa7EzUAVAuCHP4i6x0jBnTTZ7sAIUVRaxVREPguH5IqI/2OklYhKanty2Yw==} @@ -8342,7 +8654,7 @@ packages: '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/theming': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma - core-js: 3.29.1 + core-js: 3.32.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 @@ -8378,7 +8690,7 @@ packages: '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/theming': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma - core-js: 3.29.1 + core-js: 3.32.0 global: 4.4.0 memoizerific: 1.11.3 react: 16.13.1 @@ -8410,7 +8722,7 @@ packages: '@storybook/node-logger': 6.4.22 '@storybook/store': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@storybook/theming': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma - core-js: 3.29.1 + core-js: 3.32.0 lodash: 4.17.21 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 @@ -8473,10 +8785,10 @@ packages: optional: true dependencies: '@babel/core': 7.20.12 - '@babel/generator': 7.21.3 - '@babel/parser': 7.21.3 - '@babel/plugin-transform-react-jsx': 7.21.0_@babel+core@7.20.12 - '@babel/preset-env': 7.20.2_@babel+core@7.20.12 + '@babel/generator': 7.22.10 + '@babel/parser': 7.22.10 + '@babel/plugin-transform-react-jsx': 7.22.5_@babel+core@7.20.12 + '@babel/preset-env': 7.22.10_@babel+core@7.20.12 '@jest/transform': 26.6.2 '@mdx-js/loader': 1.6.22_react@16.13.1 '@mdx-js/mdx': 1.6.22 @@ -8500,12 +8812,12 @@ packages: acorn: 7.4.1 acorn-jsx: 5.3.2_acorn@7.4.1 acorn-walk: 7.2.0 - core-js: 3.29.1 + core-js: 3.32.0 doctrine: 3.0.0 - escodegen: 2.0.0 + escodegen: 2.1.0 fast-deep-equal: 3.1.3 global: 4.4.0 - html-tags: 3.2.0 + html-tags: 3.3.1 js-string-escape: 1.0.1 loader-utils: 2.0.4 lodash: 4.17.21 @@ -8575,7 +8887,7 @@ packages: '@storybook/api': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@storybook/node-logger': 6.4.22 babel-loader: 8.2.5_tb555f6titdaodihyrbadfrjbq - core-js: 3.29.1 + core-js: 3.32.0 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 regenerator-runtime: 0.13.11 @@ -8621,10 +8933,10 @@ packages: '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/router': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@types/qs': 6.9.7 - core-js: 3.29.1 + core-js: 3.32.0 global: 4.4.0 prop-types: 15.8.1 - qs: 6.11.1 + qs: 6.11.2 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 regenerator-runtime: 0.13.11 @@ -8650,7 +8962,7 @@ packages: '@storybook/components': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 - core-js: 3.29.1 + core-js: 3.32.0 global: 4.4.0 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 @@ -8675,7 +8987,7 @@ packages: '@storybook/components': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 - core-js: 3.29.1 + core-js: 3.32.0 global: 4.4.0 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 @@ -8700,7 +9012,7 @@ packages: '@storybook/api': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@storybook/components': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@storybook/theming': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma - core-js: 3.29.1 + core-js: 3.32.0 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 regenerator-runtime: 0.13.11 @@ -8725,7 +9037,7 @@ packages: '@storybook/components': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@storybook/core-events': 6.4.22 '@storybook/theming': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma - core-js: 3.29.1 + core-js: 3.32.0 global: 4.4.0 memoizerific: 1.11.3 prop-types: 15.8.1 @@ -8752,7 +9064,7 @@ packages: '@storybook/theming': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@types/react': 16.14.23 '@types/webpack-env': 1.18.0 - core-js: 3.29.1 + core-js: 3.32.0 global: 4.4.0 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 @@ -8774,7 +9086,7 @@ packages: '@storybook/semver': 7.3.2 '@storybook/theming': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@types/react': 16.14.23 - core-js: 3.29.1 + core-js: 3.32.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 @@ -8800,25 +9112,25 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-decorators': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-proposal-export-default-from': 7.18.10_@babel+core@7.20.12 + '@babel/plugin-proposal-decorators': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-proposal-export-default-from': 7.22.5_@babel+core@7.20.12 '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.12 '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.20.12 '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.20.12 '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.12 '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-transform-destructuring': 7.21.3_@babel+core@7.20.12 - '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.20.12 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.12 - '@babel/preset-env': 7.20.2_@babel+core@7.20.12 - '@babel/preset-react': 7.18.6_@babel+core@7.20.12 - '@babel/preset-typescript': 7.21.0_@babel+core@7.20.12 + '@babel/plugin-transform-arrow-functions': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-block-scoping': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-transform-classes': 7.22.6_@babel+core@7.20.12 + '@babel/plugin-transform-destructuring': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-transform-for-of': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-parameters': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-shorthand-properties': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-spread': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-template-literals': 7.22.5_@babel+core@7.20.12 + '@babel/preset-env': 7.22.10_@babel+core@7.20.12 + '@babel/preset-react': 7.22.5_@babel+core@7.20.12 + '@babel/preset-typescript': 7.22.5_@babel+core@7.20.12 '@storybook/addons': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@storybook/api': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@storybook/channel-postmessage': 6.4.22 @@ -8842,7 +9154,7 @@ packages: babel-plugin-macros: 2.8.0 babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.20.12 case-sensitive-paths-webpack-plugin: 2.4.0 - core-js: 3.29.1 + core-js: 3.32.0 css-loader: 3.6.0_webpack@4.44.2 file-loader: 6.2.0_webpack@4.44.2 find-up: 5.0.0 @@ -8868,7 +9180,7 @@ packages: webpack: 4.44.2 webpack-dev-middleware: 3.7.3_2jhnw6fokymnjfoumvhvkjoyjq webpack-filter-warnings-plugin: 1.2.1_webpack@4.44.2 - webpack-hot-middleware: 2.25.3 + webpack-hot-middleware: 2.25.4 webpack-virtual-modules: 0.2.2 transitivePeerDependencies: - '@types/react' @@ -8891,25 +9203,25 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-decorators': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-proposal-export-default-from': 7.18.10_@babel+core@7.20.12 + '@babel/plugin-proposal-decorators': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-proposal-export-default-from': 7.22.5_@babel+core@7.20.12 '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.12 '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.20.12 '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.20.12 '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.12 '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-transform-destructuring': 7.21.3_@babel+core@7.20.12 - '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.20.12 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.12 - '@babel/preset-env': 7.20.2_@babel+core@7.20.12 - '@babel/preset-react': 7.18.6_@babel+core@7.20.12 - '@babel/preset-typescript': 7.21.0_@babel+core@7.20.12 + '@babel/plugin-transform-arrow-functions': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-block-scoping': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-transform-classes': 7.22.6_@babel+core@7.20.12 + '@babel/plugin-transform-destructuring': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-transform-for-of': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-parameters': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-shorthand-properties': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-spread': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-template-literals': 7.22.5_@babel+core@7.20.12 + '@babel/preset-env': 7.22.10_@babel+core@7.20.12 + '@babel/preset-react': 7.22.5_@babel+core@7.20.12 + '@babel/preset-typescript': 7.22.5_@babel+core@7.20.12 '@storybook/addons': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@storybook/api': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@storybook/channel-postmessage': 6.4.22 @@ -8933,7 +9245,7 @@ packages: babel-plugin-macros: 2.8.0 babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.20.12 case-sensitive-paths-webpack-plugin: 2.4.0 - core-js: 3.29.1 + core-js: 3.32.0 css-loader: 3.6.0_webpack@4.44.2 file-loader: 6.2.0_webpack@4.44.2 find-up: 5.0.0 @@ -8959,7 +9271,7 @@ packages: webpack: 4.44.2 webpack-dev-middleware: 3.7.3_2jhnw6fokymnjfoumvhvkjoyjq webpack-filter-warnings-plugin: 1.2.1_webpack@4.44.2 - webpack-hot-middleware: 2.25.3 + webpack-hot-middleware: 2.25.4 webpack-virtual-modules: 0.2.2 transitivePeerDependencies: - '@types/react' @@ -8976,9 +9288,9 @@ packages: '@storybook/channels': 6.4.22 '@storybook/client-logger': 6.4.22 '@storybook/core-events': 6.4.22 - core-js: 3.29.1 + core-js: 3.32.0 global: 4.4.0 - qs: 6.11.1 + qs: 6.11.2 telejson: 5.3.3 dev: true @@ -8987,7 +9299,7 @@ packages: dependencies: '@storybook/channels': 6.4.22 '@storybook/client-logger': 6.4.22 - core-js: 3.29.1 + core-js: 3.32.0 global: 4.4.0 telejson: 5.3.3 dev: true @@ -8995,7 +9307,7 @@ packages: /@storybook/channels/6.4.22: resolution: {integrity: sha512-cfR74tu7MLah1A8Rru5sak71I+kH2e/sY6gkpVmlvBj4hEmdZp4Puj9PTeaKcMXh9DgIDPNA5mb8yvQH6VcyxQ==} dependencies: - core-js: 3.29.1 + core-js: 3.32.0 ts-dedent: 2.2.0 util-deprecate: 1.0.2 dev: true @@ -9007,8 +9319,8 @@ packages: jest: '*' dependencies: '@babel/core': 7.20.12 - '@babel/preset-env': 7.20.2_@babel+core@7.20.12 - '@storybook/codemod': 6.4.22_@babel+preset-env@7.20.2 + '@babel/preset-env': 7.22.10_@babel+core@7.20.12 + '@storybook/codemod': 6.4.22_@babel+preset-env@7.22.10 '@storybook/core-common': 6.4.22_hnbseasiobfcne23xkxxj6pamu '@storybook/csf-tools': 6.4.22 '@storybook/node-logger': 6.4.22 @@ -9016,16 +9328,16 @@ packages: boxen: 5.1.2 chalk: 4.1.2 commander: 6.2.1 - core-js: 3.29.1 + core-js: 3.32.0 cross-spawn: 7.0.3 - envinfo: 7.8.1 + envinfo: 7.10.0 express: 4.18.1 find-up: 5.0.0 fs-extra: 9.1.0 get-port: 5.1.1 globby: 11.1.0 jest: 29.3.1_@types+node@14.18.36 - jscodeshift: 0.13.1_@babel+preset-env@7.20.2 + jscodeshift: 0.13.1_@babel+preset-env@7.22.10 json5: 2.2.3 leven: 3.1.0 prompts: 2.4.2 @@ -9061,12 +9373,12 @@ packages: '@storybook/store': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@types/qs': 6.9.7 '@types/webpack-env': 1.18.0 - core-js: 3.29.1 + core-js: 3.32.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 memoizerific: 1.11.3 - qs: 6.11.1 + qs: 6.11.2 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 regenerator-runtime: 0.13.11 @@ -9081,22 +9393,22 @@ packages: /@storybook/client-logger/6.4.22: resolution: {integrity: sha512-LXhxh/lcDsdGnK8kimqfhu3C0+D2ylCSPPQNbU0IsLRmTfbpQYMdyl0XBjPdHiRVwlL7Gkw5OMjYemQgJ02zlw==} dependencies: - core-js: 3.29.1 + core-js: 3.32.0 global: 4.4.0 dev: true - /@storybook/codemod/6.4.22_@babel+preset-env@7.20.2: + /@storybook/codemod/6.4.22_@babel+preset-env@7.22.10: resolution: {integrity: sha512-xqnTKUQU2W3vS3dce9s4bYhy15tIfAHIzog37jqpKYOHnByXpPj/KkluGePtv5I6cvMxqP8IhQzn+Eh/lVjM4Q==} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.10 '@mdx-js/mdx': 1.6.22 '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/csf-tools': 6.4.22 '@storybook/node-logger': 6.4.22 - core-js: 3.29.1 + core-js: 3.32.0 cross-spawn: 7.0.3 globby: 11.1.0 - jscodeshift: 0.13.1_@babel+preset-env@7.20.2 + jscodeshift: 0.13.1_@babel+preset-env@7.22.10 lodash: 4.17.21 prettier: 2.3.0 recast: 0.19.1 @@ -9112,7 +9424,7 @@ packages: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 dependencies: - '@popperjs/core': 2.11.7 + '@popperjs/core': 2.11.8 '@storybook/client-logger': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/theming': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma @@ -9120,11 +9432,11 @@ packages: '@types/overlayscrollbars': 1.12.1 '@types/react-syntax-highlighter': 11.0.5 color-convert: 2.0.1 - core-js: 3.29.1 + core-js: 3.32.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 - markdown-to-jsx: 7.2.0_react@16.13.1 + markdown-to-jsx: 7.3.2_react@16.13.1 memoizerific: 1.11.3 overlayscrollbars: 1.13.3 polished: 4.2.2 @@ -9134,7 +9446,7 @@ packages: react-dom: 16.13.1_react@16.13.1 react-popper-tooltip: 3.1.1_5owmthsvj5ictknaj3ev736ofq react-syntax-highlighter: 13.5.3_react@16.13.1 - react-textarea-autosize: 8.4.1_qjwx5m6wssz3lnb35xwkc3pz6q + react-textarea-autosize: 8.5.2_qjwx5m6wssz3lnb35xwkc3pz6q regenerator-runtime: 0.13.11 ts-dedent: 2.2.0 util-deprecate: 1.0.2 @@ -9165,10 +9477,10 @@ packages: '@storybook/ui': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 - core-js: 3.29.1 + core-js: 3.32.0 global: 4.4.0 lodash: 4.17.21 - qs: 6.11.1 + qs: 6.11.2 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 regenerator-runtime: 0.13.11 @@ -9193,25 +9505,25 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-decorators': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-proposal-export-default-from': 7.18.10_@babel+core@7.20.12 + '@babel/plugin-proposal-decorators': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-proposal-export-default-from': 7.22.5_@babel+core@7.20.12 '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.12 '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.20.12 '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.20.12 '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.12 '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-transform-destructuring': 7.21.3_@babel+core@7.20.12 - '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.20.12 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.20.12 - '@babel/preset-env': 7.20.2_@babel+core@7.20.12 - '@babel/preset-react': 7.18.6_@babel+core@7.20.12 - '@babel/preset-typescript': 7.21.0_@babel+core@7.20.12 - '@babel/register': 7.21.0_@babel+core@7.20.12 + '@babel/plugin-transform-arrow-functions': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-block-scoping': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-transform-classes': 7.22.6_@babel+core@7.20.12 + '@babel/plugin-transform-destructuring': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-transform-for-of': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-parameters': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-shorthand-properties': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-spread': 7.22.5_@babel+core@7.20.12 + '@babel/preset-env': 7.22.10_@babel+core@7.20.12 + '@babel/preset-react': 7.22.5_@babel+core@7.20.12 + '@babel/preset-typescript': 7.22.5_@babel+core@7.20.12 + '@babel/register': 7.22.5_@babel+core@7.20.12 '@storybook/node-logger': 6.4.22 '@storybook/semver': 7.3.2 '@types/node': 14.18.36 @@ -9220,14 +9532,14 @@ packages: babel-plugin-macros: 3.1.0 babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.20.12 chalk: 4.1.2 - core-js: 3.29.1 + core-js: 3.32.0 express: 4.18.1 file-system-cache: 1.1.0 find-up: 5.0.0 fork-ts-checker-webpack-plugin: 6.5.3_2if2pfw4ytlihdsiqpdavzlwg4 fs-extra: 9.1.0 glob: 7.2.3 - handlebars: 4.7.7 + handlebars: 4.7.8 interpret: 2.2.0 json5: 2.2.3 lazy-universal-dotenv: 3.0.1 @@ -9263,25 +9575,25 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-decorators': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-proposal-export-default-from': 7.18.10_@babel+core@7.20.12 + '@babel/plugin-proposal-decorators': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-proposal-export-default-from': 7.22.5_@babel+core@7.20.12 '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.12 '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.20.12 '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.20.12 '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.12 '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-transform-destructuring': 7.21.3_@babel+core@7.20.12 - '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.21.3_@babel+core@7.20.12 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.20.12 - '@babel/preset-env': 7.20.2_@babel+core@7.20.12 - '@babel/preset-react': 7.18.6_@babel+core@7.20.12 - '@babel/preset-typescript': 7.21.0_@babel+core@7.20.12 - '@babel/register': 7.21.0_@babel+core@7.20.12 + '@babel/plugin-transform-arrow-functions': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-block-scoping': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-transform-classes': 7.22.6_@babel+core@7.20.12 + '@babel/plugin-transform-destructuring': 7.22.10_@babel+core@7.20.12 + '@babel/plugin-transform-for-of': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-parameters': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-shorthand-properties': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-transform-spread': 7.22.5_@babel+core@7.20.12 + '@babel/preset-env': 7.22.10_@babel+core@7.20.12 + '@babel/preset-react': 7.22.5_@babel+core@7.20.12 + '@babel/preset-typescript': 7.22.5_@babel+core@7.20.12 + '@babel/register': 7.22.5_@babel+core@7.20.12 '@storybook/node-logger': 6.4.22 '@storybook/semver': 7.3.2 '@types/node': 14.18.36 @@ -9290,14 +9602,14 @@ packages: babel-plugin-macros: 3.1.0 babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.20.12 chalk: 4.1.2 - core-js: 3.29.1 + core-js: 3.32.0 express: 4.18.1 file-system-cache: 1.1.0 find-up: 5.0.0 fork-ts-checker-webpack-plugin: 6.5.3_e3gvcbqyz74feggzy4n3jv5qrm fs-extra: 9.1.0 glob: 7.2.3 - handlebars: 4.7.7 + handlebars: 4.7.8 interpret: 2.2.0 json5: 2.2.3 lazy-universal-dotenv: 3.0.1 @@ -9324,7 +9636,7 @@ packages: /@storybook/core-events/6.4.22: resolution: {integrity: sha512-5GYY5+1gd58Gxjqex27RVaX6qbfIQmJxcbzbNpXGNSqwqAuIIepcV1rdCVm6I4C3Yb7/AQ3cN5dVbf33QxRIwA==} dependencies: - core-js: 3.29.1 + core-js: 3.32.0 dev: true /@storybook/core-server/6.4.22_cwhzethedycb6rate7ab7puama: @@ -9364,7 +9676,7 @@ packages: cli-table3: 0.6.3 commander: 6.2.1 compression: 1.7.4 - core-js: 3.29.1 + core-js: 3.32.0 cpy: 8.1.2 detect-port: 1.5.1 express: 4.18.1 @@ -9437,7 +9749,7 @@ packages: cli-table3: 0.6.3 commander: 6.2.1 compression: 1.7.4 - core-js: 3.29.1 + core-js: 3.32.0 cpy: 8.1.2 detect-port: 1.5.1 express: 4.18.1 @@ -9543,15 +9855,15 @@ packages: resolution: {integrity: sha512-LMu8MZAiQspJAtMBLU2zitsIkqQv7jOwX7ih5JrXlyaDticH7l2j6Q+1mCZNWUOiMTizj0ivulmUsSaYbpToSw==} dependencies: '@babel/core': 7.20.12 - '@babel/generator': 7.21.3 - '@babel/parser': 7.21.3 - '@babel/plugin-transform-react-jsx': 7.21.0_@babel+core@7.20.12 - '@babel/preset-env': 7.20.2_@babel+core@7.20.12 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 + '@babel/generator': 7.22.10 + '@babel/parser': 7.22.10 + '@babel/plugin-transform-react-jsx': 7.22.5_@babel+core@7.20.12 + '@babel/preset-env': 7.22.10_@babel+core@7.20.12 + '@babel/traverse': 7.22.10 + '@babel/types': 7.22.10 '@mdx-js/mdx': 1.6.22 '@storybook/csf': 0.0.2--canary.87bc651.0 - core-js: 3.29.1 + core-js: 3.32.0 fs-extra: 9.1.0 global: 4.4.0 js-string-escape: 1.0.1 @@ -9580,8 +9892,8 @@ packages: optional: true dependencies: '@babel/core': 7.20.12 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.12 - '@babel/preset-react': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-template-literals': 7.22.5_@babel+core@7.20.12 + '@babel/preset-react': 7.22.5_@babel+core@7.20.12 '@storybook/addons': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@storybook/core-client': 6.4.22_qa6fh5b4egdwkein2ymbymqf6i '@storybook/core-common': 6.4.22_hnbseasiobfcne23xkxxj6pamu @@ -9593,7 +9905,7 @@ packages: babel-loader: 8.2.5_tb555f6titdaodihyrbadfrjbq case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 - core-js: 3.29.1 + core-js: 3.32.0 css-loader: 3.6.0_webpack@4.44.2 express: 4.18.1 file-loader: 6.2.0_webpack@4.44.2 @@ -9639,8 +9951,8 @@ packages: optional: true dependencies: '@babel/core': 7.20.12 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.12 - '@babel/preset-react': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-template-literals': 7.22.5_@babel+core@7.20.12 + '@babel/preset-react': 7.22.5_@babel+core@7.20.12 '@storybook/addons': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@storybook/core-client': 6.4.22_qa6fh5b4egdwkein2ymbymqf6i '@storybook/core-common': 6.4.22_ugpf6zoh4655pnxdhdfk6eh3ui @@ -9652,7 +9964,7 @@ packages: babel-loader: 8.2.5_tb555f6titdaodihyrbadfrjbq case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 - core-js: 3.29.1 + core-js: 3.32.0 css-loader: 3.6.0_webpack@4.44.2 express: 4.18.1 file-loader: 6.2.0_webpack@4.44.2 @@ -9692,7 +10004,7 @@ packages: dependencies: '@types/npmlog': 4.1.4 chalk: 4.1.2 - core-js: 3.29.1 + core-js: 3.32.0 npmlog: 5.0.1 pretty-hrtime: 1.0.3 dev: true @@ -9700,7 +10012,7 @@ packages: /@storybook/postinstall/6.4.22: resolution: {integrity: sha512-LdIvA+l70Mp5FSkawOC16uKocefc+MZLYRHqjTjgr7anubdi6y7W4n9A7/Yw4IstZHoknfL88qDj/uK5N+Ahzw==} dependencies: - core-js: 3.29.1 + core-js: 3.32.0 dev: true /@storybook/preview-web/6.4.22_e4p5kqppx5gth2ijr2xdvk24ma: @@ -9716,10 +10028,10 @@ packages: '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/store': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma ansi-to-html: 0.6.15 - core-js: 3.29.1 + core-js: 3.32.0 global: 4.4.0 lodash: 4.17.21 - qs: 6.11.1 + qs: 6.11.2 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 regenerator-runtime: 0.13.11 @@ -9768,8 +10080,8 @@ packages: optional: true dependencies: '@babel/core': 7.20.12 - '@babel/preset-flow': 7.18.6_@babel+core@7.20.12 - '@babel/preset-react': 7.18.6_@babel+core@7.20.12 + '@babel/preset-flow': 7.22.5_@babel+core@7.20.12 + '@babel/preset-react': 7.22.5_@babel+core@7.20.12 '@pmmmwh/react-refresh-webpack-plugin': 0.5.10_yceubsmjd6jm3woocckpqejnhy '@storybook/addons': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@storybook/core': 6.4.22_qa6fh5b4egdwkein2ymbymqf6i @@ -9785,7 +10097,7 @@ packages: babel-plugin-add-react-displayname: 0.0.5 babel-plugin-named-asset-import: 0.3.8_@babel+core@7.20.12 babel-plugin-react-docgen: 4.2.1 - core-js: 3.29.1 + core-js: 3.32.0 global: 4.4.0 lodash: 4.17.21 prop-types: 15.8.1 @@ -9834,8 +10146,8 @@ packages: optional: true dependencies: '@babel/core': 7.20.12 - '@babel/preset-flow': 7.18.6_@babel+core@7.20.12 - '@babel/preset-react': 7.18.6_@babel+core@7.20.12 + '@babel/preset-flow': 7.22.5_@babel+core@7.20.12 + '@babel/preset-react': 7.22.5_@babel+core@7.20.12 '@pmmmwh/react-refresh-webpack-plugin': 0.5.10_yceubsmjd6jm3woocckpqejnhy '@storybook/addons': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@storybook/core': 6.4.22_hzk7bpzeiaw7tscmchnmaav4om @@ -9851,7 +10163,7 @@ packages: babel-plugin-add-react-displayname: 0.0.5 babel-plugin-named-asset-import: 0.3.8_@babel+core@7.20.12 babel-plugin-react-docgen: 4.2.1 - core-js: 3.29.1 + core-js: 3.32.0 global: 4.4.0 lodash: 4.17.21 prop-types: 15.8.1 @@ -9891,17 +10203,17 @@ packages: dependencies: '@storybook/client-logger': 6.4.22 '@types/react': 16.14.23 - core-js: 3.29.1 + core-js: 3.32.0 fast-deep-equal: 3.1.3 global: 4.4.0 history: 5.0.0 lodash: 4.17.21 memoizerific: 1.11.3 - qs: 6.11.1 + qs: 6.11.2 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 - react-router: 6.9.0_qjwx5m6wssz3lnb35xwkc3pz6q - react-router-dom: 6.9.0_e4p5kqppx5gth2ijr2xdvk24ma + react-router: 6.14.2_qjwx5m6wssz3lnb35xwkc3pz6q + react-router-dom: 6.14.2_e4p5kqppx5gth2ijr2xdvk24ma ts-dedent: 2.2.0 dev: true @@ -9910,7 +10222,7 @@ packages: engines: {node: '>=10'} hasBin: true dependencies: - core-js: 3.29.1 + core-js: 3.32.0 find-up: 4.1.0 dev: true @@ -9923,7 +10235,7 @@ packages: '@storybook/addons': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma '@storybook/client-logger': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 - core-js: 3.29.1 + core-js: 3.32.0 estraverse: 5.3.0 global: 4.4.0 loader-utils: 2.0.4 @@ -9946,7 +10258,7 @@ packages: '@storybook/client-logger': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 - core-js: 3.29.1 + core-js: 3.32.0 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 @@ -9971,11 +10283,11 @@ packages: dependencies: '@emotion/core': 10.3.1_qjwx5m6wssz3lnb35xwkc3pz6q '@emotion/is-prop-valid': 0.8.8 - '@emotion/serialize': 1.1.1 + '@emotion/serialize': 1.1.2 '@emotion/styled': 10.3.0_tpm53lxjhhnjmtj6wgjp3t3pxi - '@emotion/utils': 1.2.0 + '@emotion/utils': 1.2.1 '@storybook/client-logger': 6.4.22 - core-js: 3.29.1 + core-js: 3.32.0 deep-object-diff: 1.1.9 emotion-theming: 10.3.0_tpm53lxjhhnjmtj6wgjp3t3pxi global: 4.4.0 @@ -10006,17 +10318,17 @@ packages: '@storybook/semver': 7.3.2 '@storybook/theming': 6.4.22_e4p5kqppx5gth2ijr2xdvk24ma copy-to-clipboard: 3.3.3 - core-js: 3.29.1 - core-js-pure: 3.29.1 + core-js: 3.32.0 + core-js-pure: 3.32.0 downshift: 6.1.12_react@16.13.1 emotion-theming: 10.3.0_tpm53lxjhhnjmtj6wgjp3t3pxi fuse.js: 3.6.1 global: 4.4.0 lodash: 4.17.21 - markdown-to-jsx: 7.2.0_react@16.13.1 + markdown-to-jsx: 7.3.2_react@16.13.1 memoizerific: 1.11.3 polished: 4.2.2 - qs: 6.11.1 + qs: 6.11.2 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 react-draggable: 4.4.5_5owmthsvj5ictknaj3ev736ofq @@ -10032,7 +10344,7 @@ packages: /@swc/helpers/0.4.14: resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} dependencies: - tslib: 2.5.0 + tslib: 2.6.1 dev: false /@szmarczak/http-timer/4.0.6: @@ -10066,30 +10378,30 @@ packages: resolution: {integrity: sha512-Vsyi9ogDAY3REZDjYnXMRJJa62SDvxHXxJI5nGDQdZW058dDE+av/anynN2rLKbCKXDRNw3D/sQmqxVflZFi4A==} dev: true - /@types/babel__core/7.20.0: - resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} + /@types/babel__core/7.20.1: + resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} dependencies: - '@babel/parser': 7.21.3 - '@babel/types': 7.21.3 + '@babel/parser': 7.22.10 + '@babel/types': 7.22.10 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 - '@types/babel__traverse': 7.18.3 + '@types/babel__traverse': 7.20.1 /@types/babel__generator/7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.10 /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.21.3 - '@babel/types': 7.21.3 + '@babel/parser': 7.22.10 + '@babel/types': 7.22.10 - /@types/babel__traverse/7.18.3: - resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} + /@types/babel__traverse/7.20.1: + resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} dependencies: - '@babel/types': 7.21.3 + '@babel/types': 7.22.10 /@types/body-parser/1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} @@ -10137,10 +10449,10 @@ packages: resolution: {integrity: sha512-GUvNiia85zTDDIx0iPrtF3pI8dwrQkfuokEqxqPDE55qxH0U5SZz4awVZjiJLWN2ZZRkXCUqgsMUbygXY+kytA==} dev: true - /@types/connect-history-api-fallback/1.3.5: - resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} + /@types/connect-history-api-fallback/1.5.0: + resolution: {integrity: sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==} dependencies: - '@types/express-serve-static-core': 4.17.33 + '@types/express-serve-static-core': 4.17.35 '@types/node': 14.18.36 dev: false @@ -10176,7 +10488,7 @@ packages: resolution: {integrity: sha512-74hbvsnc+7TEDa1z5YLSe4/q8hGYB3USNvCuzHUJrjPV6hXaq8IXcngCrHkuvFt0+8rFz7xYXrHgNayIX0UZvQ==} dependencies: '@types/estree': 0.0.50 - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.12 /@types/estree/0.0.50: resolution: {integrity: sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==} @@ -10188,20 +10500,21 @@ packages: resolution: {integrity: sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==} dev: true - /@types/express-serve-static-core/4.17.33: - resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} + /@types/express-serve-static-core/4.17.35: + resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} dependencies: '@types/node': 14.18.36 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 + '@types/send': 0.17.1 /@types/express/4.17.13: resolution: {integrity: sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==} dependencies: '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.33 + '@types/express-serve-static-core': 4.17.35 '@types/qs': 6.9.7 - '@types/serve-static': 1.15.1 + '@types/serve-static': 1.15.2 /@types/fs-extra/7.0.0: resolution: {integrity: sha512-ndoMMbGyuToTy4qB6Lex/inR98nPiNHacsgMPvy+zqMLgSxbt8VtWpDArpGp69h1fEDQHn1KB+9DWD++wgbwYA==} @@ -10222,10 +10535,10 @@ packages: dependencies: '@types/node': 14.18.36 - /@types/hast/2.3.4: - resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} + /@types/hast/2.3.5: + resolution: {integrity: sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 2.0.7 dev: true /@types/heft-jest/1.0.1: @@ -10248,8 +10561,11 @@ packages: /@types/http-cache-semantics/4.0.1: resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} - /@types/http-proxy/1.17.10: - resolution: {integrity: sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==} + /@types/http-errors/2.0.1: + resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} + + /@types/http-proxy/1.17.11: + resolution: {integrity: sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==} dependencies: '@types/node': 14.18.36 @@ -10291,14 +10607,14 @@ packages: /@types/jest/29.2.5: resolution: {integrity: sha512-H2cSxkKgVmqNHXP7TC2L/WUorrZu8ZigyRywfVzv6EyBlxj39n4C00hjXYQWsbwqgElaj/CiAeSRmk5GoaKTgw==} dependencies: - expect: 29.5.0 - pretty-format: 29.5.0 + expect: 29.6.2 + pretty-format: 29.6.2 /@types/jest/29.5.3: resolution: {integrity: sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==} dependencies: - expect: 29.5.0 - pretty-format: 29.5.0 + expect: 29.6.2 + pretty-format: 29.6.2 dev: true /@types/jju/1.4.1: @@ -10316,8 +10632,8 @@ packages: '@types/tough-cookie': 4.0.2 parse5: 7.1.2 - /@types/json-schema/7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + /@types/json-schema/7.0.12: + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} /@types/keyv/3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} @@ -10338,16 +10654,19 @@ packages: resolution: {integrity: sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==} dev: false - /@types/mdast/3.0.11: - resolution: {integrity: sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==} + /@types/mdast/3.0.12: + resolution: {integrity: sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 2.0.7 dev: true /@types/mime-types/2.1.1: resolution: {integrity: sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==} dev: true + /@types/mime/1.3.2: + resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} + /@types/mime/3.0.1: resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} @@ -10362,7 +10681,7 @@ packages: resolution: {integrity: sha512-M2BLHQdEmDmH671h0GIlOQQJrgezd1vNqq7PVj1VOsHZ2uQQb4iPiQIl0SlMdhxZPUsLIfEklmeEHXg8DJRewA==} deprecated: This is a stub types definition. minipass provides its own type definitions, so you do not need this installed. dependencies: - minipass: 4.2.5 + minipass: 7.0.2 dev: true /@types/mocha/9.1.1: @@ -10426,8 +10745,8 @@ packages: resolution: {integrity: sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==} dev: true - /@types/prettier/2.7.2: - resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} + /@types/prettier/2.7.3: + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} /@types/pretty-hrtime/1.0.1: resolution: {integrity: sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==} @@ -10467,7 +10786,7 @@ packages: dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 - csstype: 3.1.1 + csstype: 3.1.2 /@types/read-package-tree/5.1.0: resolution: {integrity: sha512-QEaGDX5COe5Usog79fca6PEycs59075O/W0QcOJjVNv+ZQ26xjqxg8sWu63Lwdt4KAI08gb4Muho1EbEKs3YFw==} @@ -10492,6 +10811,12 @@ packages: /@types/semver/7.5.0: resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + /@types/send/0.17.1: + resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} + dependencies: + '@types/mime': 1.3.2 + '@types/node': 14.18.36 + /@types/serialize-javascript/5.0.2: resolution: {integrity: sha512-BRLlwZzRoZukGaBtcUxkLsZsQfWZpvog6MZk3PWQO9Q6pXmXFzjU5iGzZ+943evp6tkkbN98N1Z31KT0UG1yRw==} dev: true @@ -10502,9 +10827,10 @@ packages: '@types/express': 4.17.13 dev: false - /@types/serve-static/1.15.1: - resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} + /@types/serve-static/1.15.2: + resolution: {integrity: sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==} dependencies: + '@types/http-errors': 2.0.1 '@types/mime': 3.0.1 '@types/node': 14.18.36 @@ -10564,23 +10890,27 @@ packages: dependencies: source-map: 0.6.1 - /@types/unist/2.0.6: - resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} + /@types/unist/2.0.7: + resolution: {integrity: sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==} dev: true - /@types/update-notifier/6.0.2: - resolution: {integrity: sha512-/OKZaYpzHqBO9D+IzqAB7VfC/fx+xl/CM1upD6D56QPNyvAsFULAVLfjlBIGCl1ibU1rKqZV45xOj018WqHhlA==} + /@types/update-notifier/6.0.4: + resolution: {integrity: sha512-CiKJPSmt/3F4sVnkQTjnP/onKtTJxRkib6Gvw4XESM8FNsHlvRnBNqU5qL0IQmqjtKnz5e9E6Y7xChOpvxFzKg==} dependencies: '@types/configstore': 6.0.0 - boxen: 7.0.2 + boxen: 7.1.1 dev: true /@types/use-sync-external-store/0.0.3: resolution: {integrity: sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==} dev: false - /@types/vscode/1.80.0: - resolution: {integrity: sha512-qK/CmOdS2o7ry3k6YqU4zD3R2AYlJfbwBoSbKpBoP+GpXNE+0NEgJOli4n0bm0diK5kfBnchgCEj4igQz/44Hg==} + /@types/uuid/8.3.4: + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + dev: true + + /@types/vscode/1.81.0: + resolution: {integrity: sha512-YIaCwpT+O2E7WOMq0eCgBEABE++SX3Yl/O02GoMIF2DO3qAtvw7m6BXFYsxnc6XyzwZgh6/s/UG78LSSombl2w==} dev: true /@types/watchpack/2.4.0: @@ -10614,8 +10944,8 @@ packages: resolution: {integrity: sha512-xe+rWyom8xn0laMWH3M7elOpWj2rDQk+3f13RAur89GKsf4FO5qmBNtXXtwepFo2XNgQI0nePdCEStoHFnNvWg==} dev: true - /@types/ws/8.5.4: - resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} + /@types/ws/8.5.5: + resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} dependencies: '@types/node': 14.18.36 dev: false @@ -10638,8 +10968,8 @@ packages: dependencies: '@types/yargs-parser': 21.0.0 - /@typescript-eslint/eslint-plugin/5.59.7_7yosyjls7ieoemdl24ktrlsrzm: - resolution: {integrity: sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==} + /@typescript-eslint/eslint-plugin/5.59.11_5mon44wjbprshrigq6xxm7uwqu: + resolution: {integrity: sha512-XxuOfTkCUiOSyBWIvHlUraLw/JT/6Io1365RO6ZuI88STKMavJZPNMU0lFcUTeQXEhHiv64CbxYxBNoDVSmghg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -10649,13 +10979,13 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.4.1 - '@typescript-eslint/parser': 5.59.7_ucoohk2w7gukx6ccuul7rl7pnq - '@typescript-eslint/scope-manager': 5.59.7_typescript@5.0.4 - '@typescript-eslint/type-utils': 5.59.7_ucoohk2w7gukx6ccuul7rl7pnq - '@typescript-eslint/utils': 5.59.7_ucoohk2w7gukx6ccuul7rl7pnq + '@eslint-community/regexpp': 4.6.2 + '@typescript-eslint/parser': 5.59.11_2aulnmwxyjhjxqmg3aruit533m + '@typescript-eslint/scope-manager': 5.59.11_typescript@5.0.4 + '@typescript-eslint/type-utils': 5.59.11_2aulnmwxyjhjxqmg3aruit533m + '@typescript-eslint/utils': 5.59.11_2aulnmwxyjhjxqmg3aruit533m debug: 4.3.4 - eslint: 8.7.0 + eslint: 7.30.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 @@ -10664,10 +10994,10 @@ packages: typescript: 5.0.4 transitivePeerDependencies: - supports-color - dev: false + dev: true - /@typescript-eslint/eslint-plugin/5.59.7_c3hx2p4vcdwcxdeh6yw5lktxre: - resolution: {integrity: sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==} + /@typescript-eslint/eslint-plugin/5.59.11_t4uc3crzdwrij7lgcgc6l6vdpy: + resolution: {integrity: sha512-XxuOfTkCUiOSyBWIvHlUraLw/JT/6Io1365RO6ZuI88STKMavJZPNMU0lFcUTeQXEhHiv64CbxYxBNoDVSmghg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -10677,13 +11007,13 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.4.1 - '@typescript-eslint/parser': 5.59.7_2aulnmwxyjhjxqmg3aruit533m - '@typescript-eslint/scope-manager': 5.59.7_typescript@5.0.4 - '@typescript-eslint/type-utils': 5.59.7_2aulnmwxyjhjxqmg3aruit533m - '@typescript-eslint/utils': 5.59.7_2aulnmwxyjhjxqmg3aruit533m + '@eslint-community/regexpp': 4.6.2 + '@typescript-eslint/parser': 5.59.11_ucoohk2w7gukx6ccuul7rl7pnq + '@typescript-eslint/scope-manager': 5.59.11_typescript@5.0.4 + '@typescript-eslint/type-utils': 5.59.11_ucoohk2w7gukx6ccuul7rl7pnq + '@typescript-eslint/utils': 5.59.11_ucoohk2w7gukx6ccuul7rl7pnq debug: 4.3.4 - eslint: 7.30.0 + eslint: 8.7.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 @@ -10692,36 +11022,36 @@ packages: typescript: 5.0.4 transitivePeerDependencies: - supports-color - dev: true + dev: false - /@typescript-eslint/experimental-utils/5.59.7_2aulnmwxyjhjxqmg3aruit533m: - resolution: {integrity: sha512-jqM0Cjfvta/sBlY1MxdXYv853/dJUC2wmUWnKoG2srwp0njNGQ6Zu/XLWoRFiLvocQbzBbpHkPFwKgC2UqyovA==} + /@typescript-eslint/experimental-utils/5.59.11_2aulnmwxyjhjxqmg3aruit533m: + resolution: {integrity: sha512-GkQGV0UF/V5Ra7gZMBmiD1WrYUFOJNvCZs+XQnUyJoxmqfWMXVNyB2NVCPRKefoQcpvTv9UpJyfCvsJFs8NzzQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.59.7_2aulnmwxyjhjxqmg3aruit533m + '@typescript-eslint/utils': 5.59.11_2aulnmwxyjhjxqmg3aruit533m eslint: 7.30.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/experimental-utils/5.59.7_ucoohk2w7gukx6ccuul7rl7pnq: - resolution: {integrity: sha512-jqM0Cjfvta/sBlY1MxdXYv853/dJUC2wmUWnKoG2srwp0njNGQ6Zu/XLWoRFiLvocQbzBbpHkPFwKgC2UqyovA==} + /@typescript-eslint/experimental-utils/5.59.11_ucoohk2w7gukx6ccuul7rl7pnq: + resolution: {integrity: sha512-GkQGV0UF/V5Ra7gZMBmiD1WrYUFOJNvCZs+XQnUyJoxmqfWMXVNyB2NVCPRKefoQcpvTv9UpJyfCvsJFs8NzzQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.59.7_ucoohk2w7gukx6ccuul7rl7pnq + '@typescript-eslint/utils': 5.59.11_ucoohk2w7gukx6ccuul7rl7pnq eslint: 8.7.0 transitivePeerDependencies: - supports-color - typescript dev: false - /@typescript-eslint/parser/5.59.7_2aulnmwxyjhjxqmg3aruit533m: - resolution: {integrity: sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==} + /@typescript-eslint/parser/5.59.11_2aulnmwxyjhjxqmg3aruit533m: + resolution: {integrity: sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -10730,9 +11060,9 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.59.7_typescript@5.0.4 - '@typescript-eslint/types': 5.59.7_typescript@5.0.4 - '@typescript-eslint/typescript-estree': 5.59.7_typescript@5.0.4 + '@typescript-eslint/scope-manager': 5.59.11_typescript@5.0.4 + '@typescript-eslint/types': 5.59.11_typescript@5.0.4 + '@typescript-eslint/typescript-estree': 5.59.11_typescript@5.0.4 debug: 4.3.4 eslint: 7.30.0 typescript: 5.0.4 @@ -10740,8 +11070,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser/5.59.7_ucoohk2w7gukx6ccuul7rl7pnq: - resolution: {integrity: sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==} + /@typescript-eslint/parser/5.59.11_ucoohk2w7gukx6ccuul7rl7pnq: + resolution: {integrity: sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -10750,26 +11080,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.59.7_typescript@5.0.4 - '@typescript-eslint/types': 5.59.7_typescript@5.0.4 - '@typescript-eslint/typescript-estree': 5.59.7_typescript@5.0.4 + '@typescript-eslint/scope-manager': 5.59.11_typescript@5.0.4 + '@typescript-eslint/types': 5.59.11_typescript@5.0.4 + '@typescript-eslint/typescript-estree': 5.59.11_typescript@5.0.4 debug: 4.3.4 eslint: 8.7.0 typescript: 5.0.4 transitivePeerDependencies: - supports-color - /@typescript-eslint/scope-manager/5.59.7_typescript@5.0.4: - resolution: {integrity: sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==} + /@typescript-eslint/scope-manager/5.59.11_typescript@5.0.4: + resolution: {integrity: sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.59.7_typescript@5.0.4 - '@typescript-eslint/visitor-keys': 5.59.7_typescript@5.0.4 + '@typescript-eslint/types': 5.59.11_typescript@5.0.4 + '@typescript-eslint/visitor-keys': 5.59.11_typescript@5.0.4 transitivePeerDependencies: - typescript - /@typescript-eslint/type-utils/5.59.7_2aulnmwxyjhjxqmg3aruit533m: - resolution: {integrity: sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==} + /@typescript-eslint/type-utils/5.59.11_2aulnmwxyjhjxqmg3aruit533m: + resolution: {integrity: sha512-LZqVY8hMiVRF2a7/swmkStMYSoXMFlzL6sXV6U/2gL5cwnLWQgLEG8tjWPpaE4rMIdZ6VKWwcffPlo1jPfk43g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -10778,8 +11108,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.59.7_typescript@5.0.4 - '@typescript-eslint/utils': 5.59.7_2aulnmwxyjhjxqmg3aruit533m + '@typescript-eslint/typescript-estree': 5.59.11_typescript@5.0.4 + '@typescript-eslint/utils': 5.59.11_2aulnmwxyjhjxqmg3aruit533m debug: 4.3.4 eslint: 7.30.0 tsutils: 3.21.0_typescript@5.0.4 @@ -10788,8 +11118,8 @@ packages: - supports-color dev: true - /@typescript-eslint/type-utils/5.59.7_ucoohk2w7gukx6ccuul7rl7pnq: - resolution: {integrity: sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==} + /@typescript-eslint/type-utils/5.59.11_ucoohk2w7gukx6ccuul7rl7pnq: + resolution: {integrity: sha512-LZqVY8hMiVRF2a7/swmkStMYSoXMFlzL6sXV6U/2gL5cwnLWQgLEG8tjWPpaE4rMIdZ6VKWwcffPlo1jPfk43g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -10798,8 +11128,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.59.7_typescript@5.0.4 - '@typescript-eslint/utils': 5.59.7_ucoohk2w7gukx6ccuul7rl7pnq + '@typescript-eslint/typescript-estree': 5.59.11_typescript@5.0.4 + '@typescript-eslint/utils': 5.59.11_ucoohk2w7gukx6ccuul7rl7pnq debug: 4.3.4 eslint: 8.7.0 tsutils: 3.21.0_typescript@5.0.4 @@ -10808,16 +11138,16 @@ packages: - supports-color dev: false - /@typescript-eslint/types/5.59.7_typescript@5.0.4: - resolution: {integrity: sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==} + /@typescript-eslint/types/5.59.11_typescript@5.0.4: + resolution: {integrity: sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' dependencies: typescript: 5.0.4 - /@typescript-eslint/typescript-estree/5.59.7_typescript@5.0.4: - resolution: {integrity: sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==} + /@typescript-eslint/typescript-estree/5.59.11_typescript@5.0.4: + resolution: {integrity: sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -10825,8 +11155,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.59.7_typescript@5.0.4 - '@typescript-eslint/visitor-keys': 5.59.7_typescript@5.0.4 + '@typescript-eslint/types': 5.59.11_typescript@5.0.4 + '@typescript-eslint/visitor-keys': 5.59.11_typescript@5.0.4 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -10836,18 +11166,18 @@ packages: transitivePeerDependencies: - supports-color - /@typescript-eslint/utils/5.59.7_2aulnmwxyjhjxqmg3aruit533m: - resolution: {integrity: sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==} + /@typescript-eslint/utils/5.59.11_2aulnmwxyjhjxqmg3aruit533m: + resolution: {integrity: sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@eslint-community/eslint-utils': 4.4.0_eslint@7.30.0 - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.12 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 5.59.7_typescript@5.0.4 - '@typescript-eslint/types': 5.59.7_typescript@5.0.4 - '@typescript-eslint/typescript-estree': 5.59.7_typescript@5.0.4 + '@typescript-eslint/scope-manager': 5.59.11_typescript@5.0.4 + '@typescript-eslint/types': 5.59.11_typescript@5.0.4 + '@typescript-eslint/typescript-estree': 5.59.11_typescript@5.0.4 eslint: 7.30.0 eslint-scope: 5.1.1 semver: 7.5.4 @@ -10856,18 +11186,18 @@ packages: - typescript dev: true - /@typescript-eslint/utils/5.59.7_ucoohk2w7gukx6ccuul7rl7pnq: - resolution: {integrity: sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==} + /@typescript-eslint/utils/5.59.11_ucoohk2w7gukx6ccuul7rl7pnq: + resolution: {integrity: sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@eslint-community/eslint-utils': 4.4.0_eslint@8.7.0 - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.12 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 5.59.7_typescript@5.0.4 - '@typescript-eslint/types': 5.59.7_typescript@5.0.4 - '@typescript-eslint/typescript-estree': 5.59.7_typescript@5.0.4 + '@typescript-eslint/scope-manager': 5.59.11_typescript@5.0.4 + '@typescript-eslint/types': 5.59.11_typescript@5.0.4 + '@typescript-eslint/typescript-estree': 5.59.11_typescript@5.0.4 eslint: 8.7.0 eslint-scope: 5.1.1 semver: 7.5.4 @@ -10876,12 +11206,12 @@ packages: - typescript dev: false - /@typescript-eslint/visitor-keys/5.59.7_typescript@5.0.4: - resolution: {integrity: sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==} + /@typescript-eslint/visitor-keys/5.59.11_typescript@5.0.4: + resolution: {integrity: sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.59.7_typescript@5.0.4 - eslint-visitor-keys: 3.4.0 + '@typescript-eslint/types': 5.59.11_typescript@5.0.4 + eslint-visitor-keys: 3.4.2 transitivePeerDependencies: - typescript @@ -10901,63 +11231,63 @@ packages: - supports-color dev: true - /@vue/compiler-core/3.2.47: - resolution: {integrity: sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==} + /@vue/compiler-core/3.3.4: + resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} dependencies: - '@babel/parser': 7.21.3 - '@vue/shared': 3.2.47 + '@babel/parser': 7.22.10 + '@vue/shared': 3.3.4 estree-walker: 2.0.2 - source-map: 0.6.1 + source-map-js: 1.0.2 dev: false - /@vue/compiler-dom/3.2.47: - resolution: {integrity: sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==} + /@vue/compiler-dom/3.3.4: + resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==} dependencies: - '@vue/compiler-core': 3.2.47 - '@vue/shared': 3.2.47 + '@vue/compiler-core': 3.3.4 + '@vue/shared': 3.3.4 dev: false - /@vue/compiler-sfc/3.2.47: - resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==} + /@vue/compiler-sfc/3.3.4: + resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} dependencies: - '@babel/parser': 7.21.3 - '@vue/compiler-core': 3.2.47 - '@vue/compiler-dom': 3.2.47 - '@vue/compiler-ssr': 3.2.47 - '@vue/reactivity-transform': 3.2.47 - '@vue/shared': 3.2.47 + '@babel/parser': 7.22.10 + '@vue/compiler-core': 3.3.4 + '@vue/compiler-dom': 3.3.4 + '@vue/compiler-ssr': 3.3.4 + '@vue/reactivity-transform': 3.3.4 + '@vue/shared': 3.3.4 estree-walker: 2.0.2 - magic-string: 0.25.9 - postcss: 8.4.21 - source-map: 0.6.1 + magic-string: 0.30.2 + postcss: 8.4.27 + source-map-js: 1.0.2 dev: false - /@vue/compiler-ssr/3.2.47: - resolution: {integrity: sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==} + /@vue/compiler-ssr/3.3.4: + resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==} dependencies: - '@vue/compiler-dom': 3.2.47 - '@vue/shared': 3.2.47 + '@vue/compiler-dom': 3.3.4 + '@vue/shared': 3.3.4 dev: false - /@vue/reactivity-transform/3.2.47: - resolution: {integrity: sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==} + /@vue/reactivity-transform/3.3.4: + resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} dependencies: - '@babel/parser': 7.21.3 - '@vue/compiler-core': 3.2.47 - '@vue/shared': 3.2.47 + '@babel/parser': 7.22.10 + '@vue/compiler-core': 3.3.4 + '@vue/shared': 3.3.4 estree-walker: 2.0.2 - magic-string: 0.25.9 + magic-string: 0.30.2 dev: false - /@vue/shared/3.2.47: - resolution: {integrity: sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==} + /@vue/shared/3.3.4: + resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==} dev: false - /@webassemblyjs/ast/1.11.5: - resolution: {integrity: sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==} + /@webassemblyjs/ast/1.11.6: + resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} dependencies: - '@webassemblyjs/helper-numbers': 1.11.5 - '@webassemblyjs/helper-wasm-bytecode': 1.11.5 + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 /@webassemblyjs/ast/1.9.0: resolution: {integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==} @@ -10966,20 +11296,20 @@ packages: '@webassemblyjs/helper-wasm-bytecode': 1.9.0 '@webassemblyjs/wast-parser': 1.9.0 - /@webassemblyjs/floating-point-hex-parser/1.11.5: - resolution: {integrity: sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==} + /@webassemblyjs/floating-point-hex-parser/1.11.6: + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} /@webassemblyjs/floating-point-hex-parser/1.9.0: resolution: {integrity: sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==} - /@webassemblyjs/helper-api-error/1.11.5: - resolution: {integrity: sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==} + /@webassemblyjs/helper-api-error/1.11.6: + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} /@webassemblyjs/helper-api-error/1.9.0: resolution: {integrity: sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==} - /@webassemblyjs/helper-buffer/1.11.5: - resolution: {integrity: sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==} + /@webassemblyjs/helper-buffer/1.11.6: + resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} /@webassemblyjs/helper-buffer/1.9.0: resolution: {integrity: sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==} @@ -10997,26 +11327,26 @@ packages: dependencies: '@webassemblyjs/ast': 1.9.0 - /@webassemblyjs/helper-numbers/1.11.5: - resolution: {integrity: sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==} + /@webassemblyjs/helper-numbers/1.11.6: + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.5 - '@webassemblyjs/helper-api-error': 1.11.5 + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 '@xtuc/long': 4.2.2 - /@webassemblyjs/helper-wasm-bytecode/1.11.5: - resolution: {integrity: sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==} + /@webassemblyjs/helper-wasm-bytecode/1.11.6: + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} /@webassemblyjs/helper-wasm-bytecode/1.9.0: resolution: {integrity: sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==} - /@webassemblyjs/helper-wasm-section/1.11.5: - resolution: {integrity: sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==} + /@webassemblyjs/helper-wasm-section/1.11.6: + resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} dependencies: - '@webassemblyjs/ast': 1.11.5 - '@webassemblyjs/helper-buffer': 1.11.5 - '@webassemblyjs/helper-wasm-bytecode': 1.11.5 - '@webassemblyjs/wasm-gen': 1.11.5 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 /@webassemblyjs/helper-wasm-section/1.9.0: resolution: {integrity: sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==} @@ -11026,8 +11356,8 @@ packages: '@webassemblyjs/helper-wasm-bytecode': 1.9.0 '@webassemblyjs/wasm-gen': 1.9.0 - /@webassemblyjs/ieee754/1.11.5: - resolution: {integrity: sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==} + /@webassemblyjs/ieee754/1.11.6: + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} dependencies: '@xtuc/ieee754': 1.2.0 @@ -11036,8 +11366,8 @@ packages: dependencies: '@xtuc/ieee754': 1.2.0 - /@webassemblyjs/leb128/1.11.5: - resolution: {integrity: sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==} + /@webassemblyjs/leb128/1.11.6: + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} dependencies: '@xtuc/long': 4.2.2 @@ -11046,23 +11376,23 @@ packages: dependencies: '@xtuc/long': 4.2.2 - /@webassemblyjs/utf8/1.11.5: - resolution: {integrity: sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==} + /@webassemblyjs/utf8/1.11.6: + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} /@webassemblyjs/utf8/1.9.0: resolution: {integrity: sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==} - /@webassemblyjs/wasm-edit/1.11.5: - resolution: {integrity: sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==} + /@webassemblyjs/wasm-edit/1.11.6: + resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} dependencies: - '@webassemblyjs/ast': 1.11.5 - '@webassemblyjs/helper-buffer': 1.11.5 - '@webassemblyjs/helper-wasm-bytecode': 1.11.5 - '@webassemblyjs/helper-wasm-section': 1.11.5 - '@webassemblyjs/wasm-gen': 1.11.5 - '@webassemblyjs/wasm-opt': 1.11.5 - '@webassemblyjs/wasm-parser': 1.11.5 - '@webassemblyjs/wast-printer': 1.11.5 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-opt': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/wast-printer': 1.11.6 /@webassemblyjs/wasm-edit/1.9.0: resolution: {integrity: sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==} @@ -11076,14 +11406,14 @@ packages: '@webassemblyjs/wasm-parser': 1.9.0 '@webassemblyjs/wast-printer': 1.9.0 - /@webassemblyjs/wasm-gen/1.11.5: - resolution: {integrity: sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==} + /@webassemblyjs/wasm-gen/1.11.6: + resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} dependencies: - '@webassemblyjs/ast': 1.11.5 - '@webassemblyjs/helper-wasm-bytecode': 1.11.5 - '@webassemblyjs/ieee754': 1.11.5 - '@webassemblyjs/leb128': 1.11.5 - '@webassemblyjs/utf8': 1.11.5 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 /@webassemblyjs/wasm-gen/1.9.0: resolution: {integrity: sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==} @@ -11094,13 +11424,13 @@ packages: '@webassemblyjs/leb128': 1.9.0 '@webassemblyjs/utf8': 1.9.0 - /@webassemblyjs/wasm-opt/1.11.5: - resolution: {integrity: sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==} + /@webassemblyjs/wasm-opt/1.11.6: + resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} dependencies: - '@webassemblyjs/ast': 1.11.5 - '@webassemblyjs/helper-buffer': 1.11.5 - '@webassemblyjs/wasm-gen': 1.11.5 - '@webassemblyjs/wasm-parser': 1.11.5 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 /@webassemblyjs/wasm-opt/1.9.0: resolution: {integrity: sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==} @@ -11110,15 +11440,15 @@ packages: '@webassemblyjs/wasm-gen': 1.9.0 '@webassemblyjs/wasm-parser': 1.9.0 - /@webassemblyjs/wasm-parser/1.11.5: - resolution: {integrity: sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==} + /@webassemblyjs/wasm-parser/1.11.6: + resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} dependencies: - '@webassemblyjs/ast': 1.11.5 - '@webassemblyjs/helper-api-error': 1.11.5 - '@webassemblyjs/helper-wasm-bytecode': 1.11.5 - '@webassemblyjs/ieee754': 1.11.5 - '@webassemblyjs/leb128': 1.11.5 - '@webassemblyjs/utf8': 1.11.5 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 /@webassemblyjs/wasm-parser/1.9.0: resolution: {integrity: sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==} @@ -11140,10 +11470,10 @@ packages: '@webassemblyjs/helper-fsm': 1.9.0 '@xtuc/long': 4.2.2 - /@webassemblyjs/wast-printer/1.11.5: - resolution: {integrity: sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==} + /@webassemblyjs/wast-printer/1.11.6: + resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} dependencies: - '@webassemblyjs/ast': 1.11.5 + '@webassemblyjs/ast': 1.11.6 '@xtuc/long': 4.2.2 /@webassemblyjs/wast-printer/1.9.0: @@ -11193,15 +11523,15 @@ packages: /acorn-globals/7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: - acorn: 8.8.2 + acorn: 8.10.0 acorn-walk: 8.2.0 - /acorn-import-assertions/1.8.0_acorn@8.8.2: - resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} + /acorn-import-assertions/1.9.0_acorn@8.10.0: + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.8.2 + acorn: 8.10.0 /acorn-jsx/5.3.2_acorn@7.4.1: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -11211,12 +11541,12 @@ packages: acorn: 7.4.1 dev: true - /acorn-jsx/5.3.2_acorn@8.8.2: + /acorn-jsx/5.3.2_acorn@8.10.0: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.2 + acorn: 8.10.0 /acorn-walk/7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} @@ -11238,8 +11568,8 @@ packages: hasBin: true dev: true - /acorn/8.8.2: - resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + /acorn/8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true @@ -11261,15 +11591,11 @@ packages: transitivePeerDependencies: - supports-color - /agentkeepalive/4.3.0: - resolution: {integrity: sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==} + /agentkeepalive/4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} engines: {node: '>= 8.0.0'} dependencies: - debug: 4.3.4 - depd: 2.0.0 humanize-ms: 1.2.1 - transitivePeerDependencies: - - supports-color dev: true /aggregate-error/3.1.0: @@ -11292,7 +11618,7 @@ packages: globalthis: 1.0.3 object.entries: 1.1.6 object.fromentries: 2.0.6 - object.getownpropertydescriptors: 2.1.5 + object.getownpropertydescriptors: 2.1.6 object.values: 1.1.6 promise.allsettled: 1.0.6 promise.prototype.finally: 3.1.4 @@ -11484,7 +11810,7 @@ packages: async: 3.2.4 buffer-crc32: 0.2.13 readable-stream: 3.6.2 - readdir-glob: 1.1.2 + readdir-glob: 1.1.3 tar-stream: 2.2.0 zip-stream: 4.1.0 dev: true @@ -11552,8 +11878,8 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 - get-intrinsic: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 is-string: 1.0.7 /array-union/1.0.2: @@ -11582,9 +11908,8 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 - dev: true /array.prototype.flatmap/1.3.1: resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} @@ -11592,7 +11917,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 /array.prototype.map/1.0.5: @@ -11601,7 +11926,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 es-array-method-boxes-properly: 1.0.0 is-string: 1.0.7 dev: true @@ -11612,10 +11937,21 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 es-array-method-boxes-properly: 1.0.0 is-string: 1.0.7 + /arraybuffer.prototype.slice/1.0.1: + resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + get-intrinsic: 1.2.1 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + /arrify/1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} @@ -11716,27 +12052,27 @@ packages: engines: {node: '>=10.12.0'} dev: true - /autoprefixer/10.4.14_postcss@8.4.21: + /autoprefixer/10.4.14_postcss@8.4.27: resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.21.5 - caniuse-lite: 1.0.30001470 + browserslist: 4.21.10 + caniuse-lite: 1.0.30001519 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.21 + postcss: 8.4.27 postcss-value-parser: 4.2.0 /autoprefixer/9.8.8: resolution: {integrity: sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==} hasBin: true dependencies: - browserslist: 4.21.5 - caniuse-lite: 1.0.30001470 + browserslist: 4.21.10 + caniuse-lite: 1.0.30001519 normalize-range: 0.1.2 num2fraction: 1.2.2 picocolors: 0.2.1 @@ -11765,16 +12101,7 @@ packages: peerDependencies: constructs: ^10.0.0 dependencies: - '@balena/dockerignore': 1.0.2 - case: 1.6.3 constructs: 10.0.130 - fs-extra: 9.1.0 - ignore: 5.2.4 - jsonschema: 1.4.1 - minimatch: 3.1.2 - punycode: 2.3.0 - semver: 7.5.4 - yaml: 1.10.2 dev: true bundledDependencies: - '@balena/dockerignore' @@ -11798,7 +12125,7 @@ packages: '@aws-cdk/region-info': 2.7.0 '@jsii/check-node': 1.50.0 archiver: 5.3.1 - aws-sdk: 2.1344.0 + aws-sdk: 2.1431.0 camelcase: 6.3.0 cdk-assets: 2.7.0 chalk: 4.1.2 @@ -11822,8 +12149,8 @@ packages: - supports-color dev: true - /aws-sdk/2.1344.0: - resolution: {integrity: sha512-dOYkxyw5wSeX+UqGhVE4wXbLmw1z4t65jAYz4PdqXASbhB1YS5gFgTYnUg20psbzPnYV83KvUToWw5Sbc8tWcQ==} + /aws-sdk/2.1431.0: + resolution: {integrity: sha512-p6NGyI6+BgojiGn6uW2If6v7uxRPO5C+aGy/M+9/Rhdk8a5n7l0123v9ZUnEJgAy0tsNkazL2ifzV33nc0aGNA==} engines: {node: '>= 10.0.0'} dependencies: buffer: 4.9.2 @@ -11835,7 +12162,7 @@ packages: url: 0.10.3 util: 0.12.5 uuid: 8.0.0 - xml2js: 0.4.19 + xml2js: 0.5.0 dev: true /azure-devops-node-api/11.2.0: @@ -11853,15 +12180,15 @@ packages: '@babel/core': 7.20.12 dev: true - /babel-jest/29.5.0_@babel+core@7.20.12: - resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} + /babel-jest/29.6.2_@babel+core@7.20.12: + resolution: {integrity: sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: '@babel/core': 7.20.12 - '@jest/transform': 29.5.0 - '@types/babel__core': 7.20.0 + '@jest/transform': 29.6.2 + '@types/babel__core': 7.20.1 babel-plugin-istanbul: 6.1.1 babel-preset-jest: 29.5.0_@babel+core@7.20.12 chalk: 4.1.2 @@ -11902,7 +12229,7 @@ packages: /babel-plugin-emotion/10.2.2: resolution: {integrity: sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==} dependencies: - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.22.5 '@emotion/hash': 0.8.0 '@emotion/memoize': 0.7.4 '@emotion/serialize': 0.11.16 @@ -11924,7 +12251,7 @@ packages: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.22.5 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -11936,26 +12263,26 @@ packages: resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.21.3 - '@types/babel__core': 7.20.0 - '@types/babel__traverse': 7.18.3 + '@babel/template': 7.22.5 + '@babel/types': 7.22.10 + '@types/babel__core': 7.20.1 + '@types/babel__traverse': 7.20.1 /babel-plugin-macros/2.8.0: resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 cosmiconfig: 6.0.0 - resolve: 1.22.1 + resolve: 1.22.4 dev: true /babel-plugin-macros/3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 cosmiconfig: 7.1.0 - resolve: 1.22.1 + resolve: 1.22.4 dev: true /babel-plugin-named-asset-import/0.3.8_@babel+core@7.20.12: @@ -11966,15 +12293,15 @@ packages: '@babel/core': 7.20.12 dev: true - /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.20.12: - resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} + /babel-plugin-polyfill-corejs2/0.4.5_@babel+core@7.20.12: + resolution: {integrity: sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/compat-data': 7.21.0 + '@babel/compat-data': 7.22.9 '@babel/core': 7.20.12 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 - semver: 6.3.0 + '@babel/helper-define-polyfill-provider': 0.4.2_@babel+core@7.20.12 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true @@ -11986,30 +12313,30 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.20.12 - core-js-compat: 3.29.1 + core-js-compat: 3.32.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.20.12: - resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} + /babel-plugin-polyfill-corejs3/0.8.3_@babel+core@7.20.12: + resolution: {integrity: sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 - core-js-compat: 3.29.1 + '@babel/helper-define-polyfill-provider': 0.4.2_@babel+core@7.20.12 + core-js-compat: 3.32.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.20.12: - resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} + /babel-plugin-polyfill-regenerator/0.5.2_@babel+core@7.20.12: + resolution: {integrity: sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 + '@babel/helper-define-polyfill-provider': 0.4.2_@babel+core@7.20.12 transitivePeerDependencies: - supports-color dev: true @@ -12127,7 +12454,6 @@ packages: /bindings/1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - requiresBuild: true dependencies: file-uri-to-path: 1.0.0 optional: true @@ -12219,13 +12545,13 @@ packages: widest-line: 3.1.0 wrap-ansi: 7.0.0 - /boxen/7.0.2: - resolution: {integrity: sha512-1Z4UJabXUP1/R9rLpoU3O2lEMnG3pPLAs/ZD2lF3t2q7qD5lM8rqbtnvtvm4N0wEyNlE+9yZVTVAGmd1V5jabg==} + /boxen/7.1.1: + resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} engines: {node: '>=14.16'} dependencies: ansi-align: 3.0.1 camelcase: 7.0.1 - chalk: 5.2.0 + chalk: 5.3.0 cli-boxes: 3.0.0 string-width: 5.1.2 type-fest: 2.19.0 @@ -12294,7 +12620,7 @@ packages: resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} dependencies: cipher-base: 1.0.4 - des.js: 1.0.1 + des.js: 1.1.0 inherits: 2.0.4 safe-buffer: 5.2.1 @@ -12322,15 +12648,15 @@ packages: dependencies: pako: 1.0.11 - /browserslist/4.21.5: - resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} + /browserslist/4.21.10: + resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001470 - electron-to-chromium: 1.4.341 - node-releases: 2.0.10 - update-browserslist-db: 1.0.10_browserslist@4.21.5 + caniuse-lite: 1.0.30001519 + electron-to-chromium: 1.4.487 + node-releases: 2.0.13 + update-browserslist-db: 1.0.11_browserslist@4.21.10 /bser/2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -12364,7 +12690,7 @@ packages: resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} dependencies: base64-js: 1.5.1 - ieee754: 1.2.1 + ieee754: 1.1.13 isarray: 1.0.0 /buffer/5.7.1: @@ -12407,8 +12733,8 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - /c8/7.13.0: - resolution: {integrity: sha512-/NL4hQTv1gBL6J6ei80zu3IiTrmePDKXKXOTLpHvcIWZTVYQlDhVWjjWvkhICylE8EwwnMVzDZugCvdx0/DIIA==} + /c8/7.14.0: + resolution: {integrity: sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==} engines: {node: '>=10.12.0'} hasBin: true dependencies: @@ -12417,8 +12743,8 @@ packages: find-up: 5.0.0 foreground-child: 2.0.0 istanbul-lib-coverage: 3.2.0 - istanbul-lib-report: 3.0.0 - istanbul-reports: 3.1.5 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.1.6 rimraf: 3.0.2 test-exclude: 6.0.0 v8-to-istanbul: 9.1.0 @@ -12465,7 +12791,7 @@ packages: promise-inflight: 1.0.1 rimraf: 3.0.2 ssri: 8.0.1 - tar: 6.1.13 + tar: 6.1.15 unique-filename: 1.1.1 dev: true @@ -12487,14 +12813,14 @@ packages: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} engines: {node: '>=10.6.0'} - /cacheable-request/7.0.2: - resolution: {integrity: sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==} + /cacheable-request/7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} engines: {node: '>=8'} dependencies: clone-response: 1.0.3 get-stream: 5.2.0 http-cache-semantics: 4.1.1 - keyv: 4.5.2 + keyv: 4.5.3 lowercase-keys: 2.0.0 normalize-url: 6.1.0 responselike: 2.0.1 @@ -12503,7 +12829,7 @@ packages: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 /call-me-maybe/1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} @@ -12565,14 +12891,14 @@ packages: /caniuse-api/3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: - browserslist: 4.21.5 - caniuse-lite: 1.0.30001470 + browserslist: 4.21.10 + caniuse-lite: 1.0.30001519 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: false - /caniuse-lite/1.0.30001470: - resolution: {integrity: sha512-065uNwY6QtHCBOExzbV6m236DDhYCCtPmQUCoQtwkVqzud8v5QPidoMr6CoMkC2nfp6nksjttqWQRRh75LqUmA==} + /caniuse-lite/1.0.30001519: + resolution: {integrity: sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==} /capture-exit/2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} @@ -12586,11 +12912,6 @@ packages: engines: {node: '>=4'} dev: true - /case/1.6.3: - resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==} - engines: {node: '>= 0.8.0'} - dev: true - /ccount/1.1.0: resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==} dev: true @@ -12603,7 +12924,7 @@ packages: '@aws-cdk/cloud-assembly-schema': 2.7.0 '@aws-cdk/cx-api': 2.7.0 archiver: 5.3.1 - aws-sdk: 2.1344.0 + aws-sdk: 2.1431.0 glob: 7.2.3 mime: 2.6.0 yargs: 16.2.0 @@ -12649,8 +12970,8 @@ packages: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chalk/5.2.0: - resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} + /chalk/5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true @@ -12773,8 +13094,8 @@ packages: inherits: 2.0.4 safe-buffer: 5.2.1 - /cjs-module-lexer/1.2.2: - resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} + /cjs-module-lexer/1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} /class-utils/0.3.6: resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} @@ -12829,8 +13150,8 @@ packages: restore-cursor: 3.1.0 dev: false - /cli-spinners/2.7.0: - resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} + /cli-spinners/2.9.0: + resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==} engines: {node: '>=6'} dev: false @@ -12910,6 +13231,11 @@ packages: engines: {node: '>=6'} dev: true + /cluster-key-slot/1.1.2: + resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} + engines: {node: '>=0.10.0'} + dev: false + /cmd-extension/1.0.2: resolution: {integrity: sha512-iWDjmP8kvsMdBmLTHxFaqXikO8EdFRDfim7k6vUHglY/2xJ5jLrPsnQGijdfp4U+sr/BeecG0wKm02dSIAeQ1g==} engines: {node: '>=10'} @@ -12928,8 +13254,8 @@ packages: resolution: {integrity: sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==} dev: true - /collect-v8-coverage/1.0.1_@types+node@14.18.36: - resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} + /collect-v8-coverage/1.0.2_@types+node@14.18.36: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} peerDependencies: '@types/node': '>=12' dependencies: @@ -12968,8 +13294,8 @@ packages: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} dev: false - /colorette/2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + /colorette/2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: false /colors/1.0.3: @@ -12991,9 +13317,9 @@ packages: resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} dev: true - /commander/10.0.0: - resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==} - engines: {node: '>=14'} + /commander/11.0.0: + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} dev: false /commander/2.20.3: @@ -13166,19 +13492,19 @@ packages: toggle-selection: 1.0.6 dev: true - /core-js-compat/3.29.1: - resolution: {integrity: sha512-QmchCua884D8wWskMX8tW5ydINzd8oSJVx38lx/pVkFGqztxt73GYre3pm/hyYq8bPf+MW5In4I/uRShFDsbrA==} + /core-js-compat/3.32.0: + resolution: {integrity: sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw==} dependencies: - browserslist: 4.21.5 + browserslist: 4.21.10 dev: true - /core-js-pure/3.29.1: - resolution: {integrity: sha512-4En6zYVi0i0XlXHVz/bi6l1XDjCqkKRq765NXuX+SnaIatlE96Odt5lMLjdxUiNI1v9OXI5DSLWYPlmTfkTktg==} + /core-js-pure/3.32.0: + resolution: {integrity: sha512-qsev1H+dTNYpDUEURRuOXMvpdtAnNEvQWS/FMJ2Vb5AY8ZP4rAPQldkE27joykZPJTe0+IVgHZYh1P5Xu1/i1g==} requiresBuild: true dev: true - /core-js/3.29.1: - resolution: {integrity: sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw==} + /core-js/3.32.0: + resolution: {integrity: sha512-rd4rYZNlF3WuoYuRIDEmbR/ga9CeuWX9U05umAvgrrZoHY4Z++cp/xwPQMvUpBB4Ag6J8KfD80G0zwCyaSxDww==} requiresBuild: true dev: true @@ -13284,7 +13610,7 @@ packages: dependencies: nice-try: 1.0.5 path-key: 2.0.1 - semver: 5.7.1 + semver: 5.7.2 shebang-command: 1.2.0 which: 1.3.1 @@ -13319,13 +13645,13 @@ packages: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} - /css-declaration-sorter/6.4.0_postcss@8.4.21: - resolution: {integrity: sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==} + /css-declaration-sorter/6.4.1_postcss@8.4.27: + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} engines: {node: ^10 || ^12 || >=14} peerDependencies: postcss: ^8.0.9 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 dev: false /css-loader/3.6.0_webpack@4.44.2: @@ -13346,7 +13672,7 @@ packages: postcss-modules-values: 3.0.0 postcss-value-parser: 4.2.0 schema-utils: 2.7.1 - semver: 6.3.0 + semver: 6.3.1 webpack: 4.44.2 dev: true @@ -13356,15 +13682,15 @@ packages: peerDependencies: webpack: ^4.27.0 || ^5.0.0 dependencies: - icss-utils: 5.1.0_postcss@8.4.21 + icss-utils: 5.1.0_postcss@8.4.27 loader-utils: 2.0.4 - postcss: 8.4.21 - postcss-modules-extract-imports: 3.0.0_postcss@8.4.21 - postcss-modules-local-by-default: 4.0.0_postcss@8.4.21 - postcss-modules-scope: 3.0.0_postcss@8.4.21 - postcss-modules-values: 4.0.0_postcss@8.4.21 + postcss: 8.4.27 + postcss-modules-extract-imports: 3.0.0_postcss@8.4.27 + postcss-modules-local-by-default: 4.0.3_postcss@8.4.27 + postcss-modules-scope: 3.0.0_postcss@8.4.27 + postcss-modules-values: 4.0.0_postcss@8.4.27 postcss-value-parser: 4.2.0 - schema-utils: 3.1.1 + schema-utils: 3.3.0 semver: 7.5.4 webpack: 4.44.2 dev: true @@ -13375,12 +13701,12 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - icss-utils: 5.1.0_postcss@8.4.21 - postcss: 8.4.21 - postcss-modules-extract-imports: 3.0.0_postcss@8.4.21 - postcss-modules-local-by-default: 4.0.0_postcss@8.4.21 - postcss-modules-scope: 3.0.0_postcss@8.4.21 - postcss-modules-values: 4.0.0_postcss@8.4.21 + icss-utils: 5.1.0_postcss@8.4.27 + postcss: 8.4.27 + postcss-modules-extract-imports: 3.0.0_postcss@8.4.27 + postcss-modules-local-by-default: 4.0.3_postcss@8.4.27 + postcss-modules-scope: 3.0.0_postcss@8.4.27 + postcss-modules-values: 4.0.0_postcss@8.4.27 postcss-value-parser: 4.2.0 semver: 7.5.4 webpack: 5.82.1 @@ -13404,10 +13730,10 @@ packages: esbuild: optional: true dependencies: - cssnano: 5.1.15_postcss@8.4.21 + cssnano: 5.1.15_postcss@8.4.27 jest-worker: 27.5.1 - postcss: 8.4.21 - schema-utils: 4.0.0 + postcss: 8.4.27 + schema-utils: 4.2.0 serialize-javascript: 6.0.0 source-map: 0.6.1 webpack: 5.82.1 @@ -13467,62 +13793,62 @@ packages: engines: {node: '>=4'} hasBin: true - /cssnano-preset-default/5.2.14_postcss@8.4.21: + /cssnano-preset-default/5.2.14_postcss@8.4.27: resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - css-declaration-sorter: 6.4.0_postcss@8.4.21 - cssnano-utils: 3.1.0_postcss@8.4.21 - postcss: 8.4.21 - postcss-calc: 8.2.4_postcss@8.4.21 - postcss-colormin: 5.3.1_postcss@8.4.21 - postcss-convert-values: 5.1.3_postcss@8.4.21 - postcss-discard-comments: 5.1.2_postcss@8.4.21 - postcss-discard-duplicates: 5.1.0_postcss@8.4.21 - postcss-discard-empty: 5.1.1_postcss@8.4.21 - postcss-discard-overridden: 5.1.0_postcss@8.4.21 - postcss-merge-longhand: 5.1.7_postcss@8.4.21 - postcss-merge-rules: 5.1.4_postcss@8.4.21 - postcss-minify-font-values: 5.1.0_postcss@8.4.21 - postcss-minify-gradients: 5.1.1_postcss@8.4.21 - postcss-minify-params: 5.1.4_postcss@8.4.21 - postcss-minify-selectors: 5.2.1_postcss@8.4.21 - postcss-normalize-charset: 5.1.0_postcss@8.4.21 - postcss-normalize-display-values: 5.1.0_postcss@8.4.21 - postcss-normalize-positions: 5.1.1_postcss@8.4.21 - postcss-normalize-repeat-style: 5.1.1_postcss@8.4.21 - postcss-normalize-string: 5.1.0_postcss@8.4.21 - postcss-normalize-timing-functions: 5.1.0_postcss@8.4.21 - postcss-normalize-unicode: 5.1.1_postcss@8.4.21 - postcss-normalize-url: 5.1.0_postcss@8.4.21 - postcss-normalize-whitespace: 5.1.1_postcss@8.4.21 - postcss-ordered-values: 5.1.3_postcss@8.4.21 - postcss-reduce-initial: 5.1.2_postcss@8.4.21 - postcss-reduce-transforms: 5.1.0_postcss@8.4.21 - postcss-svgo: 5.1.0_postcss@8.4.21 - postcss-unique-selectors: 5.1.1_postcss@8.4.21 - dev: false - - /cssnano-utils/3.1.0_postcss@8.4.21: + css-declaration-sorter: 6.4.1_postcss@8.4.27 + cssnano-utils: 3.1.0_postcss@8.4.27 + postcss: 8.4.27 + postcss-calc: 8.2.4_postcss@8.4.27 + postcss-colormin: 5.3.1_postcss@8.4.27 + postcss-convert-values: 5.1.3_postcss@8.4.27 + postcss-discard-comments: 5.1.2_postcss@8.4.27 + postcss-discard-duplicates: 5.1.0_postcss@8.4.27 + postcss-discard-empty: 5.1.1_postcss@8.4.27 + postcss-discard-overridden: 5.1.0_postcss@8.4.27 + postcss-merge-longhand: 5.1.7_postcss@8.4.27 + postcss-merge-rules: 5.1.4_postcss@8.4.27 + postcss-minify-font-values: 5.1.0_postcss@8.4.27 + postcss-minify-gradients: 5.1.1_postcss@8.4.27 + postcss-minify-params: 5.1.4_postcss@8.4.27 + postcss-minify-selectors: 5.2.1_postcss@8.4.27 + postcss-normalize-charset: 5.1.0_postcss@8.4.27 + postcss-normalize-display-values: 5.1.0_postcss@8.4.27 + postcss-normalize-positions: 5.1.1_postcss@8.4.27 + postcss-normalize-repeat-style: 5.1.1_postcss@8.4.27 + postcss-normalize-string: 5.1.0_postcss@8.4.27 + postcss-normalize-timing-functions: 5.1.0_postcss@8.4.27 + postcss-normalize-unicode: 5.1.1_postcss@8.4.27 + postcss-normalize-url: 5.1.0_postcss@8.4.27 + postcss-normalize-whitespace: 5.1.1_postcss@8.4.27 + postcss-ordered-values: 5.1.3_postcss@8.4.27 + postcss-reduce-initial: 5.1.2_postcss@8.4.27 + postcss-reduce-transforms: 5.1.0_postcss@8.4.27 + postcss-svgo: 5.1.0_postcss@8.4.27 + postcss-unique-selectors: 5.1.1_postcss@8.4.27 + dev: false + + /cssnano-utils/3.1.0_postcss@8.4.27: resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 dev: false - /cssnano/5.1.15_postcss@8.4.21: + /cssnano/5.1.15_postcss@8.4.27: resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - cssnano-preset-default: 5.2.14_postcss@8.4.21 + cssnano-preset-default: 5.2.14_postcss@8.4.27 lilconfig: 2.1.0 - postcss: 8.4.21 + postcss: 8.4.27 yaml: 1.10.2 dev: false @@ -13549,14 +13875,11 @@ packages: resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==} dev: true - /csstype/3.1.1: - resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} - /csstype/3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - /cyclist/1.0.1: - resolution: {integrity: sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==} + /cyclist/1.0.2: + resolution: {integrity: sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==} /d/1.0.1: resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} @@ -13631,6 +13954,7 @@ packages: /debuglog/1.0.1: resolution: {integrity: sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. dev: false /decamelize-keys/1.1.1: @@ -13670,6 +13994,15 @@ packages: /dedent/0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dev: true + + /dedent/1.5.1: + resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true /deep-extend/0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} @@ -13734,14 +14067,14 @@ packages: is-descriptor: 1.0.2 isobject: 3.0.1 - /degenerator/3.0.2: - resolution: {integrity: sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==} + /degenerator/3.0.4: + resolution: {integrity: sha512-Z66uPeBfHZAHVmue3HPfyKu2Q0rC2cRxbTOsvmU/po5fvvcx27W4mIu9n0PUlQih4oUYvcG1BsbtVv8x7KDOSw==} engines: {node: '>= 6'} dependencies: ast-types: 0.13.4 escodegen: 1.14.3 esprima: 4.0.1 - vm2: 3.9.14 + vm2: 3.9.19 dev: true /delayed-stream/1.0.0: @@ -13767,24 +14100,24 @@ packages: hasBin: true dependencies: '@babel/parser': 7.16.4 - '@babel/traverse': 7.21.3 - '@vue/compiler-sfc': 3.2.47 + '@babel/traverse': 7.22.10 + '@vue/compiler-sfc': 3.3.4 camelcase: 6.3.0 cosmiconfig: 7.1.0 debug: 4.3.4 deps-regex: 0.1.4 - ignore: 5.2.4 - is-core-module: 2.11.0 + ignore: 5.1.9 + is-core-module: 2.13.0 js-yaml: 3.14.1 json5: 2.2.3 lodash: 4.17.21 - minimatch: 3.1.2 + minimatch: 3.0.8 multimatch: 5.0.0 please-upgrade-node: 3.2.0 query-ast: 1.0.5 readdirp: 3.6.0 require-package-name: 2.0.1 - resolve: 1.22.1 + resolve: 1.22.4 sass: 1.49.11 scss-parser: 1.0.6 semver: 7.5.4 @@ -13816,8 +14149,8 @@ packages: resolution: {integrity: sha512-3tzwGYogSJi8HoG93R5x9NrdefZQOXgHgGih/7eivloOq6yC6O+yoFxZnkgP661twvfILONfoKRdF9GQOGx2RA==} dev: false - /des.js/1.0.1: - resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} + /des.js/1.1.0: + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 @@ -13933,8 +14266,8 @@ packages: resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} dev: false - /dns-packet/5.5.0: - resolution: {integrity: sha512-USawdAUzRkV6xrqTjiAEp6M9YagZEzWcSUaZTcIFAiyQWW1SoI6KyId8y2+/71wbgHKQAKd+iupLv4YvEwYWvA==} + /dns-packet/5.6.0: + resolution: {integrity: sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==} engines: {node: '>=6'} dependencies: '@leichtgewicht/ip-codec': 2.0.4 @@ -13960,8 +14293,8 @@ packages: /dom-helpers/5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.21.0 - csstype: 3.1.1 + '@babel/runtime': 7.22.10 + csstype: 3.1.2 dev: false /dom-serializer/1.4.1: @@ -13976,7 +14309,7 @@ packages: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 - entities: 4.4.0 + entities: 4.5.0 dev: true /dom-walk/0.1.2: @@ -14062,7 +14395,7 @@ packages: peerDependencies: react: '>=16.12.0' dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 compute-scroll-into-view: 1.0.20 prop-types: 15.8.1 react: 16.13.1 @@ -14107,8 +14440,8 @@ packages: /ee-first/1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - /electron-to-chromium/1.4.341: - resolution: {integrity: sha512-R4A8VfUBQY9WmAhuqY5tjHRf5fH2AAf6vqitBOE0y6u2PgHgqHSrhZmu78dIX3fVZtjqlwJNX1i2zwC3VpHtQQ==} + /electron-to-chromium/1.4.487: + resolution: {integrity: sha512-XbCRs/34l31np/p33m+5tdBrdXu9jJkZxSbNxj5I0H1KtV2ZMSB+i/HYqDiRzHaFx2T5EdytjoBRe8QRJE2vQg==} /element-resize-detector/1.2.4: resolution: {integrity: sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==} @@ -14153,7 +14486,7 @@ packages: '@types/react': '>=16' react: '>=16.3.0' dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 '@emotion/core': 10.3.1_qjwx5m6wssz3lnb35xwkc3pz6q '@emotion/weak-memoize': 0.2.5 '@types/react': 16.14.23 @@ -14201,18 +14534,19 @@ packages: memory-fs: 0.5.0 tapable: 1.1.3 - /enhanced-resolve/5.14.1: - resolution: {integrity: sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow==} + /enhanced-resolve/5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - /enquirer/2.3.6: - resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} + /enquirer/2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} dependencies: ansi-colors: 4.1.3 + strip-ansi: 6.0.1 dev: true /entities/2.1.0: @@ -14222,8 +14556,8 @@ packages: /entities/2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - /entities/4.4.0: - resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} + /entities/4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} /env-paths/2.2.1: @@ -14231,8 +14565,8 @@ packages: engines: {node: '>=6'} dev: true - /envinfo/7.8.1: - resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} + /envinfo/7.10.0: + resolution: {integrity: sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==} engines: {node: '>=4'} hasBin: true dev: true @@ -14258,17 +14592,18 @@ packages: stackframe: 1.3.4 dev: true - /es-abstract/1.21.2: - resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} + /es-abstract/1.22.1: + resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.1 available-typed-arrays: 1.0.5 call-bind: 1.0.2 es-set-tostringtag: 2.0.1 es-to-primitive: 1.2.1 function.prototype.name: 1.1.5 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 @@ -14283,19 +14618,23 @@ packages: is-regex: 1.1.4 is-shared-array-buffer: 1.0.2 is-string: 1.0.7 - is-typed-array: 1.1.10 + is-typed-array: 1.1.12 is-weakref: 1.0.2 object-inspect: 1.12.3 object-keys: 1.1.1 object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 + regexp.prototype.flags: 1.5.0 + safe-array-concat: 1.0.0 safe-regex-test: 1.0.0 string.prototype.trim: 1.2.7 string.prototype.trimend: 1.0.6 string.prototype.trimstart: 1.0.6 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 typed-array-length: 1.0.4 unbox-primitive: 1.0.2 - which-typed-array: 1.1.9 + which-typed-array: 1.1.11 /es-array-method-boxes-properly/1.0.0: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} @@ -14304,7 +14643,7 @@ packages: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 has-symbols: 1.0.3 is-arguments: 1.1.1 is-map: 2.0.2 @@ -14314,14 +14653,14 @@ packages: stop-iteration-iterator: 1.0.0 dev: true - /es-module-lexer/1.2.1: - resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} + /es-module-lexer/1.3.0: + resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} /es-set-tostringtag/2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 has: 1.0.3 has-tostringtag: 1.0.0 @@ -14607,34 +14946,34 @@ packages: esbuild-windows-arm64: 0.14.54 dev: true - /esbuild/0.17.14: - resolution: {integrity: sha512-vOO5XhmVj/1XQR9NQ1UPq6qvMYL7QFJU57J5fKBKBKxp17uDt5PgxFDb4A2nEiXhr1qQs4x0F5+66hVVw4ruNw==} + /esbuild/0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.17.14 - '@esbuild/android-arm64': 0.17.14 - '@esbuild/android-x64': 0.17.14 - '@esbuild/darwin-arm64': 0.17.14 - '@esbuild/darwin-x64': 0.17.14 - '@esbuild/freebsd-arm64': 0.17.14 - '@esbuild/freebsd-x64': 0.17.14 - '@esbuild/linux-arm': 0.17.14 - '@esbuild/linux-arm64': 0.17.14 - '@esbuild/linux-ia32': 0.17.14 - '@esbuild/linux-loong64': 0.17.14 - '@esbuild/linux-mips64el': 0.17.14 - '@esbuild/linux-ppc64': 0.17.14 - '@esbuild/linux-riscv64': 0.17.14 - '@esbuild/linux-s390x': 0.17.14 - '@esbuild/linux-x64': 0.17.14 - '@esbuild/netbsd-x64': 0.17.14 - '@esbuild/openbsd-x64': 0.17.14 - '@esbuild/sunos-x64': 0.17.14 - '@esbuild/win32-arm64': 0.17.14 - '@esbuild/win32-ia32': 0.17.14 - '@esbuild/win32-x64': 0.17.14 + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 dev: true /escalade/3.1.1: @@ -14673,15 +15012,14 @@ packages: source-map: 0.6.1 dev: true - /escodegen/2.0.0: - resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} + /escodegen/2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} hasBin: true dependencies: esprima: 4.0.1 estraverse: 5.3.0 esutils: 2.0.3 - optionator: 0.8.3 optionalDependencies: source-map: 0.6.1 @@ -14714,7 +15052,7 @@ packages: doctrine: 2.1.0 eslint: 7.30.0 estraverse: 5.3.0 - jsx-ast-utils: 3.3.3 + jsx-ast-utils: 3.3.5 minimatch: 3.1.2 object.entries: 1.1.6 object.fromentries: 2.0.6 @@ -14722,7 +15060,7 @@ packages: object.values: 1.1.6 prop-types: 15.8.1 resolve: 2.0.0-next.4 - semver: 6.3.0 + semver: 6.3.1 string.prototype.matchall: 4.0.8 dev: true @@ -14737,7 +15075,7 @@ packages: doctrine: 2.1.0 eslint: 8.7.0 estraverse: 5.3.0 - jsx-ast-utils: 3.3.3 + jsx-ast-utils: 3.3.5 minimatch: 3.1.2 object.entries: 1.1.6 object.fromentries: 2.0.6 @@ -14745,7 +15083,7 @@ packages: object.values: 1.1.6 prop-types: 15.8.1 resolve: 2.0.0-next.4 - semver: 6.3.0 + semver: 6.3.1 string.prototype.matchall: 4.0.8 dev: false @@ -14769,8 +15107,8 @@ packages: esrecurse: 4.3.0 estraverse: 4.3.0 - /eslint-scope/7.1.1: - resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} + /eslint-scope/7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 @@ -14801,8 +15139,8 @@ packages: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} - /eslint-visitor-keys/3.4.0: - resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} + /eslint-visitor-keys/3.4.2: + resolution: {integrity: sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} /eslint/7.30.0: @@ -14818,7 +15156,7 @@ packages: cross-spawn: 7.0.3 debug: 4.3.4 doctrine: 3.0.0 - enquirer: 2.3.6 + enquirer: 2.4.1 escape-string-regexp: 4.0.0 eslint-scope: 5.1.1 eslint-utils: 2.1.0 @@ -14841,7 +15179,7 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.1 + optionator: 0.9.3 progress: 2.0.3 regexpp: 3.2.0 semver: 7.5.4 @@ -14854,16 +15192,16 @@ packages: - supports-color dev: true - /eslint/8.36.0: - resolution: {integrity: sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==} + /eslint/8.46.0: + resolution: {integrity: sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0_eslint@8.36.0 - '@eslint-community/regexpp': 4.4.1 - '@eslint/eslintrc': 2.0.1 - '@eslint/js': 8.36.0 - '@humanwhocodes/config-array': 0.11.8 + '@eslint-community/eslint-utils': 4.4.0_eslint@8.46.0 + '@eslint-community/regexpp': 4.6.2 + '@eslint/eslintrc': 2.1.1 + '@eslint/js': 8.46.0 + '@humanwhocodes/config-array': 0.11.10 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 @@ -14872,9 +15210,9 @@ packages: debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 - eslint-visitor-keys: 3.4.0 - espree: 9.5.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.2 + espree: 9.6.1 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -14882,22 +15220,19 @@ packages: find-up: 5.0.0 glob-parent: 6.0.2 globals: 13.20.0 - grapheme-splitter: 1.0.4 + graphemer: 1.4.0 ignore: 5.2.4 - import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-sdsl: 4.4.0 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.1 + optionator: 0.9.3 strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color @@ -14916,10 +15251,10 @@ packages: debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 + eslint-scope: 7.2.2 eslint-utils: 3.0.0_eslint@8.7.0 - eslint-visitor-keys: 3.4.0 - espree: 9.5.0 + eslint-visitor-keys: 3.4.2 + espree: 9.6.1 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -14937,7 +15272,7 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.1 + optionator: 0.9.3 regexpp: 3.2.0 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 @@ -14955,13 +15290,13 @@ packages: eslint-visitor-keys: 1.3.0 dev: true - /espree/9.5.0: - resolution: {integrity: sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==} + /espree/9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2_acorn@8.8.2 - eslint-visitor-keys: 3.4.0 + acorn: 8.10.0 + acorn-jsx: 5.3.2_acorn@8.10.0 + eslint-visitor-keys: 3.4.2 /esprima/4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -14992,9 +15327,9 @@ packages: resolution: {integrity: sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==} engines: {node: '>=8.3.0'} dependencies: - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 - c8: 7.13.0 + '@babel/traverse': 7.22.10 + '@babel/types': 7.22.10 + c8: 7.14.0 transitivePeerDependencies: - supports-color dev: true @@ -15095,15 +15430,16 @@ packages: homedir-polyfill: 1.0.3 dev: false - /expect/29.5.0: - resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} + /expect/29.6.2: + resolution: {integrity: sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/expect-utils': 29.5.0 + '@jest/expect-utils': 29.6.2 + '@types/node': 14.18.36 jest-get-type: 29.4.3 - jest-matcher-utils: 29.5.0 - jest-message-util: 29.5.0 - jest-util: 29.5.0 + jest-matcher-utils: 29.6.2 + jest-message-util: 29.6.2 + jest-util: 29.6.2 /express/4.18.1: resolution: {integrity: sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==} @@ -15225,6 +15561,16 @@ packages: merge2: 1.4.1 micromatch: 4.0.5 + /fast-glob/3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + /fast-json-parse/1.0.3: resolution: {integrity: sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==} dev: true @@ -15245,8 +15591,8 @@ packages: /fast-levenshtein/2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - /fast-redact/3.1.2: - resolution: {integrity: sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==} + /fast-redact/3.3.0: + resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==} engines: {node: '>=6'} dev: false @@ -15353,7 +15699,7 @@ packages: webpack: ^4.0.0 || ^5.0.0 dependencies: loader-utils: 2.0.4 - schema-utils: 3.1.2 + schema-utils: 3.3.0 webpack: 4.44.2 dev: true @@ -15366,7 +15712,6 @@ packages: /file-uri-to-path/1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - requiresBuild: true optional: true /file-uri-to-path/2.0.0: @@ -15488,8 +15833,8 @@ packages: /flatted/3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - /flow-parser/0.202.1: - resolution: {integrity: sha512-IA8mhyNEUtzAKh+lj1yNDLFiUr1NSwPC+exQgghQNARFU/DeWGpoNmuYYzMDFIYsOdVdDoTJTxRc+/cS9CVvNg==} + /flow-parser/0.214.0: + resolution: {integrity: sha512-RW1Dh6BuT14DA7+gtNRKzgzvG3GTPdrceHCi4ddZ9VFGQ9HtO5L8wzxMGsor7XtInIrbWZZCSak0oxnBF7tApw==} engines: {node: '>=0.4.0'} dev: true @@ -15529,11 +15874,11 @@ packages: resolution: {integrity: sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==} engines: {node: '>=6.11.5', yarn: '>=1.0.0'} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.10 chalk: 2.4.2 micromatch: 3.1.10 minimatch: 3.1.2 - semver: 5.7.1 + semver: 5.7.2 tapable: 1.1.3 worker-rpc: 0.1.1 dev: true @@ -15552,8 +15897,8 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.18.6 - '@types/json-schema': 7.0.11 + '@babel/code-frame': 7.22.10 + '@types/json-schema': 7.0.12 chalk: 4.1.2 chokidar: 3.5.3 cosmiconfig: 6.0.0 @@ -15583,8 +15928,8 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.18.6 - '@types/json-schema': 7.0.11 + '@babel/code-frame': 7.22.10 + '@types/json-schema': 7.0.12 chalk: 4.1.2 chokidar: 3.5.3 cosmiconfig: 6.0.0 @@ -15758,7 +16103,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 functions-have-names: 1.2.3 /functional-red-black-tree/1.0.1: @@ -15806,6 +16151,11 @@ packages: loader-utils: 1.4.2 dev: false + /generic-pool/3.9.0: + resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} + engines: {node: '>= 4'} + dev: false + /gensync/1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -15814,11 +16164,12 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - /get-intrinsic/1.2.0: - resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} + /get-intrinsic/1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} dependencies: function-bind: 1.1.1 has: 1.0.3 + has-proto: 1.0.1 has-symbols: 1.0.3 /get-package-type/0.1.0: @@ -15852,7 +16203,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 /get-uri/3.0.2: resolution: {integrity: sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==} @@ -15884,8 +16235,8 @@ packages: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} dev: true - /giturl/1.0.1: - resolution: {integrity: sha512-wQourBdI13n8tbjcZTDl6k+ZrCRMU6p9vfp9jknZq+zfWc8xXNztpZFM4XkPHVzHcMSUZxEMYYKZjIGkPlei6Q==} + /giturl/1.0.3: + resolution: {integrity: sha512-qVDEXufVtYUzYqI5hoDUONh9GCEPi0n+e35KNDafdsNt9fPxB0nvFW/kFiw7W42wkg8TUyhBqb+t24yyaoc87A==} engines: {node: '>= 0.10.0'} dev: false @@ -16032,7 +16383,7 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.1 ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 @@ -16054,7 +16405,7 @@ packages: /gopd/1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 /got/11.8.6: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} @@ -16065,7 +16416,7 @@ packages: '@types/cacheable-request': 6.0.3 '@types/responselike': 1.0.0 cacheable-lookup: 5.0.4 - cacheable-request: 7.0.2 + cacheable-request: 7.0.4 decompress-response: 6.0.0 http2-wrapper: 1.0.3 lowercase-keys: 2.0.0 @@ -16082,6 +16433,10 @@ packages: /grapheme-splitter/1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + /graphemer/1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + /graphql/15.8.0: resolution: {integrity: sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==} engines: {node: '>= 10.x'} @@ -16102,8 +16457,8 @@ packages: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} dev: false - /handlebars/4.7.7: - resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} + /handlebars/4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} hasBin: true dependencies: @@ -16153,7 +16508,7 @@ packages: /has-property-descriptors/1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 /has-proto/1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} @@ -16227,7 +16582,7 @@ packages: /hast-to-hyperscript/9.0.1: resolution: {integrity: sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 2.0.7 comma-separated-tokens: 1.0.8 property-information: 5.6.0 space-separated-tokens: 1.1.5 @@ -16254,7 +16609,7 @@ packages: /hast-util-raw/6.0.1: resolution: {integrity: sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==} dependencies: - '@types/hast': 2.3.4 + '@types/hast': 2.3.5 hast-util-from-parse5: 6.0.1 hast-util-to-parse5: 6.0.0 html-void-elements: 1.0.5 @@ -16279,7 +16634,7 @@ packages: /hastscript/6.0.0: resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} dependencies: - '@types/hast': 2.3.4 + '@types/hast': 2.3.5 comma-separated-tokens: 1.0.8 hast-util-parse-selector: 2.2.5 property-information: 5.6.0 @@ -16309,7 +16664,7 @@ packages: /history/5.0.0: resolution: {integrity: sha512-3NyRMKIiFSJmIPdq7FxkNMJkQ7ZEtVblOQ38VtKaA0zZMW1Eo6Q6W8oDKEflr1kNNTItSnk4JMCO1deeSgbLLg==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 dev: true /hmac-drbg/1.0.1: @@ -16355,8 +16710,8 @@ packages: dependencies: whatwg-encoding: 2.0.0 - /html-entities/2.3.3: - resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} + /html-entities/2.4.0: + resolution: {integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==} /html-escaper/2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -16385,10 +16740,10 @@ packages: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.16.8 + terser: 5.19.2 - /html-tags/3.2.0: - resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==} + /html-tags/3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} engines: {node: '>=8'} dev: true @@ -16431,8 +16786,8 @@ packages: webpack: 5.82.1 dev: true - /html-webpack-plugin/5.5.0_webpack@5.82.1: - resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==} + /html-webpack-plugin/5.5.3_webpack@5.82.1: + resolution: {integrity: sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==} engines: {node: '>=10.13.0'} peerDependencies: webpack: ^5.20.0 @@ -16458,7 +16813,7 @@ packages: domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.1.0 - entities: 4.4.0 + entities: 4.5.0 dev: true /http-cache-semantics/4.1.1: @@ -16532,7 +16887,7 @@ packages: optional: true dependencies: '@types/express': 4.17.13 - '@types/http-proxy': 1.17.10 + '@types/http-proxy': 1.17.11 http-proxy: 1.18.1 is-glob: 4.0.3 is-plain-obj: 3.0.0 @@ -16625,17 +16980,16 @@ packages: postcss: 7.0.39 dev: true - /icss-utils/5.1.0_postcss@8.4.21: + /icss-utils/5.1.0_postcss@8.4.27: resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 /ieee754/1.1.13: resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} - dev: true /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -16646,7 +17000,7 @@ packages: /ignore-walk/3.0.4: resolution: {integrity: sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==} dependencies: - minimatch: 3.1.2 + minimatch: 3.0.8 dev: false /ignore/4.0.6: @@ -16669,8 +17023,8 @@ packages: /immer/9.0.21: resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} - /immutable/4.3.0: - resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==} + /immutable/4.3.2: + resolution: {integrity: sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA==} dev: false /import-fresh/3.3.0: @@ -16774,7 +17128,7 @@ packages: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 has: 1.0.3 side-channel: 1.0.4 @@ -16804,8 +17158,8 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - /ipaddr.js/2.0.1: - resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==} + /ipaddr.js/2.1.0: + resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} engines: {node: '>= 10'} dev: false @@ -16849,8 +17203,8 @@ packages: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 - is-typed-array: 1.1.10 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -16898,8 +17252,8 @@ packages: dependencies: ci-info: 2.0.0 - /is-core-module/2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} + /is-core-module/2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} dependencies: has: 1.0.3 @@ -17150,15 +17504,11 @@ packages: dependencies: has-symbols: 1.0.3 - /is-typed-array/1.1.10: - resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + /is-typed-array/1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 + which-typed-array: 1.1.11 /is-typedarray/1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} @@ -17210,7 +17560,6 @@ packages: /isarray/2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true /isexe/2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -17239,19 +17588,19 @@ packages: engines: {node: '>=8'} dependencies: '@babel/core': 7.20.12 - '@babel/parser': 7.21.3 + '@babel/parser': 7.22.10 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color - /istanbul-lib-report/3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} + /istanbul-lib-report/3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} dependencies: istanbul-lib-coverage: 3.2.0 - make-dir: 3.1.0 + make-dir: 4.0.0 supports-color: 7.2.0 /istanbul-lib-source-maps/4.0.1: @@ -17264,12 +17613,12 @@ packages: transitivePeerDependencies: - supports-color - /istanbul-reports/3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} + /istanbul-reports/3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 - istanbul-lib-report: 3.0.0 + istanbul-lib-report: 3.0.1 /iterate-iterator/1.0.2: resolution: {integrity: sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==} @@ -17289,35 +17638,36 @@ packages: execa: 5.1.1 p-limit: 3.1.0 - /jest-circus/29.5.0: - resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} + /jest-circus/29.6.2: + resolution: {integrity: sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.5.0 - '@jest/expect': 29.5.0 - '@jest/test-result': 29.5.0_@types+node@14.18.36 - '@jest/types': 29.5.0 + '@jest/environment': 29.6.2 + '@jest/expect': 29.6.2 + '@jest/test-result': 29.6.2_@types+node@14.18.36 + '@jest/types': 29.6.1 '@types/node': 14.18.36 chalk: 4.1.2 co: 4.6.0 - dedent: 0.7.0 + dedent: 1.5.1 is-generator-fn: 2.1.0 - jest-each: 29.5.0 - jest-matcher-utils: 29.5.0 - jest-message-util: 29.5.0 - jest-runtime: 29.5.0 - jest-snapshot: 29.5.0 - jest-util: 29.5.0 + jest-each: 29.6.2 + jest-matcher-utils: 29.6.2 + jest-message-util: 29.6.2 + jest-runtime: 29.6.2 + jest-snapshot: 29.6.2 + jest-util: 29.6.2 p-limit: 3.1.0 - pretty-format: 29.5.0 - pure-rand: 6.0.1 + pretty-format: 29.6.2 + pure-rand: 6.0.2 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: + - babel-plugin-macros - supports-color - /jest-cli/29.5.0_@types+node@14.18.36: - resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} + /jest-cli/29.6.2_@types+node@14.18.36: + resolution: {integrity: sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -17326,20 +17676,21 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.5.0 - '@jest/test-result': 29.5.0_@types+node@14.18.36 - '@jest/types': 29.5.0 + '@jest/core': 29.6.2 + '@jest/test-result': 29.6.2_@types+node@14.18.36 + '@jest/types': 29.6.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.5.0_@types+node@14.18.36 - jest-util: 29.5.0 - jest-validate: 29.5.0 + jest-config: 29.6.2_@types+node@14.18.36 + jest-util: 29.6.2 + jest-validate: 29.6.2 prompts: 2.4.2 - yargs: 17.7.1 + yargs: 17.7.2 transitivePeerDependencies: - '@types/node' + - babel-plugin-macros - supports-color - ts-node dev: true @@ -17357,30 +17708,71 @@ packages: optional: true dependencies: '@babel/core': 7.20.12 - '@jest/test-sequencer': 29.5.0_@types+node@14.18.36 + '@jest/test-sequencer': 29.6.2_@types+node@14.18.36 '@jest/types': 29.5.0 '@types/node': 14.18.36 - babel-jest: 29.5.0_@babel+core@7.20.12 + babel-jest: 29.6.2_@babel+core@7.20.12 chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.5.0 + jest-circus: 29.6.2 jest-environment-node: 29.5.0 jest-get-type: 29.4.3 jest-regex-util: 29.4.3 jest-resolve: 29.5.0 - jest-runner: 29.5.0 - jest-util: 29.5.0 - jest-validate: 29.5.0 + jest-runner: 29.6.2 + jest-util: 29.6.2 + jest-validate: 29.6.2 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.6.2 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + /jest-config/29.6.2_@types+node@14.18.36: + resolution: {integrity: sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.20.12 + '@jest/test-sequencer': 29.6.2_@types+node@14.18.36 + '@jest/types': 29.6.1 + '@types/node': 14.18.36 + babel-jest: 29.6.2_@babel+core@7.20.12 + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.6.2 + jest-environment-node: 29.6.2 + jest-get-type: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.6.2 + jest-runner: 29.6.2 + jest-util: 29.6.2 + jest-validate: 29.6.2 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 29.5.0 + pretty-format: 29.6.2 slash: 3.0.0 strip-json-comments: 3.1.1 transitivePeerDependencies: + - babel-plugin-macros - supports-color + dev: true /jest-diff/27.5.1: resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} @@ -17392,14 +17784,14 @@ packages: pretty-format: 27.5.1 dev: true - /jest-diff/29.5.0: - resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} + /jest-diff/29.6.2: + resolution: {integrity: sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 diff-sequences: 29.4.3 jest-get-type: 29.4.3 - pretty-format: 29.5.0 + pretty-format: 29.6.2 /jest-docblock/29.4.3: resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} @@ -17407,15 +17799,15 @@ packages: dependencies: detect-newline: 3.1.0 - /jest-each/29.5.0: - resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} + /jest-each/29.6.2: + resolution: {integrity: sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 chalk: 4.1.2 jest-get-type: 29.4.3 - jest-util: 29.5.0 - pretty-format: 29.5.0 + jest-util: 29.6.2 + pretty-format: 29.6.2 /jest-environment-jsdom/29.5.0: resolution: {integrity: sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==} @@ -17426,13 +17818,13 @@ packages: canvas: optional: true dependencies: - '@jest/environment': 29.5.0 - '@jest/fake-timers': 29.5.0 + '@jest/environment': 29.6.2 + '@jest/fake-timers': 29.6.2 '@jest/types': 29.5.0 '@types/jsdom': 20.0.1 '@types/node': 14.18.36 - jest-mock: 29.5.0 - jest-util: 29.5.0 + jest-mock: 29.6.2 + jest-util: 29.6.2 jsdom: 20.0.3 transitivePeerDependencies: - bufferutil @@ -17443,12 +17835,23 @@ packages: resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.5.0 - '@jest/fake-timers': 29.5.0 + '@jest/environment': 29.6.2 + '@jest/fake-timers': 29.6.2 '@jest/types': 29.5.0 '@types/node': 14.18.36 - jest-mock: 29.5.0 - jest-util: 29.5.0 + jest-mock: 29.6.2 + jest-util: 29.6.2 + + /jest-environment-node/29.6.2: + resolution: {integrity: sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.6.2 + '@jest/fake-timers': 29.6.2 + '@jest/types': 29.6.1 + '@types/node': 14.18.36 + jest-mock: 29.6.2 + jest-util: 29.6.2 /jest-get-type/27.5.1: resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} @@ -17480,30 +17883,30 @@ packages: fsevents: 2.3.2 dev: true - /jest-haste-map/29.5.0: - resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} + /jest-haste-map/29.6.2: + resolution: {integrity: sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 '@types/graceful-fs': 4.1.6 '@types/node': 14.18.36 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 jest-regex-util: 29.4.3 - jest-util: 29.5.0 - jest-worker: 29.5.0 + jest-util: 29.6.2 + jest-worker: 29.6.2 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 - /jest-leak-detector/29.5.0: - resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} + /jest-leak-detector/29.6.2: + resolution: {integrity: sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 - pretty-format: 29.5.0 + pretty-format: 29.6.2 /jest-matcher-utils/27.5.1: resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} @@ -17515,36 +17918,36 @@ packages: pretty-format: 27.5.1 dev: true - /jest-matcher-utils/29.5.0: - resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} + /jest-matcher-utils/29.6.2: + resolution: {integrity: sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 - jest-diff: 29.5.0 + jest-diff: 29.6.2 jest-get-type: 29.4.3 - pretty-format: 29.5.0 + pretty-format: 29.6.2 - /jest-message-util/29.5.0: - resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} + /jest-message-util/29.6.2: + resolution: {integrity: sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.18.6 - '@jest/types': 29.5.0 + '@babel/code-frame': 7.22.10 + '@jest/types': 29.6.1 '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.5 - pretty-format: 29.5.0 + pretty-format: 29.6.2 slash: 3.0.0 stack-utils: 2.0.6 - /jest-mock/29.5.0: - resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} + /jest-mock/29.6.2: + resolution: {integrity: sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 '@types/node': 14.18.36 - jest-util: 29.5.0 + jest-util: 29.6.2 /jest-pnp-resolver/1.2.3_jest-resolve@29.5.0: resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} @@ -17557,6 +17960,17 @@ packages: dependencies: jest-resolve: 29.5.0 + /jest-pnp-resolver/1.2.3_jest-resolve@29.6.2: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 29.6.2 + /jest-regex-util/26.0.0: resolution: {integrity: sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==} engines: {node: '>= 10.14.2'} @@ -17566,12 +17980,12 @@ packages: resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - /jest-resolve-dependencies/29.5.0: - resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} + /jest-resolve-dependencies/29.6.2: + resolution: {integrity: sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-regex-util: 29.4.3 - jest-snapshot: 29.5.0 + jest-snapshot: 29.6.2 transitivePeerDependencies: - supports-color @@ -17581,66 +17995,80 @@ packages: dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 - jest-haste-map: 29.5.0 + jest-haste-map: 29.6.2 jest-pnp-resolver: 1.2.3_jest-resolve@29.5.0 - jest-util: 29.5.0 - jest-validate: 29.5.0 - resolve: 1.22.1 + jest-util: 29.6.2 + jest-validate: 29.6.2 + resolve: 1.22.4 resolve.exports: 2.0.2 slash: 3.0.0 - /jest-runner/29.5.0: - resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} + /jest-resolve/29.6.2: + resolution: {integrity: sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.5.0 - '@jest/environment': 29.5.0 - '@jest/test-result': 29.5.0_@types+node@14.18.36 - '@jest/transform': 29.5.0 - '@jest/types': 29.5.0 + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.6.2 + jest-pnp-resolver: 1.2.3_jest-resolve@29.6.2 + jest-util: 29.6.2 + jest-validate: 29.6.2 + resolve: 1.22.4 + resolve.exports: 2.0.2 + slash: 3.0.0 + + /jest-runner/29.6.2: + resolution: {integrity: sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.6.2 + '@jest/environment': 29.6.2 + '@jest/test-result': 29.6.2_@types+node@14.18.36 + '@jest/transform': 29.6.2 + '@jest/types': 29.6.1 '@types/node': 14.18.36 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 jest-docblock: 29.4.3 - jest-environment-node: 29.5.0 - jest-haste-map: 29.5.0 - jest-leak-detector: 29.5.0 - jest-message-util: 29.5.0 - jest-resolve: 29.5.0 - jest-runtime: 29.5.0 - jest-util: 29.5.0 - jest-watcher: 29.5.0 - jest-worker: 29.5.0 + jest-environment-node: 29.6.2 + jest-haste-map: 29.6.2 + jest-leak-detector: 29.6.2 + jest-message-util: 29.6.2 + jest-resolve: 29.6.2 + jest-runtime: 29.6.2 + jest-util: 29.6.2 + jest-watcher: 29.6.2 + jest-worker: 29.6.2 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: - supports-color - /jest-runtime/29.5.0: - resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} + /jest-runtime/29.6.2: + resolution: {integrity: sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.5.0 - '@jest/fake-timers': 29.5.0 - '@jest/globals': 29.5.0 - '@jest/source-map': 29.4.3 - '@jest/test-result': 29.5.0_@types+node@14.18.36 - '@jest/transform': 29.5.0 - '@jest/types': 29.5.0 + '@jest/environment': 29.6.2 + '@jest/fake-timers': 29.6.2 + '@jest/globals': 29.6.2 + '@jest/source-map': 29.6.0 + '@jest/test-result': 29.6.2_@types+node@14.18.36 + '@jest/transform': 29.6.2 + '@jest/types': 29.6.1 '@types/node': 14.18.36 chalk: 4.1.2 - cjs-module-lexer: 1.2.2 - collect-v8-coverage: 1.0.1_@types+node@14.18.36 + cjs-module-lexer: 1.2.3 + collect-v8-coverage: 1.0.2_@types+node@14.18.36 glob: 7.2.3 graceful-fs: 4.2.11 - jest-haste-map: 29.5.0 - jest-message-util: 29.5.0 - jest-mock: 29.5.0 + jest-haste-map: 29.6.2 + jest-message-util: 29.6.2 + jest-mock: 29.6.2 jest-regex-util: 29.4.3 - jest-resolve: 29.5.0 - jest-snapshot: 29.5.0 - jest-util: 29.5.0 + jest-resolve: 29.6.2 + jest-snapshot: 29.6.2 + jest-util: 29.6.2 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: @@ -17659,27 +18087,54 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.20.12 - '@babel/generator': 7.21.3 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 - '@babel/traverse': 7.21.3 - '@babel/types': 7.21.3 - '@jest/expect-utils': 29.5.0 + '@babel/generator': 7.22.10 + '@babel/plugin-syntax-jsx': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-syntax-typescript': 7.22.5_@babel+core@7.20.12 + '@babel/traverse': 7.22.10 + '@babel/types': 7.22.10 + '@jest/expect-utils': 29.6.2 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/babel__traverse': 7.18.3 - '@types/prettier': 2.7.2 + '@types/babel__traverse': 7.20.1 + '@types/prettier': 2.7.3 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 + chalk: 4.1.2 + expect: 29.6.2 + graceful-fs: 4.2.11 + jest-diff: 29.6.2 + jest-get-type: 29.4.3 + jest-matcher-utils: 29.6.2 + jest-message-util: 29.6.2 + jest-util: 29.6.2 + natural-compare: 1.4.0 + pretty-format: 29.6.2 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + + /jest-snapshot/29.6.2: + resolution: {integrity: sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.20.12 + '@babel/generator': 7.22.10 + '@babel/plugin-syntax-jsx': 7.22.5_@babel+core@7.20.12 + '@babel/plugin-syntax-typescript': 7.22.5_@babel+core@7.20.12 + '@babel/types': 7.22.10 + '@jest/expect-utils': 29.6.2 + '@jest/transform': 29.6.2 + '@jest/types': 29.6.1 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 chalk: 4.1.2 - expect: 29.5.0 + expect: 29.6.2 graceful-fs: 4.2.11 - jest-diff: 29.5.0 + jest-diff: 29.6.2 jest-get-type: 29.4.3 - jest-matcher-utils: 29.5.0 - jest-message-util: 29.5.0 - jest-util: 29.5.0 + jest-matcher-utils: 29.6.2 + jest-message-util: 29.6.2 + jest-util: 29.6.2 natural-compare: 1.4.0 - pretty-format: 29.5.0 + pretty-format: 29.6.2 semver: 7.5.4 transitivePeerDependencies: - supports-color @@ -17696,27 +18151,27 @@ packages: micromatch: 4.0.5 dev: true - /jest-util/29.5.0: - resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} + /jest-util/29.6.2: + resolution: {integrity: sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 '@types/node': 14.18.36 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 picomatch: 2.3.1 - /jest-validate/29.5.0: - resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} + /jest-validate/29.6.2: + resolution: {integrity: sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.1 camelcase: 6.3.0 chalk: 4.1.2 jest-get-type: 29.4.3 leven: 3.1.0 - pretty-format: 29.5.0 + pretty-format: 29.6.2 /jest-watch-select-projects/2.0.0: resolution: {integrity: sha512-j00nW4dXc2NiCW6znXgFLF9g8PJ0zP25cpQ1xRro/HU2GBfZQFZD0SoXnAlaoKkIY4MlfTMkKGbNXFpvCdjl1w==} @@ -17726,17 +18181,17 @@ packages: prompts: 2.4.2 dev: true - /jest-watcher/29.5.0: - resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} + /jest-watcher/29.6.2: + resolution: {integrity: sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.5.0_@types+node@14.18.36 - '@jest/types': 29.5.0 + '@jest/test-result': 29.6.2_@types+node@14.18.36 + '@jest/types': 29.6.1 '@types/node': 14.18.36 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 - jest-util: 29.5.0 + jest-util: 29.6.2 string-length: 4.0.2 /jest-worker/26.6.2: @@ -17756,12 +18211,12 @@ packages: merge-stream: 2.0.0 supports-color: 8.1.1 - /jest-worker/29.5.0: - resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} + /jest-worker/29.6.2: + resolution: {integrity: sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@types/node': 14.18.36 - jest-util: 29.5.0 + jest-util: 29.6.2 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -17778,9 +18233,10 @@ packages: '@jest/core': 29.5.0 '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.5.0_@types+node@14.18.36 + jest-cli: 29.6.2_@types+node@14.18.36 transitivePeerDependencies: - '@types/node' + - babel-plugin-macros - supports-color - ts-node dev: true @@ -17793,10 +18249,6 @@ packages: engines: {node: '>= 0.6.0'} dev: true - /js-sdsl/4.4.0: - resolution: {integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==} - dev: true - /js-string-escape/1.0.1: resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} engines: {node: '>= 0.8'} @@ -17830,25 +18282,25 @@ packages: dependencies: argparse: 2.0.1 - /jscodeshift/0.13.1_@babel+preset-env@7.20.2: + /jscodeshift/0.13.1_@babel+preset-env@7.22.10: resolution: {integrity: sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==} hasBin: true peerDependencies: '@babel/preset-env': ^7.1.6 dependencies: '@babel/core': 7.20.12 - '@babel/parser': 7.21.3 + '@babel/parser': 7.22.10 '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12 '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.12 '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.20.12 - '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.20.12 - '@babel/preset-env': 7.20.2_@babel+core@7.20.12 - '@babel/preset-flow': 7.18.6_@babel+core@7.20.12 - '@babel/preset-typescript': 7.21.0_@babel+core@7.20.12 - '@babel/register': 7.21.0_@babel+core@7.20.12 + '@babel/plugin-transform-modules-commonjs': 7.22.5_@babel+core@7.20.12 + '@babel/preset-env': 7.22.10_@babel+core@7.20.12 + '@babel/preset-flow': 7.22.5_@babel+core@7.20.12 + '@babel/preset-typescript': 7.22.5_@babel+core@7.20.12 + '@babel/register': 7.22.5_@babel+core@7.20.12 babel-core: 7.0.0-bridge.0_@babel+core@7.20.12 chalk: 4.1.2 - flow-parser: 0.202.1 + flow-parser: 0.214.0 graceful-fs: 4.2.11 micromatch: 3.1.10 neo-async: 2.6.2 @@ -17870,24 +18322,24 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.8.2 + acorn: 8.10.0 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 data-urls: 3.0.2 decimal.js: 10.4.3 domexception: 4.0.0 - escodegen: 2.0.0 + escodegen: 2.1.0 form-data: 4.0.0 html-encoding-sniffer: 3.0.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.2 + nwsapi: 2.2.7 parse5: 7.1.2 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.2 + tough-cookie: 4.1.3 w3c-xmlserializer: 4.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 @@ -17973,12 +18425,8 @@ packages: resolution: {integrity: sha512-e0Jtg4KAzDJKKwzbLaUtinCn0RZseWBVRTRGihSpvFlM3wTR7ExSp+PTdeTsDrLNJUe7L7JYJe8mblHX5SCT6A==} engines: {node: '>=10.0'} - /jsonschema/1.4.1: - resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} - dev: true - - /jsonwebtoken/9.0.0: - resolution: {integrity: sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==} + /jsonwebtoken/9.0.1: + resolution: {integrity: sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==} engines: {node: '>=12', npm: '>=6'} dependencies: jws: 3.2.2 @@ -17987,12 +18435,14 @@ packages: semver: 7.5.4 dev: false - /jsx-ast-utils/3.3.3: - resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} + /jsx-ast-utils/3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} dependencies: array-includes: 3.1.6 + array.prototype.flat: 1.3.1 object.assign: 4.1.4 + object.values: 1.1.6 /jszip/2.7.0: resolution: {integrity: sha512-JIsRKRVC3gTRo2vM4Wy9WBC3TRcfnIZU8k65Phi3izkvPH975FowRYtKGT6PxevA0XnJ/yO8b0QwV0ydVyQwfw==} @@ -18056,8 +18506,8 @@ packages: prebuild-install: 7.1.1 dev: true - /keyv/4.5.2: - resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==} + /keyv/4.5.3: + resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} dependencies: json-buffer: 3.0.1 @@ -18100,9 +18550,9 @@ packages: resolution: {integrity: sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==} engines: {node: '>=6.0.0', npm: '>=6.0.0', yarn: '>=1.0.0'} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 app-root-dir: 1.0.2 - core-js: 3.29.1 + core-js: 3.32.0 dotenv: 8.6.0 dotenv-expand: 5.1.0 dev: true @@ -18124,6 +18574,7 @@ packages: dependencies: prelude-ls: 1.1.2 type-check: 0.3.2 + dev: true /levn/0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -18351,10 +18802,11 @@ packages: es5-ext: 0.10.62 dev: true - /magic-string/0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + /magic-string/0.30.2: + resolution: {integrity: sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==} + engines: {node: '>=12'} dependencies: - sourcemap-codec: 1.4.8 + '@jridgewell/sourcemap-codec': 1.4.15 dev: false /make-dir/2.1.0: @@ -18362,19 +18814,25 @@ packages: engines: {node: '>=6'} dependencies: pify: 4.0.1 - semver: 5.7.1 + semver: 5.7.2 /make-dir/3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: - semver: 6.3.0 + semver: 6.3.1 + + /make-dir/4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 /make-fetch-happen/8.0.14: resolution: {integrity: sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==} engines: {node: '>= 10'} dependencies: - agentkeepalive: 4.3.0 + agentkeepalive: 4.5.0 cacache: 15.3.0 http-cache-semantics: 4.1.1 http-proxy-agent: 4.0.1 @@ -18444,8 +18902,8 @@ packages: uc.micro: 1.0.6 dev: true - /markdown-to-jsx/7.2.0_react@16.13.1: - resolution: {integrity: sha512-3l4/Bigjm4bEqjCR6Xr+d4DtM1X6vvtGsMGSjJYyep8RjjIvcWtrXBS8Wbfe1/P+atKNMccpsraESIaWVplzVg==} + /markdown-to-jsx/7.3.2_react@16.13.1: + resolution: {integrity: sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==} engines: {node: '>= 10'} peerDependencies: react: '>= 0.14.0' @@ -18483,8 +18941,8 @@ packages: /mdast-util-to-hast/10.0.1: resolution: {integrity: sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==} dependencies: - '@types/mdast': 3.0.11 - '@types/unist': 2.0.6 + '@types/mdast': 3.0.12 + '@types/unist': 2.0.7 mdast-util-definitions: 4.0.0 mdurl: 1.0.1 unist-builder: 2.0.3 @@ -18676,7 +19134,7 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - schema-utils: 4.0.0 + schema-utils: 4.2.0 webpack: 5.82.1 dev: false @@ -18767,10 +19225,15 @@ packages: dependencies: yallist: 4.0.0 - /minipass/4.2.5: - resolution: {integrity: sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==} + /minipass/5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} + /minipass/7.0.2: + resolution: {integrity: sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + /minizlib/2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} @@ -18877,7 +19340,7 @@ packages: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true dependencies: - dns-packet: 5.5.0 + dns-packet: 5.6.0 thunky: 1.1.0 dev: false @@ -18889,7 +19352,7 @@ packages: array-differ: 3.0.0 array-union: 2.1.0 arrify: 2.0.1 - minimatch: 3.1.2 + minimatch: 3.0.8 dev: false /mute-stream/0.0.8: @@ -18905,7 +19368,6 @@ packages: /nan/2.17.0: resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} - requiresBuild: true optional: true /nanoid/3.3.1: @@ -19043,7 +19505,7 @@ packages: npmlog: 4.1.2 rimraf: 3.0.2 semver: 7.5.4 - tar: 6.1.13 + tar: 6.1.15 which: 2.0.2 transitivePeerDependencies: - supports-color @@ -19075,12 +19537,12 @@ packages: string_decoder: 1.3.0 timers-browserify: 2.0.12 tty-browserify: 0.0.0 - url: 0.11.0 + url: 0.11.1 util: 0.11.1 vm-browserify: 1.1.2 - /node-releases/2.0.10: - resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} + /node-releases/2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} /nopt/5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} @@ -19094,8 +19556,8 @@ packages: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.1 - semver: 5.7.1 + resolve: 1.22.4 + semver: 5.7.2 validate-npm-package-license: 3.0.4 /normalize-package-data/3.0.3: @@ -19103,7 +19565,7 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.11.0 + is-core-module: 2.13.0 semver: 7.5.4 validate-npm-package-license: 3.0.4 dev: false @@ -19142,7 +19604,7 @@ packages: co: 4.6.0 depcheck: 1.4.3 execa: 5.1.1 - giturl: 1.0.1 + giturl: 1.0.3 global-modules: 2.0.0 globby: 11.1.0 inquirer: 7.3.3 @@ -19156,7 +19618,7 @@ packages: path-exists: 4.0.0 pkg-dir: 5.0.0 preferred-pm: 3.0.3 - rc-config-loader: 4.1.2 + rc-config-loader: 4.1.3 semver: 7.5.4 semver-diff: 3.1.1 strip-ansi: 6.0.1 @@ -19177,7 +19639,7 @@ packages: dependencies: hosted-git-info: 2.8.9 osenv: 0.1.5 - semver: 5.7.1 + semver: 5.7.2 validate-npm-package-name: 3.0.0 dev: false @@ -19237,8 +19699,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /nwsapi/2.2.2: - resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} + /nwsapi/2.2.7: + resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} /object-assign/4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -19280,7 +19742,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 /object.fromentries/2.0.6: resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} @@ -19288,22 +19750,23 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 - /object.getownpropertydescriptors/2.1.5: - resolution: {integrity: sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==} + /object.getownpropertydescriptors/2.1.6: + resolution: {integrity: sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ==} engines: {node: '>= 0.8'} dependencies: array.prototype.reduce: 1.0.5 call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 + safe-array-concat: 1.0.0 /object.hasown/1.1.2: resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} dependencies: define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 /object.pick/1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} @@ -19317,7 +19780,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 /objectorarray/1.0.5: resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} @@ -19385,18 +19848,19 @@ packages: levn: 0.3.0 prelude-ls: 1.1.2 type-check: 0.3.2 - word-wrap: 1.2.3 + word-wrap: 1.2.5 + dev: true - /optionator/0.9.1: - resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + /optionator/0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - word-wrap: 1.2.3 /ora/5.4.1: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} @@ -19405,7 +19869,7 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.7.0 + cli-spinners: 2.9.0 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 @@ -19574,7 +20038,7 @@ packages: resolution: {integrity: sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==} engines: {node: '>= 8'} dependencies: - degenerator: 3.0.2 + degenerator: 3.0.4 ip: 1.1.8 netmask: 2.0.2 dev: true @@ -19594,7 +20058,7 @@ packages: /parallel-transform/1.2.0: resolution: {integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==} dependencies: - cyclist: 1.0.1 + cyclist: 1.0.2 inherits: 2.0.4 readable-stream: 2.3.8 @@ -19634,7 +20098,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.10 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -19647,7 +20111,7 @@ packages: /parse-semver/1.1.1: resolution: {integrity: sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==} dependencies: - semver: 5.7.1 + semver: 5.7.2 dev: true /parse5-htmlparser2-tree-adapter/7.0.0: @@ -19664,7 +20128,7 @@ packages: /parse5/7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: - entities: 4.4.0 + entities: 4.5.0 /parseurl/1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} @@ -19780,7 +20244,7 @@ packages: resolution: {integrity: sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==} hasBin: true dependencies: - fast-redact: 3.1.2 + fast-redact: 3.3.0 fast-safe-stringify: 2.1.1 flatstr: 1.0.12 pino-std-serializers: 3.2.0 @@ -19789,8 +20253,8 @@ packages: sonic-boom: 1.4.1 dev: false - /pirates/4.0.5: - resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} + /pirates/4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} /pkg-dir/3.0.0: @@ -19837,81 +20301,81 @@ packages: resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==} engines: {node: '>=10'} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 dev: true /posix-character-classes/0.1.1: resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} engines: {node: '>=0.10.0'} - /postcss-calc/8.2.4_postcss@8.4.21: + /postcss-calc/8.2.4_postcss@8.4.27: resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} peerDependencies: postcss: ^8.2.2 dependencies: - postcss: 8.4.21 - postcss-selector-parser: 6.0.11 + postcss: 8.4.27 + postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 dev: false - /postcss-colormin/5.3.1_postcss@8.4.21: + /postcss-colormin/5.3.1_postcss@8.4.27: resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 + browserslist: 4.21.10 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.4.21 + postcss: 8.4.27 postcss-value-parser: 4.2.0 dev: false - /postcss-convert-values/5.1.3_postcss@8.4.21: + /postcss-convert-values/5.1.3_postcss@8.4.27: resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 - postcss: 8.4.21 + browserslist: 4.21.10 + postcss: 8.4.27 postcss-value-parser: 4.2.0 dev: false - /postcss-discard-comments/5.1.2_postcss@8.4.21: + /postcss-discard-comments/5.1.2_postcss@8.4.27: resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 dev: false - /postcss-discard-duplicates/5.1.0_postcss@8.4.21: + /postcss-discard-duplicates/5.1.0_postcss@8.4.27: resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 dev: false - /postcss-discard-empty/5.1.1_postcss@8.4.21: + /postcss-discard-empty/5.1.1_postcss@8.4.27: resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 dev: false - /postcss-discard-overridden/5.1.0_postcss@8.4.21: + /postcss-discard-overridden/5.1.0_postcss@8.4.27: resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 dev: false /postcss-flexbugs-fixes/4.2.1: @@ -19920,7 +20384,7 @@ packages: postcss: 7.0.39 dev: true - /postcss-loader/4.1.0_q6bo6nn7or7rkhjb274oworunu: + /postcss-loader/4.1.0_ekdjxa4augitkpf5xi76zab6zu: resolution: {integrity: sha512-vbCkP70F3Q9PIk6d47aBwjqAMI4LfkXCoyxj+7NPNuVIwfTGdzv2KVQes59/RuxMniIgsYQCFSY42P3+ykJfaw==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -19930,8 +20394,8 @@ packages: cosmiconfig: 7.1.0 klona: 2.0.6 loader-utils: 2.0.4 - postcss: 8.4.21 - schema-utils: 3.1.1 + postcss: 8.4.27 + schema-utils: 3.3.0 semver: 7.5.4 webpack: 4.44.2 dev: true @@ -19947,12 +20411,12 @@ packages: klona: 2.0.6 loader-utils: 2.0.4 postcss: 7.0.39 - schema-utils: 3.1.2 + schema-utils: 3.3.0 semver: 7.5.4 webpack: 4.44.2 dev: true - /postcss-loader/6.2.1_ppp6sa22bpb7xvyjstggfxu46e: + /postcss-loader/6.2.1_3jh5p6n5i3mvhowydduikwr2gm: resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -19961,77 +20425,77 @@ packages: dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 - postcss: 8.4.21 + postcss: 8.4.27 semver: 7.5.4 webpack: 5.82.1 dev: false - /postcss-merge-longhand/5.1.7_postcss@8.4.21: + /postcss-merge-longhand/5.1.7_postcss@8.4.27: resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 postcss-value-parser: 4.2.0 - stylehacks: 5.1.1_postcss@8.4.21 + stylehacks: 5.1.1_postcss@8.4.27 dev: false - /postcss-merge-rules/5.1.4_postcss@8.4.21: + /postcss-merge-rules/5.1.4_postcss@8.4.27: resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 + browserslist: 4.21.10 caniuse-api: 3.0.0 - cssnano-utils: 3.1.0_postcss@8.4.21 - postcss: 8.4.21 - postcss-selector-parser: 6.0.11 + cssnano-utils: 3.1.0_postcss@8.4.27 + postcss: 8.4.27 + postcss-selector-parser: 6.0.13 dev: false - /postcss-minify-font-values/5.1.0_postcss@8.4.21: + /postcss-minify-font-values/5.1.0_postcss@8.4.27: resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 postcss-value-parser: 4.2.0 dev: false - /postcss-minify-gradients/5.1.1_postcss@8.4.21: + /postcss-minify-gradients/5.1.1_postcss@8.4.27: resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: colord: 2.9.3 - cssnano-utils: 3.1.0_postcss@8.4.21 - postcss: 8.4.21 + cssnano-utils: 3.1.0_postcss@8.4.27 + postcss: 8.4.27 postcss-value-parser: 4.2.0 dev: false - /postcss-minify-params/5.1.4_postcss@8.4.21: + /postcss-minify-params/5.1.4_postcss@8.4.27: resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 - cssnano-utils: 3.1.0_postcss@8.4.21 - postcss: 8.4.21 + browserslist: 4.21.10 + cssnano-utils: 3.1.0_postcss@8.4.27 + postcss: 8.4.27 postcss-value-parser: 4.2.0 dev: false - /postcss-minify-selectors/5.2.1_postcss@8.4.21: + /postcss-minify-selectors/5.2.1_postcss@8.4.27: resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 - postcss-selector-parser: 6.0.11 + postcss: 8.4.27 + postcss-selector-parser: 6.0.13 dev: false /postcss-modules-extract-imports/1.1.0: @@ -20047,13 +20511,13 @@ packages: postcss: 7.0.39 dev: true - /postcss-modules-extract-imports/3.0.0_postcss@8.4.21: + /postcss-modules-extract-imports/3.0.0_postcss@8.4.27: resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 /postcss-modules-local-by-default/1.2.0: resolution: {integrity: sha512-X4cquUPIaAd86raVrBwO8fwRfkIdbwFu7CTfEOjiZQHVQwlHRSkTgH5NLDmMm5+1hQO8u6dZ+TOOJDbay1hYpA==} @@ -20068,19 +20532,19 @@ packages: dependencies: icss-utils: 4.1.1 postcss: 7.0.39 - postcss-selector-parser: 6.0.11 + postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 dev: true - /postcss-modules-local-by-default/4.0.0_postcss@8.4.21: - resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==} + /postcss-modules-local-by-default/4.0.3_postcss@8.4.27: + resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0_postcss@8.4.21 - postcss: 8.4.21 - postcss-selector-parser: 6.0.11 + icss-utils: 5.1.0_postcss@8.4.27 + postcss: 8.4.27 + postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 /postcss-modules-scope/1.1.0: @@ -20095,17 +20559,17 @@ packages: engines: {node: '>= 6'} dependencies: postcss: 7.0.39 - postcss-selector-parser: 6.0.11 + postcss-selector-parser: 6.0.13 dev: true - /postcss-modules-scope/3.0.0_postcss@8.4.21: + /postcss-modules-scope/3.0.0_postcss@8.4.27: resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.21 - postcss-selector-parser: 6.0.11 + postcss: 8.4.27 + postcss-selector-parser: 6.0.13 /postcss-modules-values/1.3.0: resolution: {integrity: sha512-i7IFaR9hlQ6/0UgFuqM6YWaCfA1Ej8WMg8A5DggnH1UGKJvTV/ugqq/KaULixzzOi3T/tF6ClBXcHGCzdd5unA==} @@ -20121,14 +20585,14 @@ packages: postcss: 7.0.39 dev: true - /postcss-modules-values/4.0.0_postcss@8.4.21: + /postcss-modules-values/4.0.0_postcss@8.4.27: resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0_postcss@8.4.21 - postcss: 8.4.21 + icss-utils: 5.1.0_postcss@8.4.27 + postcss: 8.4.27 /postcss-modules/1.5.0: resolution: {integrity: sha512-KiAihzcV0TxTTNA5OXreyIXctuHOfR50WIhqBpc8pe0Q5dcs/Uap9EVlifOI9am7zGGdGOJQ6B1MPYKo2UxgOg==} @@ -20140,155 +20604,155 @@ packages: string-hash: 1.1.3 dev: false - /postcss-normalize-charset/5.1.0_postcss@8.4.21: + /postcss-normalize-charset/5.1.0_postcss@8.4.27: resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 dev: false - /postcss-normalize-display-values/5.1.0_postcss@8.4.21: + /postcss-normalize-display-values/5.1.0_postcss@8.4.27: resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-positions/5.1.1_postcss@8.4.21: + /postcss-normalize-positions/5.1.1_postcss@8.4.27: resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-repeat-style/5.1.1_postcss@8.4.21: + /postcss-normalize-repeat-style/5.1.1_postcss@8.4.27: resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-string/5.1.0_postcss@8.4.21: + /postcss-normalize-string/5.1.0_postcss@8.4.27: resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-timing-functions/5.1.0_postcss@8.4.21: + /postcss-normalize-timing-functions/5.1.0_postcss@8.4.27: resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-unicode/5.1.1_postcss@8.4.21: + /postcss-normalize-unicode/5.1.1_postcss@8.4.27: resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 - postcss: 8.4.21 + browserslist: 4.21.10 + postcss: 8.4.27 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-url/5.1.0_postcss@8.4.21: + /postcss-normalize-url/5.1.0_postcss@8.4.27: resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: normalize-url: 6.1.0 - postcss: 8.4.21 + postcss: 8.4.27 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-whitespace/5.1.1_postcss@8.4.21: + /postcss-normalize-whitespace/5.1.1_postcss@8.4.27: resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 postcss-value-parser: 4.2.0 dev: false - /postcss-ordered-values/5.1.3_postcss@8.4.21: + /postcss-ordered-values/5.1.3_postcss@8.4.27: resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - cssnano-utils: 3.1.0_postcss@8.4.21 - postcss: 8.4.21 + cssnano-utils: 3.1.0_postcss@8.4.27 + postcss: 8.4.27 postcss-value-parser: 4.2.0 dev: false - /postcss-reduce-initial/5.1.2_postcss@8.4.21: + /postcss-reduce-initial/5.1.2_postcss@8.4.27: resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 + browserslist: 4.21.10 caniuse-api: 3.0.0 - postcss: 8.4.21 + postcss: 8.4.27 dev: false - /postcss-reduce-transforms/5.1.0_postcss@8.4.21: + /postcss-reduce-transforms/5.1.0_postcss@8.4.27: resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 postcss-value-parser: 4.2.0 dev: false - /postcss-selector-parser/6.0.11: - resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} + /postcss-selector-parser/6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - /postcss-svgo/5.1.0_postcss@8.4.21: + /postcss-svgo/5.1.0_postcss@8.4.27: resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 + postcss: 8.4.27 postcss-value-parser: 4.2.0 svgo: 2.8.0 dev: false - /postcss-unique-selectors/5.1.1_postcss@8.4.21: + /postcss-unique-selectors/5.1.1_postcss@8.4.27: resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.21 - postcss-selector-parser: 6.0.11 + postcss: 8.4.27 + postcss-selector-parser: 6.0.13 dev: false /postcss-value-parser/4.2.0: @@ -20310,8 +20774,8 @@ packages: picocolors: 0.2.1 source-map: 0.6.1 - /postcss/8.4.21: - resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} + /postcss/8.4.27: + resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.6 @@ -20350,6 +20814,7 @@ packages: /prelude-ls/1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} + dev: true /prelude-ls/1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -20382,11 +20847,11 @@ packages: react-is: 17.0.2 dev: true - /pretty-format/29.5.0: - resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} + /pretty-format/29.6.2: + resolution: {integrity: sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.4.3 + '@jest/schemas': 29.6.0 ansi-styles: 5.2.0 react-is: 18.2.0 @@ -20444,8 +20909,8 @@ packages: array.prototype.map: 1.0.5 call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 - get-intrinsic: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 iterate-value: 1.0.2 dev: true @@ -20455,7 +20920,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 dev: true /promptly/3.2.0: @@ -20518,7 +20983,7 @@ packages: /pseudolocale/1.1.0: resolution: {integrity: sha512-OZ8I/hwYEJ3beN3IEcNnt8EpcqblH0/x23hulKBXjs+WhTTEle+ijCHCkh2bd+cIIeCuCwSCbBe93IthGG6hLw==} dependencies: - commander: 10.0.0 + commander: 11.0.0 dev: false /psl/1.9.0: @@ -20555,6 +21020,7 @@ packages: /punycode/1.3.2: resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} + dev: true /punycode/1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} @@ -20587,8 +21053,8 @@ packages: - supports-color dev: true - /pure-rand/6.0.1: - resolution: {integrity: sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==} + /pure-rand/6.0.2: + resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} /q/1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} @@ -20608,12 +21074,11 @@ packages: side-channel: 1.0.4 dev: true - /qs/6.11.1: - resolution: {integrity: sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==} + /qs/6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 - dev: true /query-ast/1.0.5: resolution: {integrity: sha512-JK+1ma4YDuLjvKKcz9JZ70G+CM9qEOs/l1cZzstMMfwKUabTJ9sud5jvDGrUNuv03yKUgs82bLkHXJkDyhRmBw==} @@ -20630,6 +21095,7 @@ packages: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + dev: true /querystringify/2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -20699,12 +21165,12 @@ packages: webpack: ^4.0.0 || ^5.0.0 dependencies: loader-utils: 2.0.4 - schema-utils: 3.1.2 + schema-utils: 3.3.0 webpack: 4.44.2 dev: true - /rc-config-loader/4.1.2: - resolution: {integrity: sha512-qKTnVWFl9OQYKATPzdfaZIbTxcHziQl92zYSxYC6umhOqyAsoj8H8Gq/+aFjAso68sBdjTz3A7omqeAkkF1MWg==} + /rc-config-loader/4.1.3: + resolution: {integrity: sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==} dependencies: debug: 4.3.4 js-yaml: 4.1.0 @@ -20747,8 +21213,8 @@ packages: hasBin: true dependencies: '@babel/core': 7.20.12 - '@babel/generator': 7.21.3 - '@babel/runtime': 7.21.0 + '@babel/generator': 7.22.10 + '@babel/runtime': 7.22.10 ast-types: 0.14.2 commander: 2.20.3 doctrine: 3.0.0 @@ -20796,8 +21262,8 @@ packages: react-is: 17.0.2 dev: true - /react-fast-compare/3.2.1: - resolution: {integrity: sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg==} + /react-fast-compare/3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} dev: true /react-helmet-async/1.3.0_5owmthsvj5ictknaj3ev736ofq: @@ -20806,12 +21272,12 @@ packages: react: ^16.6.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 invariant: 2.2.4 prop-types: 15.8.1 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 - react-fast-compare: 3.2.1 + react-fast-compare: 3.2.2 shallowequal: 1.1.0 dev: true @@ -20829,7 +21295,7 @@ packages: peerDependencies: react: ^16.8.4 || ^17.0.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 is-dom: 1.1.0 prop-types: 15.8.1 react: 16.13.1 @@ -20851,37 +21317,40 @@ packages: react: ^16.6.0 || ^17.0.0 react-dom: ^16.6.0 || ^17.0.0 dependencies: - '@babel/runtime': 7.21.0 - '@popperjs/core': 2.11.7 + '@babel/runtime': 7.22.10 + '@popperjs/core': 2.11.8 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 - react-popper: 2.3.0_23cw4gxxxjiblpsmqaotin7ivi + react-popper: 2.3.0_6sctketkiitjm3ivqm6p3yokzm dev: true - /react-popper/2.3.0_23cw4gxxxjiblpsmqaotin7ivi: + /react-popper/2.3.0_6sctketkiitjm3ivqm6p3yokzm: resolution: {integrity: sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==} peerDependencies: '@popperjs/core': ^2.0.0 react: ^16.8.0 || ^17 || ^18 react-dom: ^16.8.0 || ^17 || ^18 dependencies: - '@popperjs/core': 2.11.7 + '@popperjs/core': 2.11.8 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 - react-fast-compare: 3.2.1 + react-fast-compare: 3.2.2 warning: 4.0.3 dev: true - /react-redux/8.0.5_mq2cyprinb6qi7hdzoedcdddgq: - resolution: {integrity: sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==} + /react-redux/8.0.7_nok3erdxukfns4p3xu5vwteodu: + resolution: {integrity: sha512-1vRQuCQI5Y2uNmrMXg81RXKiBHY3jBzvCvNmZF437O/Z9/pZ+ba2uYHbemYXb3g8rjsacBGo+/wmfrQKzMhJsg==} peerDependencies: + '@reduxjs/toolkit': ^1 || ^2.0.0-beta.0 '@types/react': ^16.8 || ^17.0 || ^18.0 '@types/react-dom': ^16.8 || ^17.0 || ^18.0 react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 react-native: '>=0.59' - redux: ^4 + redux: ^4 || ^5.0.0-beta.0 peerDependenciesMeta: + '@reduxjs/toolkit': + optional: true '@types/react': optional: true '@types/react-dom': @@ -20893,7 +21362,8 @@ packages: redux: optional: true dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 + '@reduxjs/toolkit': 1.8.6_wh4ihjgz7ckkj64srthnp7p2pq '@types/hoist-non-react-statics': 3.3.1 '@types/react': 16.14.23 '@types/react-dom': 16.9.14 @@ -20911,29 +21381,29 @@ packages: engines: {node: '>=0.10.0'} dev: true - /react-router-dom/6.9.0_e4p5kqppx5gth2ijr2xdvk24ma: - resolution: {integrity: sha512-/seUAPY01VAuwkGyVBPCn1OXfVbaWGGu4QN9uj0kCPcTyNYgL1ldZpxZUpRU7BLheKQI4Twtl/OW2nHRF1u26Q==} + /react-router-dom/6.14.2_e4p5kqppx5gth2ijr2xdvk24ma: + resolution: {integrity: sha512-5pWX0jdKR48XFZBuJqHosX3AAHjRAzygouMTyimnBPOLdY3WjzUSKhus2FVMihUFWzeLebDgr4r8UeQFAct7Bg==} engines: {node: '>=14'} peerDependencies: '@types/react': '>=16' react: '>=16.8' react-dom: '>=16.8' dependencies: - '@remix-run/router': 1.4.0 + '@remix-run/router': 1.7.2 '@types/react': 16.14.23 react: 16.13.1 react-dom: 16.13.1_react@16.13.1 - react-router: 6.9.0_qjwx5m6wssz3lnb35xwkc3pz6q + react-router: 6.14.2_qjwx5m6wssz3lnb35xwkc3pz6q dev: true - /react-router/6.9.0_qjwx5m6wssz3lnb35xwkc3pz6q: - resolution: {integrity: sha512-51lKevGNUHrt6kLuX3e/ihrXoXCa9ixY/nVWRLlob4r/l0f45x3SzBvYJe3ctleLUQQ5fVa4RGgJOTH7D9Umhw==} + /react-router/6.14.2_qjwx5m6wssz3lnb35xwkc3pz6q: + resolution: {integrity: sha512-09Zss2dE2z+T1D03IheqAFtK4UzQyX8nFPWx6jkwdYzGLXd5ie06A6ezS2fO6zJfEb/SpG6UocN2O1hfD+2urQ==} engines: {node: '>=14'} peerDependencies: '@types/react': '>=16' react: '>=16.8' dependencies: - '@remix-run/router': 1.4.0 + '@remix-run/router': 1.7.2 '@types/react': 16.14.23 react: 16.13.1 dev: true @@ -20952,7 +21422,7 @@ packages: peerDependencies: react: '>= 0.14.0' dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 highlight.js: 10.7.3 lowlight: 1.20.0 prismjs: 1.29.0 @@ -20960,13 +21430,13 @@ packages: refractor: 3.6.0 dev: true - /react-textarea-autosize/8.4.1_qjwx5m6wssz3lnb35xwkc3pz6q: - resolution: {integrity: sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q==} + /react-textarea-autosize/8.5.2_qjwx5m6wssz3lnb35xwkc3pz6q: + resolution: {integrity: sha512-uOkyjkEl0ByEK21eCJMHDGBAAd/BoFQBawYK5XItjAmCTeSbjxghd8qnt7nzsLYzidjnoObu6M26xts0YGKsGg==} engines: {node: '>=10'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 react: 16.13.1 use-composed-ref: 1.3.0_react@16.13.1 use-latest: 1.2.1_qjwx5m6wssz3lnb35xwkc3pz6q @@ -20980,7 +21450,7 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -21075,8 +21545,8 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 - /readdir-glob/1.1.2: - resolution: {integrity: sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA==} + /readdir-glob/1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} dependencies: minimatch: 5.1.6 dev: true @@ -21136,7 +21606,7 @@ packages: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} dependencies: - resolve: 1.22.1 + resolve: 1.22.4 dev: true /redent/3.0.0: @@ -21158,7 +21628,7 @@ packages: /redux/4.2.1: resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 /refractor/3.6.0: resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} @@ -21181,11 +21651,15 @@ packages: /regenerator-runtime/0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: true + + /regenerator-runtime/0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} - /regenerator-transform/0.15.1: - resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} + /regenerator-transform/0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 dev: true /regex-not/1.0.2: @@ -21195,8 +21669,8 @@ packages: extend-shallow: 3.0.2 safe-regex: 1.1.0 - /regexp.prototype.flags/1.4.3: - resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} + /regexp.prototype.flags/1.5.0: + resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -21357,8 +21831,8 @@ packages: /requires-port/1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - /reselect/4.1.7: - resolution: {integrity: sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==} + /reselect/4.1.8: + resolution: {integrity: sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==} dev: false /resolve-alpn/1.2.1: @@ -21410,14 +21884,14 @@ packages: /resolve/1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: - is-core-module: 2.11.0 + is-core-module: 2.13.0 path-parse: 1.0.7 - /resolve/1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + /resolve/1.22.4: + resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} hasBin: true dependencies: - is-core-module: 2.11.0 + is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -21425,7 +21899,7 @@ packages: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} hasBin: true dependencies: - is-core-module: 2.11.0 + is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -21504,7 +21978,7 @@ packages: /rtl-css-js/1.16.1: resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} dependencies: - '@babel/runtime': 7.21.0 + '@babel/runtime': 7.22.10 dev: false /run-async/2.4.1: @@ -21534,6 +22008,15 @@ packages: tslib: 2.3.1 dev: false + /safe-array-concat/1.0.0: + resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + isarray: 2.0.5 + /safe-buffer/5.1.1: resolution: {integrity: sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==} dev: true @@ -21548,7 +22031,7 @@ packages: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 is-regex: 1.1.4 /safe-regex/1.1.0: @@ -21658,9 +22141,9 @@ packages: resolution: {integrity: sha512-SwTIG6UmrMiT94/v8G+2pPf6i+XwY4hOQxm8HZl0ld0st2KdGDj/SBXDznFl7+sJ6tFq6hvVvrB9rW5Nj7EhuQ==} engines: {node: '>=14.0.0'} dependencies: - '@bufbuild/protobuf': 1.2.1 + '@bufbuild/protobuf': 1.3.0 buffer-builder: 0.2.0 - immutable: 4.3.0 + immutable: 4.3.2 rxjs: 7.8.1 supports-color: 8.1.1 optionalDependencies: @@ -21694,7 +22177,7 @@ packages: loader-utils: 2.0.4 neo-async: 2.6.2 sass: 1.3.2 - schema-utils: 3.1.1 + schema-utils: 3.3.0 semver: 7.5.4 webpack: 4.44.2 dev: true @@ -21733,13 +22216,12 @@ packages: hasBin: true dependencies: chokidar: 3.4.3 - immutable: 4.3.0 + immutable: 4.3.2 source-map-js: 1.0.2 dev: false /sax/1.2.1: resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} - dev: true /sax/1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} @@ -21775,7 +22257,7 @@ packages: resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} engines: {node: '>= 8.9.0'} dependencies: - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.12 ajv: 6.12.6 ajv-keywords: 3.5.2_ajv@6.12.6 dev: true @@ -21784,32 +22266,24 @@ packages: resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} engines: {node: '>= 8.9.0'} dependencies: - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.12 ajv: 6.12.6 ajv-keywords: 3.5.2_ajv@6.12.6 dev: true - /schema-utils/3.1.1: - resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/json-schema': 7.0.11 - ajv: 6.12.6 - ajv-keywords: 3.5.2_ajv@6.12.6 - - /schema-utils/3.1.2: - resolution: {integrity: sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==} + /schema-utils/3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.12 ajv: 6.12.6 ajv-keywords: 3.5.2_ajv@6.12.6 - /schema-utils/4.0.0: - resolution: {integrity: sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==} + /schema-utils/4.2.0: + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} engines: {node: '>= 12.13.0'} dependencies: - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.12 ajv: 8.12.0 ajv-formats: 2.1.1 ajv-keywords: 5.1.0_ajv@8.12.0 @@ -21846,18 +22320,18 @@ packages: resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} engines: {node: '>=8'} dependencies: - semver: 6.3.0 + semver: 6.3.1 /semver-store/0.3.0: resolution: {integrity: sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg==} dev: false - /semver/5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + /semver/5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true - /semver/6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + /semver/6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true /semver/7.3.8: @@ -22048,7 +22522,7 @@ packages: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 object-inspect: 1.12.3 /signal-exit/3.0.7: @@ -22185,7 +22659,7 @@ packages: abab: 2.0.6 iconv-lite: 0.6.3 loader-utils: 2.0.4 - schema-utils: 3.1.1 + schema-utils: 3.3.0 source-map: 0.6.1 webpack: 4.44.2 whatwg-mimetype: 2.3.0 @@ -22240,11 +22714,6 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} - /sourcemap-codec/1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - dev: false - /space-separated-tokens/1.1.5: resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} dev: true @@ -22408,8 +22877,8 @@ packages: engines: {node: '>=4'} dev: false - /string-argv/0.3.1: - resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} + /string-argv/0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} /string-hash/1.1.3: @@ -22425,6 +22894,7 @@ packages: /string-similarity/4.0.4: resolution: {integrity: sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. dev: false /string-width/1.0.2: @@ -22459,7 +22929,7 @@ packages: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.0.1 + strip-ansi: 7.1.0 dev: true /string.prototype.matchall/4.0.8: @@ -22467,11 +22937,11 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 - get-intrinsic: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 has-symbols: 1.0.3 internal-slot: 1.0.5 - regexp.prototype.flags: 1.4.3 + regexp.prototype.flags: 1.5.0 side-channel: 1.0.4 /string.prototype.padend/3.1.4: @@ -22480,7 +22950,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 dev: true /string.prototype.padstart/3.1.4: @@ -22489,7 +22959,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 dev: true /string.prototype.trim/1.2.7: @@ -22498,21 +22968,21 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 /string.prototype.trimend/1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 /string.prototype.trimstart/1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 /string_decoder/0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} @@ -22547,8 +23017,8 @@ packages: dependencies: ansi-regex: 5.0.1 - /strip-ansi/7.0.1: - resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + /strip-ansi/7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 @@ -22604,12 +23074,12 @@ packages: webpack: ^4.0.0 || ^5.0.0 dependencies: loader-utils: 2.0.4 - schema-utils: 3.1.1 + schema-utils: 3.3.0 webpack: 4.44.2 dev: true - /style-loader/3.3.2_webpack@5.82.1: - resolution: {integrity: sha512-RHs/vcrKdQK8wZliteNK4NKzxvLBzpuHMqYmUVWeKa6MkaIQ97ZTOS0b+zapZhy6GcrgWnvWYCMHRirC3FsUmw==} + /style-loader/3.3.3_webpack@5.82.1: + resolution: {integrity: sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 @@ -22622,15 +23092,15 @@ packages: inline-style-parser: 0.1.1 dev: true - /stylehacks/5.1.1_postcss@8.4.21: + /stylehacks/5.1.1_postcss@8.4.27: resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 - postcss: 8.4.21 - postcss-selector-parser: 6.0.11 + browserslist: 4.21.10 + postcss: 8.4.27 + postcss-selector-parser: 6.0.13 dev: false /stylis/4.3.0: @@ -22711,7 +23181,7 @@ packages: call-bind: 1.0.2 get-symbol-description: 1.0.0 has-symbols: 1.0.3 - object.getownpropertydescriptors: 2.1.5 + object.getownpropertydescriptors: 2.1.6 dev: true /synchronous-promise/2.0.17: @@ -22729,8 +23199,8 @@ packages: strip-ansi: 6.0.1 dev: true - /tabster/4.7.0: - resolution: {integrity: sha512-8+arpE2WOvhdU2bvU5GEaoaICbLBNNh8WhW9q85KeSOg4sIvRPfAI2/j18UxUnKT8Fv32zkbvEfToEf9Y1Sfug==} + /tabster/4.7.2: + resolution: {integrity: sha512-wRFOnje3CxqUVgdDiY7spipDWXee4PatHE5e3XoVXN51fOxu0/QlI/7EVURIyg2jGDFPL4ZffLMpX3pvTVbVVQ==} dependencies: keyborg: 2.0.0 tslib: 2.3.1 @@ -22764,13 +23234,13 @@ packages: readable-stream: 3.6.2 dev: true - /tar/6.1.13: - resolution: {integrity: sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==} + /tar/6.1.15: + resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==} engines: {node: '>=10'} dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 - minipass: 4.2.5 + minipass: 5.0.0 minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 @@ -22840,16 +23310,16 @@ packages: find-cache-dir: 3.3.2 jest-worker: 26.6.2 p-limit: 3.1.0 - schema-utils: 3.1.2 + schema-utils: 3.3.0 serialize-javascript: 5.0.1 source-map: 0.6.1 - terser: 5.16.8 + terser: 5.19.2 webpack: 4.44.2 webpack-sources: 1.4.3 dev: true - /terser-webpack-plugin/5.3.7_webpack@5.82.1: - resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==} + /terser-webpack-plugin/5.3.9_webpack@5.82.1: + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -22864,11 +23334,11 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.19 jest-worker: 27.5.1 - schema-utils: 3.1.1 + schema-utils: 3.3.0 serialize-javascript: 6.0.1 - terser: 5.16.8 + terser: 5.19.2 webpack: 5.82.1 /terser/4.8.1: @@ -22880,13 +23350,13 @@ packages: source-map: 0.6.1 source-map-support: 0.5.21 - /terser/5.16.8: - resolution: {integrity: sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==} + /terser/5.19.2: + resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} engines: {node: '>=10'} hasBin: true dependencies: - '@jridgewell/source-map': 0.3.2 - acorn: 8.8.2 + '@jridgewell/source-map': 0.3.5 + acorn: 8.10.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -23025,8 +23495,8 @@ packages: resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==} engines: {node: '>=6'} - /tough-cookie/4.1.2: - resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} + /tough-cookie/4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} engines: {node: '>=6'} dependencies: psl: 1.9.0 @@ -23083,7 +23553,7 @@ packages: enhanced-resolve: 4.5.0 loader-utils: 1.4.2 micromatch: 4.0.5 - semver: 6.3.0 + semver: 6.3.1 typescript: 5.0.4 dev: false @@ -23109,11 +23579,12 @@ packages: resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} dev: true - /tslib/2.5.0: - resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + /tslib/2.6.1: + resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} /tslint-microsoft-contrib/6.2.0_67neen4t5xfhpau25dyc5p2yey: resolution: {integrity: sha512-6tfi/2tHqV/3CL77pULBcK+foty11Rr0idRDxKnteTaKm6gWF9qmaCNU17HVssOuwlYNyOmd9Jsmjd+1t3a3qw==} + deprecated: TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information. peerDependencies: tslint: ^5.1.0 typescript: '*' @@ -23125,6 +23596,7 @@ packages: /tslint-microsoft-contrib/6.2.0_ew7ikuw7vzbxz2yx5mufkmltai: resolution: {integrity: sha512-6tfi/2tHqV/3CL77pULBcK+foty11Rr0idRDxKnteTaKm6gWF9qmaCNU17HVssOuwlYNyOmd9Jsmjd+1t3a3qw==} + deprecated: TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information. peerDependencies: tslint: ^5.1.0 typescript: '*' @@ -23136,6 +23608,7 @@ packages: /tslint-microsoft-contrib/6.2.0_iya4g6zcyztd4u7rvedwwipq6a: resolution: {integrity: sha512-6tfi/2tHqV/3CL77pULBcK+foty11Rr0idRDxKnteTaKm6gWF9qmaCNU17HVssOuwlYNyOmd9Jsmjd+1t3a3qw==} + deprecated: TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information. peerDependencies: tslint: ^5.1.0 typescript: '*' @@ -23147,6 +23620,7 @@ packages: /tslint-microsoft-contrib/6.2.0_uwqr5pcif4g7c56scrk6kqzf7i: resolution: {integrity: sha512-6tfi/2tHqV/3CL77pULBcK+foty11Rr0idRDxKnteTaKm6gWF9qmaCNU17HVssOuwlYNyOmd9Jsmjd+1t3a3qw==} + deprecated: TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information. peerDependencies: tslint: ^5.1.0 typescript: '*' @@ -23163,7 +23637,7 @@ packages: peerDependencies: typescript: '>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev' dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.10 builtin-modules: 1.1.1 chalk: 2.4.2 commander: 2.20.3 @@ -23172,8 +23646,8 @@ packages: js-yaml: 3.13.1 minimatch: 3.1.2 mkdirp: 0.5.6 - resolve: 1.22.1 - semver: 5.7.1 + resolve: 1.22.4 + semver: 5.7.2 tslib: 1.14.1 tsutils: 2.29.0_typescript@2.9.2 typescript: 2.9.2 @@ -23186,7 +23660,7 @@ packages: peerDependencies: typescript: '>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev' dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.10 builtin-modules: 1.1.1 chalk: 2.4.2 commander: 2.20.3 @@ -23195,8 +23669,8 @@ packages: js-yaml: 3.13.1 minimatch: 3.1.2 mkdirp: 0.5.6 - resolve: 1.22.1 - semver: 5.7.1 + resolve: 1.22.4 + semver: 5.7.2 tslib: 1.14.1 tsutils: 2.29.0_typescript@3.9.10 typescript: 3.9.10 @@ -23209,7 +23683,7 @@ packages: peerDependencies: typescript: '>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev' dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.10 builtin-modules: 1.1.1 chalk: 2.4.2 commander: 2.20.3 @@ -23218,8 +23692,8 @@ packages: js-yaml: 3.13.1 minimatch: 3.1.2 mkdirp: 0.5.6 - resolve: 1.22.1 - semver: 5.7.1 + resolve: 1.22.4 + semver: 5.7.2 tslib: 1.14.1 tsutils: 2.29.0_typescript@4.9.5 typescript: 4.9.5 @@ -23232,7 +23706,7 @@ packages: peerDependencies: typescript: '>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev' dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.22.10 builtin-modules: 1.1.1 chalk: 2.4.2 commander: 2.20.3 @@ -23241,8 +23715,8 @@ packages: js-yaml: 3.13.1 minimatch: 3.1.2 mkdirp: 0.5.6 - resolve: 1.22.1 - semver: 5.7.1 + resolve: 1.22.4 + semver: 5.7.2 tslib: 1.14.1 tsutils: 2.29.0_typescript@5.0.4 typescript: 5.0.4 @@ -23347,6 +23821,7 @@ packages: engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 + dev: true /type-check/0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -23399,17 +23874,44 @@ packages: resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} dev: true + /typed-array-buffer/1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + + /typed-array-byte-length/1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + + /typed-array-byte-offset/1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + /typed-array-length/1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: call-bind: 1.0.2 for-each: 0.3.3 - is-typed-array: 1.1.10 + is-typed-array: 1.1.12 /typed-rest-client/1.8.11: resolution: {integrity: sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==} dependencies: - qs: 6.11.1 + qs: 6.11.2 tunnel: 0.0.6 underscore: 1.13.6 dev: true @@ -23570,20 +24072,20 @@ packages: /unist-util-stringify-position/2.0.3: resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 2.0.7 dev: true /unist-util-visit-parents/3.1.1: resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 2.0.7 unist-util-is: 4.1.0 dev: true /unist-util-visit/2.0.3: resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 2.0.7 unist-util-is: 4.1.0 unist-util-visit-parents: 3.1.1 dev: true @@ -23639,13 +24141,13 @@ packages: engines: {node: '>=4'} optional: true - /update-browserslist-db/1.0.10_browserslist@4.21.5: - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + /update-browserslist-db/1.0.11_browserslist@4.21.10: + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.5 + browserslist: 4.21.10 escalade: 3.1.1 picocolors: 1.0.0 @@ -23693,7 +24195,7 @@ packages: dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 - schema-utils: 3.1.1 + schema-utils: 3.3.0 webpack: 5.82.1 dev: false @@ -23710,7 +24212,7 @@ packages: file-loader: 6.2.0_webpack@4.44.2 loader-utils: 2.0.4 mime-types: 2.1.35 - schema-utils: 3.1.1 + schema-utils: 3.3.0 webpack: 4.44.2 dev: true @@ -23727,11 +24229,11 @@ packages: querystring: 0.2.0 dev: true - /url/0.11.0: - resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} + /url/0.11.1: + resolution: {integrity: sha512-rWS3H04/+mzzJkv0eZ7vEDGiQbgquI1fGfOad6zKvgYQi1SzMmhl7c/DdRGxhaWrVH6z0qWITo8rpnxK/RfEhA==} dependencies: - punycode: 1.3.2 - querystring: 0.2.0 + punycode: 1.4.1 + qs: 6.11.2 /use-composed-ref/1.3.0_react@16.13.1: resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} @@ -23801,7 +24303,7 @@ packages: resolution: {integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==} dependencies: define-properties: 1.2.0 - object.getownpropertydescriptors: 2.1.5 + object.getownpropertydescriptors: 2.1.6 /util/0.10.3: resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} @@ -23819,8 +24321,8 @@ packages: inherits: 2.0.4 is-arguments: 1.1.1 is-generator-function: 1.0.10 - is-typed-array: 1.1.10 - which-typed-array: 1.1.9 + is-typed-array: 1.1.12 + which-typed-array: 1.1.11 dev: true /utila/0.4.0: @@ -23832,6 +24334,7 @@ packages: /uuid-browser/3.1.0: resolution: {integrity: sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==} + deprecated: Package no longer supported and required. Use the uuid package or crypto.randomUUID instead dev: true /uuid/3.4.0: @@ -23856,7 +24359,7 @@ packages: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.19 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.9.0 @@ -23872,8 +24375,8 @@ packages: builtins: 1.0.3 dev: false - /validator/13.9.0: - resolution: {integrity: sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==} + /validator/13.11.0: + resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} engines: {node: '>= 0.10'} /value-or-promise/1.0.11: @@ -23892,14 +24395,14 @@ packages: /vfile-message/2.0.4: resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 2.0.7 unist-util-stringify-position: 2.0.3 dev: true /vfile/4.2.1: resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 2.0.7 is-buffer: 2.0.5 unist-util-stringify-position: 2.0.3 vfile-message: 2.0.4 @@ -23908,12 +24411,13 @@ packages: /vm-browserify/1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} - /vm2/3.9.14: - resolution: {integrity: sha512-HgvPHYHeQy8+QhzlFryvSteA4uQLBCOub02mgqdR+0bN/akRZ48TGB1v0aCv7ksyc0HXx16AZtMHKS38alc6TA==} + /vm2/3.9.19: + resolution: {integrity: sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==} engines: {node: '>=6.0'} + deprecated: The library contains critical security issues and should not be used for production! The maintenance of the project has been discontinued. Consider migrating your code to isolated-vm. hasBin: true dependencies: - acorn: 8.8.2 + acorn: 8.10.0 acorn-walk: 8.2.0 dev: true @@ -23927,7 +24431,7 @@ packages: chalk: 2.4.2 cheerio: 1.0.0-rc.12 commander: 6.2.1 - glob: 7.2.3 + glob: 7.0.6 hosted-git-info: 4.1.0 keytar: 7.9.0 leven: 3.1.0 @@ -23936,7 +24440,7 @@ packages: minimatch: 3.0.8 parse-semver: 1.1.1 read: 1.0.7 - semver: 5.7.1 + semver: 5.7.2 tmp: 0.2.1 typed-rest-client: 1.8.11 url-join: 4.0.1 @@ -24013,7 +24517,7 @@ packages: engines: {node: '>= 10.13.0'} hasBin: true dependencies: - acorn: 8.8.2 + acorn: 8.10.0 acorn-walk: 8.2.0 chalk: 4.1.2 commander: 7.2.0 @@ -24077,11 +24581,11 @@ packages: optional: true dependencies: '@types/webpack': 4.41.32 - colorette: 2.0.19 + colorette: 2.0.20 memfs: 3.4.3 mime-types: 2.1.35 range-parser: 1.2.1 - schema-utils: 4.0.0 + schema-utils: 4.2.0 webpack: 4.44.2 dev: false @@ -24095,11 +24599,11 @@ packages: '@types/webpack': optional: true dependencies: - colorette: 2.0.19 + colorette: 2.0.20 memfs: 3.4.3 mime-types: 2.1.35 range-parser: 1.2.1 - schema-utils: 4.0.0 + schema-utils: 4.2.0 webpack: 4.44.2_webpack-cli@3.3.12 dev: false @@ -24113,11 +24617,11 @@ packages: '@types/webpack': optional: true dependencies: - colorette: 2.0.19 + colorette: 2.0.20 memfs: 3.4.3 mime-types: 2.1.35 range-parser: 1.2.1 - schema-utils: 4.0.0 + schema-utils: 4.2.0 webpack: 5.82.1 dev: false @@ -24136,31 +24640,31 @@ packages: optional: true dependencies: '@types/bonjour': 3.5.10 - '@types/connect-history-api-fallback': 1.3.5 + '@types/connect-history-api-fallback': 1.5.0 '@types/express': 4.17.13 - '@types/express-serve-static-core': 4.17.33 + '@types/express-serve-static-core': 4.17.35 '@types/serve-index': 1.9.1 - '@types/serve-static': 1.15.1 + '@types/serve-static': 1.15.2 '@types/sockjs': 0.3.33 '@types/webpack': 4.41.32 - '@types/ws': 8.5.4 + '@types/ws': 8.5.5 ansi-html-community: 0.0.8 anymatch: 3.1.3 bonjour-service: 1.1.1 chokidar: 3.5.3 - colorette: 2.0.19 + colorette: 2.0.20 compression: 1.7.4 connect-history-api-fallback: 2.0.0 default-gateway: 6.0.3 express: 4.18.1 graceful-fs: 4.2.11 - html-entities: 2.3.3 + html-entities: 2.4.0 http-proxy-middleware: 2.0.6 - ipaddr.js: 2.0.1 + ipaddr.js: 2.1.0 open: 8.4.2 p-retry: 4.6.2 rimraf: 3.0.2 - schema-utils: 4.0.0 + schema-utils: 4.2.0 selfsigned: 2.1.1 serve-index: 1.9.1 sockjs: 0.3.24 @@ -24190,30 +24694,30 @@ packages: optional: true dependencies: '@types/bonjour': 3.5.10 - '@types/connect-history-api-fallback': 1.3.5 + '@types/connect-history-api-fallback': 1.5.0 '@types/express': 4.17.13 - '@types/express-serve-static-core': 4.17.33 + '@types/express-serve-static-core': 4.17.35 '@types/serve-index': 1.9.1 - '@types/serve-static': 1.15.1 + '@types/serve-static': 1.15.2 '@types/sockjs': 0.3.33 - '@types/ws': 8.5.4 + '@types/ws': 8.5.5 ansi-html-community: 0.0.8 anymatch: 3.1.3 bonjour-service: 1.1.1 chokidar: 3.5.3 - colorette: 2.0.19 + colorette: 2.0.20 compression: 1.7.4 connect-history-api-fallback: 2.0.0 default-gateway: 6.0.3 express: 4.18.1 graceful-fs: 4.2.11 - html-entities: 2.3.3 + html-entities: 2.4.0 http-proxy-middleware: 2.0.6 - ipaddr.js: 2.0.1 + ipaddr.js: 2.1.0 open: 8.4.2 p-retry: 4.6.2 rimraf: 3.0.2 - schema-utils: 4.0.0 + schema-utils: 4.2.0 selfsigned: 2.1.1 serve-index: 1.9.1 sockjs: 0.3.24 @@ -24244,30 +24748,30 @@ packages: optional: true dependencies: '@types/bonjour': 3.5.10 - '@types/connect-history-api-fallback': 1.3.5 + '@types/connect-history-api-fallback': 1.5.0 '@types/express': 4.17.13 - '@types/express-serve-static-core': 4.17.33 + '@types/express-serve-static-core': 4.17.35 '@types/serve-index': 1.9.1 - '@types/serve-static': 1.15.1 + '@types/serve-static': 1.15.2 '@types/sockjs': 0.3.33 - '@types/ws': 8.5.4 + '@types/ws': 8.5.5 ansi-html-community: 0.0.8 anymatch: 3.1.3 bonjour-service: 1.1.1 chokidar: 3.5.3 - colorette: 2.0.19 + colorette: 2.0.20 compression: 1.7.4 connect-history-api-fallback: 2.0.0 default-gateway: 6.0.3 express: 4.18.1 graceful-fs: 4.2.11 - html-entities: 2.3.3 + html-entities: 2.4.0 http-proxy-middleware: 2.0.6 - ipaddr.js: 2.0.1 + ipaddr.js: 2.1.0 open: 8.4.2 p-retry: 4.6.2 rimraf: 3.0.2 - schema-utils: 4.0.0 + schema-utils: 4.2.0 selfsigned: 2.1.1 serve-index: 1.9.1 sockjs: 0.3.24 @@ -24291,11 +24795,11 @@ packages: webpack: 4.44.2 dev: true - /webpack-hot-middleware/2.25.3: - resolution: {integrity: sha512-IK/0WAHs7MTu1tzLTjio73LjS3Ov+VvBKQmE8WPlJutgG5zT6Urgq/BbAdRrHTRpyzK0dvAvFh1Qg98akxgZpA==} + /webpack-hot-middleware/2.25.4: + resolution: {integrity: sha512-IRmTspuHM06aZh98OhBJtqLpeWFM8FXJS5UYpKYxCJzyFoyWj1w6VGFfomZU7OPA55dMLrQK0pRT1eQ3PACr4w==} dependencies: ansi-html-community: 0.0.8 - html-entities: 2.3.3 + html-entities: 2.4.0 strip-ansi: 6.0.1 dev: true @@ -24312,7 +24816,7 @@ packages: engines: {node: '>=10.0.0'} dependencies: clone-deep: 4.0.1 - wildcard: 2.0.0 + wildcard: 2.0.1 dev: false /webpack-sources/1.4.3: @@ -24419,15 +24923,15 @@ packages: dependencies: '@types/eslint-scope': 3.7.4 '@types/estree': 1.0.1 - '@webassemblyjs/ast': 1.11.5 - '@webassemblyjs/wasm-edit': 1.11.5 - '@webassemblyjs/wasm-parser': 1.11.5 - acorn: 8.8.2 - acorn-import-assertions: 1.8.0_acorn@8.8.2 - browserslist: 4.21.5 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.10.0 + acorn-import-assertions: 1.9.0_acorn@8.10.0 + browserslist: 4.21.10 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.14.1 - es-module-lexer: 1.2.1 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.3.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -24436,9 +24940,9 @@ packages: loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 3.1.2 + schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.7_webpack@5.82.1 + terser-webpack-plugin: 5.3.9_webpack@5.82.1 watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -24496,8 +25000,8 @@ packages: is-string: 1.0.7 is-symbol: 1.0.4 - /which-module/2.0.0: - resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} + /which-module/2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} /which-pm/2.0.0: resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} @@ -24507,8 +25011,8 @@ packages: path-exists: 4.0.0 dev: false - /which-typed-array/1.1.9: - resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + /which-typed-array/1.1.11: + resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 @@ -24516,7 +25020,6 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - is-typed-array: 1.1.10 /which/1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} @@ -24534,7 +25037,7 @@ packages: /wide-align/1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: - string-width: 4.2.3 + string-width: 1.0.2 dev: true /widest-line/3.1.0: @@ -24550,13 +25053,14 @@ packages: string-width: 5.1.2 dev: true - /wildcard/2.0.0: - resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} + /wildcard/2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} dev: false - /word-wrap/1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + /word-wrap/1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + dev: true /wordwrap/1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -24608,7 +25112,7 @@ packages: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 - strip-ansi: 7.0.1 + strip-ansi: 7.1.0 dev: true /wrappy/1.0.2: @@ -24683,29 +25187,25 @@ packages: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} - /xml2js/0.4.19: - resolution: {integrity: sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==} + /xml2js/0.4.23: + resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} + engines: {node: '>=4.0.0'} dependencies: sax: 1.2.4 - xmlbuilder: 9.0.7 + xmlbuilder: 11.0.1 dev: true - /xml2js/0.4.23: - resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} + /xml2js/0.5.0: + resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} engines: {node: '>=4.0.0'} dependencies: - sax: 1.2.4 + sax: 1.2.1 xmlbuilder: 11.0.1 /xmlbuilder/11.0.1: resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} engines: {node: '>=4.0'} - /xmlbuilder/9.0.7: - resolution: {integrity: sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==} - engines: {node: '>=4.0'} - dev: true - /xmlchars/2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} @@ -24762,7 +25262,6 @@ packages: /yargs-parser/20.2.4: resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} engines: {node: '>=10'} - dev: true /yargs-parser/20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} @@ -24793,7 +25292,7 @@ packages: require-main-filename: 2.0.0 set-blocking: 2.0.0 string-width: 3.1.0 - which-module: 2.0.0 + which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 13.1.2 dev: false @@ -24810,7 +25309,7 @@ packages: require-main-filename: 2.0.0 set-blocking: 2.0.0 string-width: 4.2.3 - which-module: 2.0.0 + which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 dev: true @@ -24825,10 +25324,10 @@ packages: require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 - yargs-parser: 20.2.9 + yargs-parser: 20.2.4 - /yargs/17.7.1: - resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} + /yargs/17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} dependencies: cliui: 8.0.1 @@ -24864,7 +25363,7 @@ packages: dependencies: lodash.get: 4.4.2 lodash.isequal: 4.5.0 - validator: 13.9.0 + validator: 13.11.0 optionalDependencies: commander: 9.5.0 diff --git a/common/config/rush/repo-state.json b/common/config/rush/repo-state.json index 90ca51109ec..d2051814c6b 100644 --- a/common/config/rush/repo-state.json +++ b/common/config/rush/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": "41eef9e275fcc75a240a7bfedb2704deafec84c5", + "pnpmShrinkwrapHash": "fb88463f8828fd43133593fc1db44a6bd85a7697", "preferredVersionsHash": "1926a5b12ac8f4ab41e76503a0d1d0dccc9c0e06" } diff --git a/common/reviews/api/rush-lib.api.md b/common/reviews/api/rush-lib.api.md index 6e1d14ad4d5..f8d0e1899bf 100644 --- a/common/reviews/api/rush-lib.api.md +++ b/common/reviews/api/rush-lib.api.md @@ -7,6 +7,7 @@ /// import { AsyncParallelHook } from 'tapable'; +import { AsyncSeriesBailHook } from 'tapable'; import { AsyncSeriesHook } from 'tapable'; import { AsyncSeriesWaterfallHook } from 'tapable'; import type { CollatedWriter } from '@rushstack/stream-collator'; @@ -93,6 +94,26 @@ export class ChangeManager { // @beta (undocumented) export type CloudBuildCacheProviderFactory = (buildCacheJson: IBuildCacheJson) => ICloudBuildCacheProvider | Promise; +// @beta +export class CobuildConfiguration { + readonly cobuildContextId: string | undefined; + readonly cobuildFeatureEnabled: boolean; + readonly cobuildLeafProjectLogOnlyAllowed: boolean; + // (undocumented) + get cobuildLockProvider(): ICobuildLockProvider; + readonly cobuildRunnerId: string; + // (undocumented) + createLockProviderAsync(terminal: ITerminal): Promise; + // (undocumented) + destroyLockProviderAsync(): Promise; + // (undocumented) + static getCobuildConfigFilePath(rushConfiguration: RushConfiguration): string; + static tryLoadAsync(terminal: ITerminal, rushConfiguration: RushConfiguration, rushSession: RushSession): Promise; +} + +// @beta (undocumented) +export type CobuildLockProviderFactory = (cobuildJson: ICobuildJson) => ICobuildLockProvider | Promise; + // @public export class CommonVersionsConfiguration { readonly allowedAlternativeVersions: Map>; @@ -160,6 +181,9 @@ export class EnvironmentConfiguration { static get buildCacheCredential(): string | undefined; static get buildCacheEnabled(): boolean | undefined; static get buildCacheWriteAllowed(): boolean | undefined; + static get cobuildContextId(): string | undefined; + static get cobuildLeafProjectLogOnlyAllowed(): boolean | undefined; + static get cobuildRunnerId(): string | undefined; // Warning: (ae-forgotten-export) The symbol "IEnvironment" needs to be exported by the entry point index.d.ts // // @internal @@ -192,6 +216,9 @@ export const EnvironmentVariableNames: { readonly RUSH_BUILD_CACHE_CREDENTIAL: "RUSH_BUILD_CACHE_CREDENTIAL"; readonly RUSH_BUILD_CACHE_ENABLED: "RUSH_BUILD_CACHE_ENABLED"; readonly RUSH_BUILD_CACHE_WRITE_ALLOWED: "RUSH_BUILD_CACHE_WRITE_ALLOWED"; + readonly RUSH_COBUILD_CONTEXT_ID: "RUSH_COBUILD_CONTEXT_ID"; + readonly RUSH_COBUILD_RUNNER_ID: "RUSH_COBUILD_RUNNER_ID"; + readonly RUSH_COBUILD_LEAF_PROJECT_LOG_ONLY_ALLOWED: "RUSH_COBUILD_LEAF_PROJECT_LOG_ONLY_ALLOWED"; readonly RUSH_GIT_BINARY_PATH: "RUSH_GIT_BINARY_PATH"; readonly RUSH_TAR_BINARY_PATH: "RUSH_TAR_BINARY_PATH"; readonly RUSH_LIB_PATH: "_RUSH_LIB_PATH"; @@ -256,6 +283,44 @@ export interface ICloudBuildCacheProvider { updateCachedCredentialInteractiveAsync(terminal: ITerminal): Promise; } +// @beta (undocumented) +export interface ICobuildCompletedState { + cacheId: string; + // (undocumented) + status: OperationStatus.Success | OperationStatus.SuccessWithWarning | OperationStatus.Failure; +} + +// @beta (undocumented) +export interface ICobuildContext { + cacheId: string; + clusterId: string; + completedStateKey: string; + contextId: string; + lockExpireTimeInSeconds: number; + lockKey: string; + packageName: string; + phaseName: string; + runnerId: string; +} + +// @beta (undocumented) +export interface ICobuildJson { + // (undocumented) + cobuildFeatureEnabled: boolean; + // (undocumented) + cobuildLockProvider: string; +} + +// @beta (undocumented) +export interface ICobuildLockProvider { + acquireLockAsync(context: Readonly): Promise; + connectAsync(): Promise; + disconnectAsync(): Promise; + getCompletedStateAsync(context: Readonly): Promise; + renewLockAsync(context: Readonly): Promise; + setCompletedStateAsync(context: Readonly, state: ICobuildCompletedState): Promise; +} + // @public export interface IConfigurationEnvironment { [environmentVariableName: string]: IConfigurationEnvironmentVariable; @@ -270,6 +335,7 @@ export interface IConfigurationEnvironmentVariable { // @alpha export interface ICreateOperationsContext { readonly buildCacheConfiguration: BuildCacheConfiguration | undefined; + readonly cobuildConfiguration: CobuildConfiguration | undefined; readonly customParameters: ReadonlyMap; readonly isIncrementalBuildAllowed: boolean; readonly isInitial: boolean; @@ -277,6 +343,7 @@ export interface ICreateOperationsContext { readonly phaseOriginal: ReadonlySet; readonly phaseSelection: ReadonlySet; readonly projectChangeAnalyzer: ProjectChangeAnalyzer; + readonly projectConfigurations: ReadonlyMap; readonly projectSelection: ReadonlySet; readonly projectsInUnknownState: ReadonlySet; readonly rushConfiguration: RushConfiguration; @@ -411,8 +478,10 @@ export interface _INpmOptionsJson extends IPackageManagerOptionsJsonBase { // @alpha export interface IOperationExecutionResult { + readonly cobuildRunnerId: string | undefined; readonly error: Error | undefined; readonly nonCachedDurationMs: number | undefined; + readonly operation: Operation; readonly status: OperationStatus; readonly stdioSummarizer: StdioSummarizer; readonly stopwatch: IStopwatchResult; @@ -420,6 +489,10 @@ export interface IOperationExecutionResult { // @internal (undocumented) export interface _IOperationMetadata { + // (undocumented) + cobuildContextId: string | undefined; + // (undocumented) + cobuildRunnerId: string | undefined; // (undocumented) durationInSeconds: number; // (undocumented) @@ -445,9 +518,9 @@ export interface IOperationOptions { // @beta export interface IOperationRunner { + cacheable: boolean; executeAsync(context: IOperationRunnerContext): Promise; - isCacheWriteAllowed: boolean; - isSkipAllowed: boolean; + getConfigHash(): string; readonly name: string; reportTiming: boolean; silent: boolean; @@ -456,15 +529,27 @@ export interface IOperationRunner { // @beta export interface IOperationRunnerContext { + readonly changedProjectsOnly: boolean; collatedWriter: CollatedWriter; debugMode: boolean; + error?: Error; // @internal _operationMetadataManager?: _OperationMetadataManager; quietMode: boolean; + status: OperationStatus; stdioSummarizer: StdioSummarizer; stopwatch: IStopwatchResult; } +// @alpha (undocumented) +export interface IOperationSettings { + dependsOnAdditionalFiles?: string[]; + dependsOnEnvVars?: string[]; + disableBuildCacheForOperation?: boolean; + operationName: string; + outputFolderNames?: string[]; +} + // @internal (undocumented) export interface _IOperationStateFileOptions { // (undocumented) @@ -475,6 +560,10 @@ export interface _IOperationStateFileOptions { // @internal (undocumented) export interface _IOperationStateJson { + // (undocumented) + cobuildContextId: string | undefined; + // (undocumented) + cobuildRunnerId: string | undefined; // (undocumented) nonCachedDurationMs: number; } @@ -533,6 +622,16 @@ export interface IPrefixMatch { value: TItem; } +// @internal (undocumented) +export interface _IRawRepoState { + // (undocumented) + projectState: Map> | undefined; + // (undocumented) + rawHashes: Map; + // (undocumented) + rootDir: string; +} + // @beta export interface IRushCommand { readonly actionName: string; @@ -552,6 +651,14 @@ export interface _IRushPluginConfigurationBase { pluginName: string; } +// @internal +export interface _IRushProjectJson { + disableBuildCacheForProject?: boolean; + incrementalBuildIgnoredGlobs?: string[]; + // (undocumented) + operationSettings?: IOperationSettings[]; +} + // @beta (undocumented) export interface IRushSessionOptions { // (undocumented) @@ -680,7 +787,7 @@ export class _OperationMetadataManager { constructor(options: _IOperationMetadataManagerOptions); get relativeFilepaths(): string[]; // (undocumented) - saveAsync({ durationInSeconds, logPath, errorLogPath }: _IOperationMetadata): Promise; + saveAsync({ durationInSeconds, cobuildContextId, cobuildRunnerId, logPath, errorLogPath }: _IOperationMetadata): Promise; // (undocumented) readonly stateFile: _OperationStateFile; // (undocumented) @@ -713,7 +820,9 @@ export enum OperationStatus { Failure = "FAILURE", FromCache = "FROM CACHE", NoOp = "NO OP", + Queued = "QUEUED", Ready = "READY", + RemoteExecuting = "REMOTE EXECUTING", Skipped = "SKIPPED", Success = "SUCCESS", SuccessWithWarning = "SUCCESS WITH WARNINGS" @@ -783,8 +892,17 @@ export abstract class PackageManagerOptionsConfigurationBase implements IPackage // @alpha export class PhasedCommandHooks { + readonly afterExecuteOperation: AsyncSeriesHook<[ + IOperationRunnerContext & IOperationExecutionResult + ]>; readonly afterExecuteOperations: AsyncSeriesHook<[IExecutionResult, ICreateOperationsContext]>; - readonly beforeExecuteOperations: AsyncSeriesHook<[Map]>; + readonly beforeExecuteOperation: AsyncSeriesBailHook<[ + IOperationRunnerContext & IOperationExecutionResult + ], OperationStatus | undefined>; + readonly beforeExecuteOperations: AsyncSeriesHook<[ + Map, + ICreateOperationsContext + ]>; readonly beforeLog: SyncHook; readonly createOperations: AsyncSeriesWaterfallHook<[Set, ICreateOperationsContext]>; readonly onOperationStatusChanged: SyncHook<[IOperationExecutionResult]>; @@ -820,10 +938,8 @@ export type PnpmStoreOptions = 'local' | 'global'; // @beta (undocumented) export class ProjectChangeAnalyzer { constructor(rushConfiguration: RushConfiguration); - // Warning: (ae-forgotten-export) The symbol "IRawRepoState" needs to be exported by the entry point index.d.ts - // // @internal (undocumented) - _ensureInitializedAsync(terminal: ITerminal): Promise; + _ensureInitializedAsync(terminal: ITerminal): Promise<_IRawRepoState | undefined>; // (undocumented) _filterProjectDataAsync(project: RushConfigurationProject, unfilteredProjectData: Map, rootDir: string, terminal: ITerminal): Promise>; getChangedProjectsAsync(options: IGetChangedProjectsOptions): Promise>; @@ -1005,6 +1121,7 @@ export class RushConstants { static readonly bulkCommandKind: 'bulk'; static readonly bypassPolicyFlagLongName: '--bypass-policy'; static readonly changeFilesFolderName: string; + static readonly cobuildFilename: string; static readonly commandLineFilename: string; static readonly commonFolderName: string; static readonly commonVersionsFilename: string; @@ -1072,18 +1189,37 @@ export class RushLifecycleHooks { runPhasedCommand: HookMap>; } +// @alpha +export class RushProjectConfiguration { + readonly disableBuildCacheForProject: boolean; + getCacheDisabledReason(trackedFileNames: Iterable, phaseName: string): string | undefined; + readonly incrementalBuildIgnoredGlobs: ReadonlyArray; + // (undocumented) + readonly operationSettingsByOperationName: ReadonlyMap>; + // (undocumented) + readonly project: RushConfigurationProject; + static tryLoadAndValidateForProjectsAsync(projects: Iterable, phases: ReadonlySet, terminal: ITerminal): Promise>; + static tryLoadForProjectAsync(project: RushConfigurationProject, terminal: ITerminal): Promise; + static tryLoadIgnoreGlobsForProjectAsync(project: RushConfigurationProject, terminal: ITerminal): Promise | undefined>; + validatePhaseConfiguration(phases: Iterable, terminal: ITerminal): void; +} + // @beta (undocumented) export class RushSession { constructor(options: IRushSessionOptions); // (undocumented) getCloudBuildCacheProviderFactory(cacheProviderName: string): CloudBuildCacheProviderFactory | undefined; // (undocumented) + getCobuildLockProviderFactory(cobuildLockProviderName: string): CobuildLockProviderFactory | undefined; + // (undocumented) getLogger(name: string): ILogger; // (undocumented) readonly hooks: RushLifecycleHooks; // (undocumented) registerCloudBuildCacheProviderFactory(cacheProviderName: string, factory: CloudBuildCacheProviderFactory): void; // (undocumented) + registerCobuildLockProviderFactory(cobuildLockProviderName: string, factory: CobuildLockProviderFactory): void; + // (undocumented) get terminalProvider(): ITerminalProvider; } diff --git a/common/reviews/api/rush-redis-cobuild-plugin.api.md b/common/reviews/api/rush-redis-cobuild-plugin.api.md new file mode 100644 index 00000000000..110494810c5 --- /dev/null +++ b/common/reviews/api/rush-redis-cobuild-plugin.api.md @@ -0,0 +1,57 @@ +## API Report File for "@rushstack/rush-redis-cobuild-plugin" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +/// + +import { ICobuildCompletedState } from '@rushstack/rush-sdk'; +import { ICobuildContext } from '@rushstack/rush-sdk'; +import { ICobuildLockProvider } from '@rushstack/rush-sdk'; +import type { IRushPlugin } from '@rushstack/rush-sdk'; +import type { RedisClientOptions } from '@redis/client'; +import type { RushConfiguration } from '@rushstack/rush-sdk'; +import { RushSession } from '@rushstack/rush-sdk'; + +// @beta +export interface IRedisCobuildLockProviderOptions extends RedisClientOptions { + passwordEnvironmentVariable?: string; +} + +// Warning: (ae-incompatible-release-tags) The symbol "IRushRedisCobuildPluginOptions" is marked as @public, but its signature references "IRedisCobuildLockProviderOptions" which is marked as @beta +// +// @public (undocumented) +export type IRushRedisCobuildPluginOptions = IRedisCobuildLockProviderOptions; + +// @beta (undocumented) +export class RedisCobuildLockProvider implements ICobuildLockProvider { + constructor(options: IRedisCobuildLockProviderOptions, rushSession: RushSession); + acquireLockAsync(context: ICobuildContext): Promise; + // (undocumented) + connectAsync(): Promise; + // (undocumented) + disconnectAsync(): Promise; + // (undocumented) + static expandOptionsWithEnvironmentVariables(options: IRedisCobuildLockProviderOptions, environment?: NodeJS.ProcessEnv): IRedisCobuildLockProviderOptions; + // (undocumented) + getCompletedStateAsync(context: ICobuildContext): Promise; + // (undocumented) + renewLockAsync(context: ICobuildContext): Promise; + // (undocumented) + setCompletedStateAsync(context: ICobuildContext, state: ICobuildCompletedState): Promise; +} + +// @public (undocumented) +class RushRedisCobuildPlugin implements IRushPlugin { + constructor(options: IRushRedisCobuildPluginOptions); + // (undocumented) + apply(rushSession: RushSession, rushConfiguration: RushConfiguration): void; + // (undocumented) + pluginName: string; +} +export default RushRedisCobuildPlugin; + +// (No @packageDocumentation comment for this package) + +``` diff --git a/libraries/load-themed-styles/src/index.ts b/libraries/load-themed-styles/src/index.ts index 3bd083f2de6..e0c361f7f3e 100644 --- a/libraries/load-themed-styles/src/index.ts +++ b/libraries/load-themed-styles/src/index.ts @@ -221,7 +221,9 @@ export function flush(): void { * register async loadStyles */ function asyncLoadStyles(): number { - return setTimeout(() => { + // Use "self" to distinguish conflicting global typings for setTimeout() from lib.dom.d.ts vs Jest's @types/node + // https://github.com/jestjs/jest/issues/14418 + return self.setTimeout(() => { _themeState.runState.flushTimer = 0; flush(); }, 0); diff --git a/libraries/package-extractor/src/PackageExtractor.ts b/libraries/package-extractor/src/PackageExtractor.ts index b673aa5893e..5fe5e86dac3 100644 --- a/libraries/package-extractor/src/PackageExtractor.ts +++ b/libraries/package-extractor/src/PackageExtractor.ts @@ -741,8 +741,8 @@ export class PackageExtractor { dependenciesConfigurations.filter((d) => semver.satisfies(packagesJson.version, d.dependencyVersionRange) ); - return matchedDependenciesConfigurations.some( - (d) => excludeFileByPatterns(filePath, d.patternsToInclude, d.patternsToExclude) + return matchedDependenciesConfigurations.some((d) => + excludeFileByPatterns(filePath, d.patternsToInclude, d.patternsToExclude) ); } }; diff --git a/libraries/rush-lib/assets/rush-init/common/config/rush/cobuild.json b/libraries/rush-lib/assets/rush-init/common/config/rush/cobuild.json new file mode 100644 index 00000000000..a47fad18d5e --- /dev/null +++ b/libraries/rush-lib/assets/rush-init/common/config/rush/cobuild.json @@ -0,0 +1,22 @@ +/** + * This configuration file manages Rush's cobuild feature. + * More documentation is available on the Rush website: https://rushjs.io + */ + { + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/cobuild.schema.json", + + /** + * (Required) EXPERIMENTAL - Set this to true to enable the cobuild feature. + * RUSH_COBUILD_CONTEXT_ID should always be specified as an environment variable with an non-empty string, + * otherwise the cobuild feature will be disabled. + */ + "cobuildFeatureEnabled": false, + + /** + * (Required) Choose where cobuild lock will be acquired. + * + * The lock provider is registered by the rush plugins. + * For example, @rushstack/rush-redis-cobuild-plugin registers the "redis" lock provider. + */ + "cobuildLockProvider": "redis" +} diff --git a/libraries/rush-lib/package.json b/libraries/rush-lib/package.json index 711343af208..012557b93f3 100644 --- a/libraries/rush-lib/package.json +++ b/libraries/rush-lib/package.json @@ -56,7 +56,8 @@ "strict-uri-encode": "~2.0.0", "tapable": "2.2.1", "tar": "~6.1.11", - "true-case-path": "~2.2.1" + "true-case-path": "~2.2.1", + "uuid": "~8.3.2" }, "devDependencies": { "@pnpm/logger": "4.0.0", @@ -76,6 +77,7 @@ "@types/ssri": "~7.1.0", "@types/strict-uri-encode": "2.0.0", "@types/tar": "6.1.1", + "@types/uuid": "~8.3.4", "@types/webpack-env": "1.18.0", "webpack": "~5.82.1" }, diff --git a/libraries/rush-lib/src/api/CobuildConfiguration.ts b/libraries/rush-lib/src/api/CobuildConfiguration.ts new file mode 100644 index 00000000000..b229506aca9 --- /dev/null +++ b/libraries/rush-lib/src/api/CobuildConfiguration.ts @@ -0,0 +1,168 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import { FileSystem, ITerminal, JsonFile, JsonSchema } from '@rushstack/node-core-library'; +import { v4 as uuidv4 } from 'uuid'; + +import { EnvironmentConfiguration } from './EnvironmentConfiguration'; +import { CobuildLockProviderFactory, RushSession } from '../pluginFramework/RushSession'; +import { RushConstants } from '../logic/RushConstants'; +import type { ICobuildLockProvider } from '../logic/cobuild/ICobuildLockProvider'; +import type { RushConfiguration } from './RushConfiguration'; +import schemaJson from '../schemas/cobuild.schema.json'; + +/** + * @beta + */ +export interface ICobuildJson { + cobuildFeatureEnabled: boolean; + cobuildLockProvider: string; +} + +/** + * @beta + */ +export interface ICobuildConfigurationOptions { + cobuildJson: ICobuildJson; + rushConfiguration: RushConfiguration; + rushSession: RushSession; + cobuildLockProviderFactory: CobuildLockProviderFactory; +} + +/** + * Use this class to load and save the "common/config/rush/cobuild.json" config file. + * This file provides configuration options for the Rush Cobuild feature. + * @beta + */ +export class CobuildConfiguration { + private static _jsonSchema: JsonSchema = JsonSchema.fromLoadedObject(schemaJson); + + /** + * Indicates whether the cobuild feature is enabled. + * Typically it is enabled in the cobuild.json config file. + * + * Note: The orchestrator (or local users) should always have to opt into running with cobuilds by + * providing a cobuild context id. Even if cobuilds are "enabled" as a feature, they don't + * actually turn on for that particular build unless the cobuild context id is provided as an + * non-empty string. + */ + public readonly cobuildFeatureEnabled: boolean; + + /** + * Cobuild context id + * + * @remarks + * The cobuild feature won't be enabled until the context id is provided as an non-empty string. + */ + public readonly cobuildContextId: string | undefined; + + /** + * This is a name of the participating cobuild runner. It can be specified by the environment variable + * RUSH_COBUILD_RUNNER_ID. If it is not provided, a random id will be generated to identify the runner. + */ + public readonly cobuildRunnerId: string; + /** + * If true, Rush will automatically handle the leaf project with build cache "disabled" by writing + * to the cache in a special "log files only mode". This is useful when you want to use Cobuilds + * to improve the performance in CI validations and the leaf projects have not enabled cache. + */ + public readonly cobuildLeafProjectLogOnlyAllowed: boolean; + + private _cobuildLockProvider: ICobuildLockProvider | undefined; + private readonly _cobuildLockProviderFactory: CobuildLockProviderFactory; + private readonly _cobuildJson: ICobuildJson; + + private constructor(options: ICobuildConfigurationOptions) { + const { cobuildJson, cobuildLockProviderFactory } = options; + + this.cobuildContextId = EnvironmentConfiguration.cobuildContextId; + this.cobuildFeatureEnabled = this.cobuildContextId ? cobuildJson.cobuildFeatureEnabled : false; + this.cobuildRunnerId = EnvironmentConfiguration.cobuildRunnerId || uuidv4(); + this.cobuildLeafProjectLogOnlyAllowed = + EnvironmentConfiguration.cobuildLeafProjectLogOnlyAllowed ?? false; + + this._cobuildLockProviderFactory = cobuildLockProviderFactory; + this._cobuildJson = cobuildJson; + } + + /** + * Attempts to load the cobuild.json data from the standard file path `common/config/rush/cobuild.json`. + * If the file has not been created yet, then undefined is returned. + */ + public static async tryLoadAsync( + terminal: ITerminal, + rushConfiguration: RushConfiguration, + rushSession: RushSession + ): Promise { + const jsonFilePath: string = CobuildConfiguration.getCobuildConfigFilePath(rushConfiguration); + try { + return await CobuildConfiguration._loadAsync(jsonFilePath, terminal, rushConfiguration, rushSession); + } catch (err) { + if (!FileSystem.isNotExistError(err)) { + throw err; + } + } + } + + public static getCobuildConfigFilePath(rushConfiguration: RushConfiguration): string { + return `${rushConfiguration.commonRushConfigFolder}/${RushConstants.cobuildFilename}`; + } + + private static async _loadAsync( + jsonFilePath: string, + terminal: ITerminal, + rushConfiguration: RushConfiguration, + rushSession: RushSession + ): Promise { + let cobuildJson: ICobuildJson | undefined; + try { + cobuildJson = await JsonFile.loadAndValidateAsync(jsonFilePath, CobuildConfiguration._jsonSchema); + } catch (e) { + if (FileSystem.isNotExistError(e)) { + return undefined; + } + throw e; + } + + if (!cobuildJson) { + return undefined; + } + + const cobuildLockProviderFactory: CobuildLockProviderFactory | undefined = + rushSession.getCobuildLockProviderFactory(cobuildJson.cobuildLockProvider); + if (!cobuildLockProviderFactory) { + throw new Error(`Unexpected cobuild lock provider: ${cobuildJson.cobuildLockProvider}`); + } + + return new CobuildConfiguration({ + cobuildJson, + rushConfiguration, + rushSession, + cobuildLockProviderFactory + }); + } + + public async createLockProviderAsync(terminal: ITerminal): Promise { + if (this.cobuildFeatureEnabled) { + terminal.writeLine(`Running cobuild (runner ${this.cobuildContextId}/${this.cobuildRunnerId})`); + const cobuildLockProvider: ICobuildLockProvider = await this._cobuildLockProviderFactory( + this._cobuildJson + ); + this._cobuildLockProvider = cobuildLockProvider; + await this._cobuildLockProvider.connectAsync(); + } + } + + public async destroyLockProviderAsync(): Promise { + if (this.cobuildFeatureEnabled) { + await this._cobuildLockProvider?.disconnectAsync(); + } + } + + public get cobuildLockProvider(): ICobuildLockProvider { + if (!this._cobuildLockProvider) { + throw new Error(`Cobuild lock provider has not been created`); + } + return this._cobuildLockProvider; + } +} diff --git a/libraries/rush-lib/src/api/EnvironmentConfiguration.ts b/libraries/rush-lib/src/api/EnvironmentConfiguration.ts index 96bc34cac99..393b5cefbce 100644 --- a/libraries/rush-lib/src/api/EnvironmentConfiguration.ts +++ b/libraries/rush-lib/src/api/EnvironmentConfiguration.ts @@ -144,6 +144,36 @@ export const EnvironmentVariableNames = { */ RUSH_BUILD_CACHE_WRITE_ALLOWED: 'RUSH_BUILD_CACHE_WRITE_ALLOWED', + /** + * Setting this environment variable opts into running with cobuilds. The context id should be the same across + * multiple VMs, but changed when it is a new round of cobuilds. + * + * e.g. `Build.BuildNumber` in Azure DevOps Pipeline. + * + * @remarks + * If there is no cobuild configured, then this environment variable is ignored. + */ + RUSH_COBUILD_CONTEXT_ID: 'RUSH_COBUILD_CONTEXT_ID', + + /** + * Explicitly specifies a name for each participating cobuild runner. + * + * Setting this environment variable opts into running with cobuilds. + * + * @remarks + * This environment variable is optional, if it is not provided, a random id is used. + * + * If there is no cobuild configured, then this environment variable is ignored. + */ + RUSH_COBUILD_RUNNER_ID: 'RUSH_COBUILD_RUNNER_ID', + + /** + * If this variable is set to "1", When getting distributed builds, Rush will automatically handle the leaf project + * with build cache "disabled" by writing to the cache in a special "log files only mode". This is useful when you + * want to use Cobuilds to improve the performance in CI validations and the leaf projects have not enabled cache. + */ + RUSH_COBUILD_LEAF_PROJECT_LOG_ONLY_ALLOWED: 'RUSH_COBUILD_LEAF_PROJECT_LOG_ONLY_ALLOWED', + /** * Explicitly specifies the path for the Git binary that is invoked by certain Rush operations. */ @@ -203,6 +233,12 @@ export class EnvironmentConfiguration { private static _buildCacheWriteAllowed: boolean | undefined; + private static _cobuildContextId: string | undefined; + + private static _cobuildRunnerId: string | undefined; + + private static _cobuildLeafProjectLogOnlyAllowed: boolean | undefined; + private static _gitBinaryPath: string | undefined; private static _tarBinaryPath: string | undefined; @@ -300,6 +336,33 @@ export class EnvironmentConfiguration { return EnvironmentConfiguration._buildCacheWriteAllowed; } + /** + * Provides a determined cobuild context id if configured + * See {@link EnvironmentVariableNames.RUSH_COBUILD_CONTEXT_ID} + */ + public static get cobuildContextId(): string | undefined { + EnvironmentConfiguration._ensureValidated(); + return EnvironmentConfiguration._cobuildContextId; + } + + /** + * Provides a determined cobuild runner id if configured + * See {@link EnvironmentVariableNames.RUSH_COBUILD_RUNNER_ID} + */ + public static get cobuildRunnerId(): string | undefined { + EnvironmentConfiguration._ensureValidated(); + return EnvironmentConfiguration._cobuildRunnerId; + } + + /** + * If set, enables or disables the cobuild leaf project log only feature. + * See {@link EnvironmentVariableNames.RUSH_COBUILD_LEAF_PROJECT_LOG_ONLY_ALLOWED} + */ + public static get cobuildLeafProjectLogOnlyAllowed(): boolean | undefined { + EnvironmentConfiguration._ensureValidated(); + return EnvironmentConfiguration._cobuildLeafProjectLogOnlyAllowed; + } + /** * Allows the git binary path to be explicitly provided. * See {@link EnvironmentVariableNames.RUSH_GIT_BINARY_PATH} @@ -430,6 +493,25 @@ export class EnvironmentConfiguration { break; } + case EnvironmentVariableNames.RUSH_COBUILD_CONTEXT_ID: { + EnvironmentConfiguration._cobuildContextId = value; + break; + } + + case EnvironmentVariableNames.RUSH_COBUILD_RUNNER_ID: { + EnvironmentConfiguration._cobuildRunnerId = value; + break; + } + + case EnvironmentVariableNames.RUSH_COBUILD_LEAF_PROJECT_LOG_ONLY_ALLOWED: { + EnvironmentConfiguration._cobuildLeafProjectLogOnlyAllowed = + EnvironmentConfiguration.parseBooleanEnvironmentVariable( + EnvironmentVariableNames.RUSH_COBUILD_LEAF_PROJECT_LOG_ONLY_ALLOWED, + value + ); + break; + } + case EnvironmentVariableNames.RUSH_GIT_BINARY_PATH: { EnvironmentConfiguration._gitBinaryPath = value; break; diff --git a/libraries/rush-lib/src/api/RushConfiguration.ts b/libraries/rush-lib/src/api/RushConfiguration.ts index ca29df8473e..f1f59164000 100644 --- a/libraries/rush-lib/src/api/RushConfiguration.ts +++ b/libraries/rush-lib/src/api/RushConfiguration.ts @@ -58,6 +58,7 @@ const knownRushConfigFilenames: string[] = [ RushConstants.artifactoryFilename, RushConstants.browserApprovedPackagesFilename, RushConstants.buildCacheFilename, + RushConstants.cobuildFilename, RushConstants.commandLineFilename, RushConstants.commonVersionsFilename, RushConstants.customTipsFilename, diff --git a/libraries/rush-lib/src/api/RushProjectConfiguration.ts b/libraries/rush-lib/src/api/RushProjectConfiguration.ts index 0245b8c53a9..9f0753c45ae 100644 --- a/libraries/rush-lib/src/api/RushProjectConfiguration.ts +++ b/libraries/rush-lib/src/api/RushProjectConfiguration.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, ITerminal, Path } from '@rushstack/node-core-library'; +import { AlreadyReportedError, Async, type ITerminal, Path } from '@rushstack/node-core-library'; import { ConfigurationFile, InheritanceType } from '@rushstack/heft-config-file'; import { RigConfig } from '@rushstack/rig-package'; @@ -13,7 +13,8 @@ import schemaJson from '../schemas/rush-project.schema.json'; import anythingSchemaJson from '../schemas/rush-project.schema.json'; /** - * Describes the file structure for the "/config/rush-project.json" config file. + * Describes the file structure for the `/config/rush-project.json` config file. + * @internal */ export interface IRushProjectJson { /** @@ -40,6 +41,9 @@ export interface IRushProjectJson { operationSettings?: IOperationSettings[]; } +/** + * @alpha + */ export interface IOperationSettings { /** * The name of the operation. This should be a key in the `package.json`'s `scripts` object. @@ -188,7 +192,7 @@ const OLD_RUSH_PROJECT_CONFIGURATION_FILE: ConfigurationFile = @@ -197,12 +201,12 @@ export class RushProjectConfiguration { public readonly project: RushConfigurationProject; /** - * {@inheritdoc IRushProjectJson.incrementalBuildIgnoredGlobs} + * {@inheritdoc _IRushProjectJson.incrementalBuildIgnoredGlobs} */ public readonly incrementalBuildIgnoredGlobs: ReadonlyArray; /** - * {@inheritdoc IRushProjectJson.disableBuildCacheForProject} + * {@inheritdoc _IRushProjectJson.disableBuildCacheForProject} */ public readonly disableBuildCacheForProject: boolean; @@ -284,6 +288,53 @@ export class RushProjectConfiguration { } } + /** + * Examines the list of source files for the project and the target phase and returns a reason + * why the project cannot enable the build cache for that phase, or undefined if it is safe to so do. + */ + public getCacheDisabledReason(trackedFileNames: Iterable, phaseName: string): string | undefined { + if (this.disableBuildCacheForProject) { + return 'Caching has been disabled for this project.'; + } + + const normalizedProjectRelativeFolder: string = Path.convertToSlashes(this.project.projectRelativeFolder); + + const operationSettings: IOperationSettings | undefined = + this.operationSettingsByOperationName.get(phaseName); + if (!operationSettings) { + return `This project does not define the caching behavior of the "${phaseName}" command, so caching has been disabled.`; + } + + if (operationSettings.disableBuildCacheForOperation) { + return `Caching has been disabled for this project's "${phaseName}" command.`; + } + + const { outputFolderNames } = operationSettings; + if (!outputFolderNames) { + return; + } + + const normalizedOutputFolders: string[] = outputFolderNames.map( + (outputFolderName) => `${normalizedProjectRelativeFolder}/${outputFolderName}/` + ); + + const inputOutputFiles: string[] = []; + for (const file of trackedFileNames) { + for (const outputFolder of normalizedOutputFolders) { + if (file.startsWith(outputFolder)) { + inputOutputFiles.push(file); + } + } + } + + if (inputOutputFiles.length > 0) { + return ( + 'The following files are used to calculate project state ' + + `and are considered project output: ${inputOutputFiles.join(', ')}` + ); + } + } + /** * Loads the rush-project.json data for the specified project. */ @@ -337,6 +388,29 @@ export class RushProjectConfiguration { return rushProjectJson?.incrementalBuildIgnoredGlobs; } + /** + * Load the rush-project.json data for all selected projects. + * Validate compatibility of output folders across all selected phases. + */ + public static async tryLoadAndValidateForProjectsAsync( + projects: Iterable, + phases: ReadonlySet, + terminal: ITerminal + ): Promise> { + const result: Map = new Map(); + + await Async.forEachAsync(projects, async (project: RushConfigurationProject) => { + const projectConfig: RushProjectConfiguration | undefined = + await RushProjectConfiguration.tryLoadForProjectAsync(project, terminal); + if (projectConfig) { + projectConfig.validatePhaseConfiguration(phases, terminal); + result.set(project, projectConfig); + } + }); + + return result; + } + private static async _tryLoadJsonForProjectAsync( project: RushConfigurationProject, terminal: ITerminal diff --git a/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts b/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts index 9d737bd9ac5..3957761180f 100644 --- a/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts +++ b/libraries/rush-lib/src/api/test/RushProjectConfiguration.test.ts @@ -23,7 +23,8 @@ async function loadProjectConfigurationAsync( const testFolder: string = `${__dirname}/jsonFiles/${testProjectName}`; const rushProject: RushConfigurationProject = { packageName: testProjectName, - projectFolder: testFolder + projectFolder: testFolder, + projectRelativeFolder: testProjectName } as RushConfigurationProject; const terminal: Terminal = new Terminal(new StringBufferTerminalProvider()); try { @@ -108,4 +109,74 @@ describe(RushProjectConfiguration.name, () => { expect(errorWasThrown).toBe(true); }); }); + + describe(RushProjectConfiguration.prototype.getCacheDisabledReason.name, () => { + it('Indicates if the build cache is completely disabled', async () => { + const config: RushProjectConfiguration | undefined = await loadProjectConfigurationAsync( + 'test-project-a' + ); + + if (!config) { + throw new Error('Failed to load config'); + } + + const reason: string | undefined = config.getCacheDisabledReason([], 'z'); + expect(reason).toMatchSnapshot(); + }); + + it('Indicates if the phase behavior is not defined', async () => { + const config: RushProjectConfiguration | undefined = await loadProjectConfigurationAsync( + 'test-project-c' + ); + + if (!config) { + throw new Error('Failed to load config'); + } + + const reason: string | undefined = config.getCacheDisabledReason([], 'z'); + expect(reason).toMatchSnapshot(); + }); + + it('Indicates if the phase has disabled the cache', async () => { + const config: RushProjectConfiguration | undefined = await loadProjectConfigurationAsync( + 'test-project-c' + ); + + if (!config) { + throw new Error('Failed to load config'); + } + + const reason: string | undefined = config.getCacheDisabledReason([], '_phase:a'); + expect(reason).toMatchSnapshot(); + }); + + it('Indicates if tracked files are outputs of the phase', async () => { + const config: RushProjectConfiguration | undefined = await loadProjectConfigurationAsync( + 'test-project-c' + ); + + if (!config) { + throw new Error('Failed to load config'); + } + + const reason: string | undefined = config.getCacheDisabledReason( + ['test-project-c/.cache/b/foo'], + '_phase:b' + ); + expect(reason).toMatchSnapshot(); + }); + + it('returns undfined if the config is safe', async () => { + const config: RushProjectConfiguration | undefined = await loadProjectConfigurationAsync( + 'test-project-c' + ); + + if (!config) { + throw new Error('Failed to load config'); + } + + const reason: string | undefined = config.getCacheDisabledReason([''], '_phase:b'); + expect(reason).toBeUndefined(); + }); + }); }); 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 c087d0f6ad5..9250e9b1aa0 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 @@ -1,8 +1,17 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`RushProjectConfiguration getCacheDisabledReason Indicates if the build cache is completely disabled 1`] = `"Caching has been disabled for this project."`; + +exports[`RushProjectConfiguration getCacheDisabledReason Indicates if the phase behavior is not defined 1`] = `"This project does not define the caching behavior of the \\"z\\" command, so caching has been disabled."`; + +exports[`RushProjectConfiguration getCacheDisabledReason Indicates if the phase has disabled the cache 1`] = `"Caching has been disabled for this project's \\"_phase:a\\" command."`; + +exports[`RushProjectConfiguration getCacheDisabledReason Indicates if tracked files are outputs of the phase 1`] = `"The following files are used to calculate project state and are considered project output: test-project-c/.cache/b/foo"`; + exports[`RushProjectConfiguration operationSettingsByOperationName allows outputFolderNames to be inside subfolders 1`] = ` Map { "_phase:a" => Object { + "disableBuildCacheForOperation": true, "operationName": "_phase:a", "outputFolderNames": Array [ ".cache/a", diff --git a/libraries/rush-lib/src/api/test/jsonFiles/test-project-a/config/rush-project.json b/libraries/rush-lib/src/api/test/jsonFiles/test-project-a/config/rush-project.json index c8743b4eb22..fe852bfeda4 100644 --- a/libraries/rush-lib/src/api/test/jsonFiles/test-project-a/config/rush-project.json +++ b/libraries/rush-lib/src/api/test/jsonFiles/test-project-a/config/rush-project.json @@ -1,6 +1,8 @@ { "extends": "../../rush-project-base.json", + "disableBuildCacheForProject": true, + "operationSettings": [ { "operationName": "_phase:a", diff --git a/libraries/rush-lib/src/api/test/jsonFiles/test-project-c/config/rush-project.json b/libraries/rush-lib/src/api/test/jsonFiles/test-project-c/config/rush-project.json index 3609b5a63b9..6b2625686a3 100644 --- a/libraries/rush-lib/src/api/test/jsonFiles/test-project-c/config/rush-project.json +++ b/libraries/rush-lib/src/api/test/jsonFiles/test-project-c/config/rush-project.json @@ -2,7 +2,8 @@ "operationSettings": [ { "operationName": "_phase:a", - "outputFolderNames": [".cache/a"] + "outputFolderNames": [".cache/a"], + "disableBuildCacheForOperation": true }, { "operationName": "_phase:b", diff --git a/libraries/rush-lib/src/cli/RushCommandLineParser.ts b/libraries/rush-lib/src/cli/RushCommandLineParser.ts index 3f483e054f1..5dc44071fd9 100644 --- a/libraries/rush-lib/src/cli/RushCommandLineParser.ts +++ b/libraries/rush-lib/src/cli/RushCommandLineParser.ts @@ -190,7 +190,8 @@ export class RushCommandLineParser extends CommandLineParser { } public async execute(args?: string[]): Promise { - this._terminalProvider.verboseEnabled = this.isDebug; + // debugParameter will be correctly parsed during super.execute(), so manually parse here. + this._terminalProvider.verboseEnabled = this._terminalProvider.debugEnabled = process.argv.indexOf('--debug') >= 0; await this.pluginManager.tryInitializeUnassociatedPluginsAsync(); diff --git a/libraries/rush-lib/src/cli/actions/InitAction.ts b/libraries/rush-lib/src/cli/actions/InitAction.ts index 5a72b3edcc5..c72ce927c46 100644 --- a/libraries/rush-lib/src/cli/actions/InitAction.ts +++ b/libraries/rush-lib/src/cli/actions/InitAction.ts @@ -156,6 +156,7 @@ export class InitAction extends BaseConfiglessRushAction { 'common/config/rush/[dot]npmrc-publish', 'common/config/rush/artifactory.json', 'common/config/rush/build-cache.json', + 'common/config/rush/cobuild.json', 'common/config/rush/command-line.json', 'common/config/rush/common-versions.json', 'common/config/rush/custom-tips.json', diff --git a/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts b/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts index 3a295e445f3..a69b64d4be1 100644 --- a/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts +++ b/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts @@ -38,6 +38,10 @@ import { IExecutionResult } from '../../logic/operations/IOperationExecutionResu import { OperationResultSummarizerPlugin } from '../../logic/operations/OperationResultSummarizerPlugin'; import type { ITelemetryData, ITelemetryOperationResult } from '../../logic/Telemetry'; import { parseParallelism } from '../parsing/ParseParallelism'; +import { CobuildConfiguration } from '../../api/CobuildConfiguration'; +import { CacheableOperationPlugin } from '../../logic/operations/CacheableOperationPlugin'; +import { RushProjectConfiguration } from '../../api/RushProjectConfiguration'; +import { LegacySkipPlugin } from '../../logic/operations/LegacySkipPlugin'; /** * Constructor parameters for PhasedScriptAction. @@ -304,81 +308,126 @@ export class PhasedScriptAction extends BaseScriptAction { const changedProjectsOnly: boolean = !!this._changedProjectsOnly?.value; let buildCacheConfiguration: BuildCacheConfiguration | undefined; + let cobuildConfiguration: CobuildConfiguration | undefined; if (!this._disableBuildCache) { buildCacheConfiguration = await BuildCacheConfiguration.tryLoadAsync( terminal, this.rushConfiguration, this.rushSession ); + cobuildConfiguration = await CobuildConfiguration.tryLoadAsync( + terminal, + this.rushConfiguration, + this.rushSession + ); + await cobuildConfiguration?.createLockProviderAsync(terminal); } - const projectSelection: Set = - await this._selectionParameters.getSelectedProjectsAsync(terminal); + try { + const projectSelection: Set = + await this._selectionParameters.getSelectedProjectsAsync(terminal); + + if (!projectSelection.size) { + terminal.writeLine( + colors.yellow(`The command line selection parameters did not match any projects.`) + ); + return; + } - if (!projectSelection.size) { - terminal.writeLine(colors.yellow(`The command line selection parameters did not match any projects.`)); - return; - } + const isWatch: boolean = this._watchParameter?.value || this._alwaysWatch; - const isWatch: boolean = this._watchParameter?.value || this._alwaysWatch; + const customParametersByName: Map = new Map(); + for (const [configParameter, parserParameter] of this.customParameters) { + customParametersByName.set(configParameter.longName, parserParameter); + } - const customParametersByName: Map = new Map(); - for (const [configParameter, parserParameter] of this.customParameters) { - customParametersByName.set(configParameter.longName, parserParameter); - } + if (buildCacheConfiguration) { + new CacheableOperationPlugin({ + allowWarningsInSuccessfulBuild: + !!this.rushConfiguration.experimentsConfiguration.configuration + .buildCacheWithAllowWarningsInSuccessfulBuild, + buildCacheConfiguration, + cobuildConfiguration, + terminal + }).apply(this.hooks); + } else { + new LegacySkipPlugin({ + terminal, + changedProjectsOnly, + isIncrementalBuildAllowed: this._isIncrementalBuildAllowed + }).apply(this.hooks); + } - const projectChangeAnalyzer: ProjectChangeAnalyzer = new ProjectChangeAnalyzer(this.rushConfiguration); - const initialCreateOperationsContext: ICreateOperationsContext = { - buildCacheConfiguration, - customParameters: customParametersByName, - isIncrementalBuildAllowed: this._isIncrementalBuildAllowed, - isInitial: true, - isWatch, - rushConfiguration: this.rushConfiguration, - phaseOriginal: new Set(this._originalPhases), - phaseSelection: new Set(this._initialPhases), - projectChangeAnalyzer, - projectSelection, - projectsInUnknownState: projectSelection - }; + const projectConfigurations: ReadonlyMap = + await RushProjectConfiguration.tryLoadAndValidateForProjectsAsync( + projectSelection, + this._initialPhases, + terminal + ); + + const projectChangeAnalyzer: ProjectChangeAnalyzer = new ProjectChangeAnalyzer(this.rushConfiguration); + const initialCreateOperationsContext: ICreateOperationsContext = { + buildCacheConfiguration, + cobuildConfiguration, + customParameters: customParametersByName, + isIncrementalBuildAllowed: this._isIncrementalBuildAllowed, + isInitial: true, + isWatch, + rushConfiguration: this.rushConfiguration, + phaseOriginal: new Set(this._originalPhases), + phaseSelection: new Set(this._initialPhases), + projectChangeAnalyzer, + projectSelection, + projectConfigurations, + projectsInUnknownState: projectSelection + }; - const executionManagerOptions: IOperationExecutionManagerOptions = { - quietMode: isQuietMode, - debugMode: this.parser.isDebug, - parallelism, - changedProjectsOnly, - beforeExecuteOperations: async (records: Map) => { - await this.hooks.beforeExecuteOperations.promise(records); - }, - onOperationStatusChanged: (record: OperationExecutionRecord) => { - this.hooks.onOperationStatusChanged.call(record); - } - }; + const executionManagerOptions: IOperationExecutionManagerOptions = { + quietMode: isQuietMode, + debugMode: this.parser.isDebug, + parallelism, + changedProjectsOnly, + beforeExecuteOperation: async (record: OperationExecutionRecord) => { + return await this.hooks.beforeExecuteOperation.promise(record); + }, + afterExecuteOperation: async (record: OperationExecutionRecord) => { + await this.hooks.afterExecuteOperation.promise(record); + }, + beforeExecuteOperations: async (records: Map) => { + await this.hooks.beforeExecuteOperations.promise(records, initialCreateOperationsContext); + }, + onOperationStatusChanged: (record: OperationExecutionRecord) => { + this.hooks.onOperationStatusChanged.call(record); + } + }; - const internalOptions: IRunPhasesOptions = { - initialCreateOperationsContext, - executionManagerOptions, - stopwatch, - terminal - }; + const internalOptions: IRunPhasesOptions = { + initialCreateOperationsContext, + executionManagerOptions, + stopwatch, + terminal + }; - terminal.write('Analyzing repo state... '); - const repoStateStopwatch: Stopwatch = new Stopwatch(); - repoStateStopwatch.start(); - await projectChangeAnalyzer._ensureInitializedAsync(terminal); - repoStateStopwatch.stop(); - terminal.writeLine(`DONE (${repoStateStopwatch.toString()})`); - terminal.writeLine(); + terminal.write('Analyzing repo state... '); + const repoStateStopwatch: Stopwatch = new Stopwatch(); + repoStateStopwatch.start(); + await projectChangeAnalyzer._ensureInitializedAsync(terminal); + repoStateStopwatch.stop(); + terminal.writeLine(`DONE (${repoStateStopwatch.toString()})`); + terminal.writeLine(); - await this._runInitialPhases(internalOptions); + await this._runInitialPhases(internalOptions); - if (isWatch) { - if (buildCacheConfiguration) { - // Cache writes are not supported during watch mode, only reads. - buildCacheConfiguration.cacheWriteEnabled = false; - } + if (isWatch) { + if (buildCacheConfiguration) { + // Cache writes are not supported during watch mode, only reads. + buildCacheConfiguration.cacheWriteEnabled = false; + } - await this._runWatchPhases(internalOptions); + await this._runWatchPhases(internalOptions); + } + } finally { + await cobuildConfiguration?.destroyLockProviderAsync(); } } diff --git a/libraries/rush-lib/src/index.ts b/libraries/rush-lib/src/index.ts index c7daac53565..4e9a3bfd5ad 100644 --- a/libraries/rush-lib/src/index.ts +++ b/libraries/rush-lib/src/index.ts @@ -31,6 +31,7 @@ export { } from './logic/pnpm/PnpmOptionsConfiguration'; export { BuildCacheConfiguration } from './api/BuildCacheConfiguration'; +export { CobuildConfiguration, ICobuildJson } from './api/CobuildConfiguration'; export { GetCacheEntryIdFunction, IGenerateCacheEntryIdOptions } from './logic/buildCache/CacheEntryId'; export { FileSystemBuildCacheProvider, @@ -54,6 +55,12 @@ export { PackageManagerName, PackageManager } from './api/packageManager/Package export { RushConfigurationProject } from './api/RushConfigurationProject'; +export { + IRushProjectJson as _IRushProjectJson, + IOperationSettings, + RushProjectConfiguration +} from './api/RushProjectConfiguration'; + export { RushUserConfiguration } from './api/RushUserConfiguration'; export { RushGlobalFolder as _RushGlobalFolder } from './api/RushGlobalFolder'; @@ -97,7 +104,11 @@ export { ICustomTipItemJson } from './api/CustomTipsConfiguration'; -export { ProjectChangeAnalyzer, IGetChangedProjectsOptions } from './logic/ProjectChangeAnalyzer'; +export { + ProjectChangeAnalyzer, + IGetChangedProjectsOptions, + IRawRepoState as _IRawRepoState +} from './logic/ProjectChangeAnalyzer'; export { IOperationRunner, IOperationRunnerContext } from './logic/operations/IOperationRunner'; export { IExecutionResult, IOperationExecutionResult } from './logic/operations/IOperationExecutionResult'; @@ -107,7 +118,8 @@ export { OperationStatus } from './logic/operations/OperationStatus'; export { RushSession, IRushSessionOptions, - CloudBuildCacheProviderFactory + CloudBuildCacheProviderFactory, + CobuildLockProviderFactory } from './pluginFramework/RushSession'; export { @@ -125,6 +137,11 @@ export { IRushPluginConfigurationBase as _IRushPluginConfigurationBase } from '. export { ILogger } from './pluginFramework/logging/Logger'; export { ICloudBuildCacheProvider } from './logic/buildCache/ICloudBuildCacheProvider'; +export { + ICobuildLockProvider, + ICobuildContext, + ICobuildCompletedState +} from './logic/cobuild/ICobuildLockProvider'; export { ICredentialCacheOptions, ICredentialCacheEntry, CredentialCache } from './logic/CredentialCache'; diff --git a/libraries/rush-lib/src/logic/RushConstants.ts b/libraries/rush-lib/src/logic/RushConstants.ts index a70a62aaef0..c121a60466e 100644 --- a/libraries/rush-lib/src/logic/RushConstants.ts +++ b/libraries/rush-lib/src/logic/RushConstants.ts @@ -189,6 +189,11 @@ export class RushConstants { */ public static readonly buildCacheVersion: number = 1; + /** + * Cobuild configuration file. + */ + public static readonly cobuildFilename: string = 'cobuild.json'; + /** * Per-project configuration filename. */ diff --git a/libraries/rush-lib/src/logic/buildCache/ProjectBuildCache.ts b/libraries/rush-lib/src/logic/buildCache/ProjectBuildCache.ts index 658bd3217b0..c5196093428 100644 --- a/libraries/rush-lib/src/logic/buildCache/ProjectBuildCache.ts +++ b/libraries/rush-lib/src/logic/buildCache/ProjectBuildCache.ts @@ -3,11 +3,11 @@ import * as path from 'path'; import * as crypto from 'crypto'; -import { FileSystem, Path, ITerminal, FolderItem, InternalError, Async } from '@rushstack/node-core-library'; + +import { FileSystem, ITerminal, FolderItem, InternalError, Async } from '@rushstack/node-core-library'; import { RushConfigurationProject } from '../../api/RushConfigurationProject'; import { ProjectChangeAnalyzer } from '../ProjectChangeAnalyzer'; -import { RushProjectConfiguration } from '../../api/RushProjectConfiguration'; import { RushConstants } from '../RushConstants'; import { BuildCacheConfiguration } from '../../api/BuildCacheConfiguration'; import { ICloudBuildCacheProvider } from './ICloudBuildCacheProvider'; @@ -17,12 +17,11 @@ import { EnvironmentVariableNames } from '../../api/EnvironmentConfiguration'; export interface IProjectBuildCacheOptions { buildCacheConfiguration: BuildCacheConfiguration; - projectConfiguration: RushProjectConfiguration; + project: RushConfigurationProject; projectOutputFolderNames: ReadonlyArray; additionalProjectOutputFilePaths?: ReadonlyArray; additionalContext?: Record; - command: string; - trackedProjectFiles: string[] | undefined; + configHash: string; projectChangeAnalyzer: ProjectChangeAnalyzer; terminal: ITerminal; phaseName: string; @@ -50,13 +49,9 @@ export class ProjectBuildCache { private _cacheId: string | undefined; private constructor(cacheId: string | undefined, options: IProjectBuildCacheOptions) { - const { - buildCacheConfiguration, - projectConfiguration, - projectOutputFolderNames, - additionalProjectOutputFilePaths - } = options; - this._project = projectConfiguration.project; + const { buildCacheConfiguration, project, projectOutputFolderNames, additionalProjectOutputFilePaths } = + options; + this._project = project; this._localBuildCacheProvider = buildCacheConfiguration.localCacheProvider; this._cloudBuildCacheProvider = buildCacheConfiguration.cloudCacheProvider; this._buildCacheEnabled = buildCacheConfiguration.buildCacheEnabled; @@ -74,67 +69,19 @@ export class ProjectBuildCache { return ProjectBuildCache._tarUtilityPromise; } + public get cacheId(): string | undefined { + return this._cacheId; + } + public static async tryGetProjectBuildCache( options: IProjectBuildCacheOptions ): Promise { - const { terminal, projectConfiguration, projectOutputFolderNames, trackedProjectFiles } = options; - if (!trackedProjectFiles) { - return undefined; - } - - if ( - !ProjectBuildCache._validateProject( - terminal, - projectConfiguration, - projectOutputFolderNames, - trackedProjectFiles - ) - ) { - return undefined; - } - const cacheId: string | undefined = await ProjectBuildCache._getCacheId(options); return new ProjectBuildCache(cacheId, options); } - private static _validateProject( - terminal: ITerminal, - projectConfiguration: RushProjectConfiguration, - projectOutputFolderNames: ReadonlyArray, - trackedProjectFiles: string[] - ): boolean { - const normalizedProjectRelativeFolder: string = Path.convertToSlashes( - projectConfiguration.project.projectRelativeFolder - ); - const outputFolders: string[] = []; - if (projectOutputFolderNames) { - for (const outputFolderName of projectOutputFolderNames) { - outputFolders.push(`${normalizedProjectRelativeFolder}/${outputFolderName}/`); - } - } - - const inputOutputFiles: string[] = []; - for (const file of trackedProjectFiles) { - for (const outputFolder of outputFolders) { - if (file.startsWith(outputFolder)) { - inputOutputFiles.push(file); - } - } - } - - if (inputOutputFiles.length > 0) { - terminal.writeWarningLine( - 'Unable to use build cache. The following files are used to calculate project state ' + - `and are considered project output: ${inputOutputFiles.join(', ')}` - ); - return false; - } else { - return true; - } - } - - public async tryRestoreFromCacheAsync(terminal: ITerminal): Promise { - const cacheId: string | undefined = this._cacheId; + public async tryRestoreFromCacheAsync(terminal: ITerminal, specifiedCacheId?: string): Promise { + const cacheId: string | undefined = specifiedCacheId || this._cacheId; if (!cacheId) { terminal.writeWarningLine('Unable to get cache ID. Ensure Git is installed.'); return false; @@ -192,7 +139,7 @@ export class ProjectBuildCache { const tarUtility: TarExecutable | undefined = await ProjectBuildCache._tryGetTarUtility(terminal); let restoreSuccess: boolean = false; if (tarUtility && localCacheEntryPath) { - const logFilePath: string = this._getTarLogFilePath(); + const logFilePath: string = this._getTarLogFilePath('untar'); const tarExitCode: number = await tarUtility.tryUntarAsync({ archivePath: localCacheEntryPath, outputFolderPath: projectFolderPath, @@ -202,7 +149,10 @@ export class ProjectBuildCache { restoreSuccess = true; terminal.writeLine('Successfully restored output from the build cache.'); } else { - terminal.writeWarningLine('Unable to restore output from the build cache.'); + terminal.writeWarningLine( + 'Unable to restore output from the build cache. ' + + `See "${logFilePath}" for logs from the tar process.` + ); } } @@ -213,13 +163,13 @@ export class ProjectBuildCache { return restoreSuccess; } - public async trySetCacheEntryAsync(terminal: ITerminal): Promise { + public async trySetCacheEntryAsync(terminal: ITerminal, specifiedCacheId?: string): Promise { if (!this._cacheWriteEnabled) { // Skip writing local and cloud build caches, without any noise return true; } - const cacheId: string | undefined = this._cacheId; + const cacheId: string | undefined = specifiedCacheId || this._cacheId; if (!cacheId) { terminal.writeWarningLine('Unable to get cache ID. Ensure Git is installed.'); return false; @@ -246,7 +196,7 @@ export class ProjectBuildCache { const randomSuffix: string = crypto.randomBytes(8).toString('hex'); const tempLocalCacheEntryPath: string = `${finalLocalCacheEntryPath}-${randomSuffix}.temp`; - const logFilePath: string = this._getTarLogFilePath(); + const logFilePath: string = this._getTarLogFilePath('tar'); const tarExitCode: number = await tarUtility.tryCreateArchiveFromProjectPathsAsync({ archivePath: tempLocalCacheEntryPath, paths: filesToCache.outputFilePaths, @@ -390,7 +340,7 @@ export class ProjectBuildCache { // Add additional output file paths await Async.forEachAsync( this._additionalProjectOutputFilePaths, - async (additionalProjectOutputFilePath) => { + async (additionalProjectOutputFilePath: string) => { const fullPath: string = `${projectFolderPath}/${additionalProjectOutputFilePath}`; const pathExists: boolean = await FileSystem.existsAsync(fullPath); if (pathExists) { @@ -409,8 +359,8 @@ export class ProjectBuildCache { }; } - private _getTarLogFilePath(): string { - return path.join(this._project.projectRushTempFolder, `${this._cacheId}.log`); + private _getTarLogFilePath(mode: 'tar' | 'untar'): string { + return path.join(this._project.projectRushTempFolder, `${this._cacheId}.${mode}.log`); } private static async _getCacheId(options: IProjectBuildCacheOptions): Promise { @@ -422,39 +372,29 @@ export class ProjectBuildCache { // - A SHA1 hash is created and the following data is fed into it, in order: // 1. The JSON-serialized list of output folder names for this // project (see ProjectBuildCache._projectOutputFolderNames) - // 2. The command that will be run in the project + // 2. The configHash from the operation's runner // 3. Each dependency project hash (from the array constructed in previous steps), // in sorted alphanumerical-sorted order // - A hex digest of the hash is returned const projectChangeAnalyzer: ProjectChangeAnalyzer = options.projectChangeAnalyzer; const projectStates: string[] = []; - const projectsThatHaveBeenProcessed: Set = new Set(); - let projectsToProcess: Set = new Set(); - projectsToProcess.add(options.projectConfiguration.project); - - while (projectsToProcess.size > 0) { - const newProjectsToProcess: Set = new Set(); - for (const projectToProcess of projectsToProcess) { - projectsThatHaveBeenProcessed.add(projectToProcess); - - const projectState: string | undefined = await projectChangeAnalyzer._tryGetProjectStateHashAsync( - projectToProcess, - options.terminal - ); - if (!projectState) { - // If we hit any projects with unknown state, return unknown cache ID - return undefined; - } else { - projectStates.push(projectState); - for (const dependency of projectToProcess.dependencyProjects) { - if (!projectsThatHaveBeenProcessed.has(dependency)) { - newProjectsToProcess.add(dependency); - } - } + const projectsToProcess: Set = new Set(); + projectsToProcess.add(options.project); + + for (const projectToProcess of projectsToProcess) { + const projectState: string | undefined = await projectChangeAnalyzer._tryGetProjectStateHashAsync( + projectToProcess, + options.terminal + ); + if (!projectState) { + // If we hit any projects with unknown state, return unknown cache ID + return undefined; + } else { + projectStates.push(projectState); + for (const dependency of projectToProcess.dependencyProjects) { + projectsToProcess.add(dependency); } } - - projectsToProcess = newProjectsToProcess; } const sortedProjectStates: string[] = projectStates.sort(); @@ -465,13 +405,13 @@ export class ProjectBuildCache { const serializedOutputFolders: string = JSON.stringify(options.projectOutputFolderNames); hash.update(serializedOutputFolders); hash.update(RushConstants.hashDelimiter); - hash.update(options.command); + hash.update(options.configHash); hash.update(RushConstants.hashDelimiter); if (options.additionalContext) { for (const key of Object.keys(options.additionalContext).sort()) { // Add additional context keys and values. // - // This choice (to modiy the hash for every key regardless of whether a value is set) implies + // This choice (to modify the hash for every key regardless of whether a value is set) implies // that just _adding_ an env var to the list of dependsOnEnvVars will modify its hash. This // seems appropriate, because this behavior is consistent whether or not the env var happens // to have a value. @@ -487,7 +427,7 @@ export class ProjectBuildCache { const projectStateHash: string = hash.digest('hex'); return options.buildCacheConfiguration.getCacheEntryId({ - projectName: options.projectConfiguration.project.packageName, + projectName: options.project.packageName, projectStateHash, phaseName: options.phaseName }); diff --git a/libraries/rush-lib/src/logic/buildCache/test/ProjectBuildCache.test.ts b/libraries/rush-lib/src/logic/buildCache/test/ProjectBuildCache.test.ts index c690607a45a..ea906bc6991 100644 --- a/libraries/rush-lib/src/logic/buildCache/test/ProjectBuildCache.test.ts +++ b/libraries/rush-lib/src/logic/buildCache/test/ProjectBuildCache.test.ts @@ -3,7 +3,7 @@ import { StringBufferTerminalProvider, Terminal } from '@rushstack/node-core-library'; import { BuildCacheConfiguration } from '../../../api/BuildCacheConfiguration'; -import { RushProjectConfiguration } from '../../../api/RushProjectConfiguration'; +import { RushConfigurationProject } from '../../../api/RushConfigurationProject'; import { ProjectChangeAnalyzer } from '../../ProjectChangeAnalyzer'; import { IGenerateCacheEntryIdOptions } from '../CacheEntryId'; import { FileSystemBuildCacheProvider } from '../FileSystemBuildCacheProvider'; @@ -36,15 +36,12 @@ describe(ProjectBuildCache.name, () => { } } as unknown as BuildCacheConfiguration, projectOutputFolderNames: ['dist'], - projectConfiguration: { - project: { - packageName: 'acme-wizard', - projectRelativeFolder: 'apps/acme-wizard', - dependencyProjects: [] - } - } as unknown as RushProjectConfiguration, - command: 'build', - trackedProjectFiles: options.hasOwnProperty('trackedProjectFiles') ? options.trackedProjectFiles : [], + project: { + packageName: 'acme-wizard', + projectRelativeFolder: 'apps/acme-wizard', + dependencyProjects: [] + } as unknown as RushConfigurationProject, + configHash: 'build', projectChangeAnalyzer, terminal, phaseName: 'build' @@ -60,13 +57,5 @@ describe(ProjectBuildCache.name, () => { `"acme-wizard/1926f30e8ed24cb47be89aea39e7efd70fcda075"` ); }); - - it('returns undefined if the tracked file list is undefined', async () => { - expect( - await prepareSubject({ - trackedProjectFiles: undefined - }) - ).toBe(undefined); - }); }); }); diff --git a/libraries/rush-lib/src/logic/cobuild/CobuildLock.ts b/libraries/rush-lib/src/logic/cobuild/CobuildLock.ts new file mode 100644 index 00000000000..a8b16502885 --- /dev/null +++ b/libraries/rush-lib/src/logic/cobuild/CobuildLock.ts @@ -0,0 +1,119 @@ +// 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 { CobuildConfiguration } from '../../api/CobuildConfiguration'; +import type { OperationStatus } from '../operations/OperationStatus'; +import type { ICobuildContext } from './ICobuildLockProvider'; +import type { ProjectBuildCache } from '../buildCache/ProjectBuildCache'; + +const KEY_SEPARATOR: ':' = ':'; + +export interface ICobuildLockOptions { + /** + * {@inheritdoc CobuildConfiguration} + */ + cobuildConfiguration: CobuildConfiguration; + /** + * {@inheritdoc ICobuildContext.clusterId} + */ + cobuildClusterId: string; + /** + * {@inheritdoc ICobuildContext.packageName} + */ + packageName: string; + /** + * {@inheritdoc ICobuildContext.phaseName} + */ + phaseName: string; + projectBuildCache: ProjectBuildCache; + /** + * The expire time of the lock in seconds. + */ + lockExpireTimeInSeconds: number; +} + +export interface ICobuildCompletedState { + status: OperationStatus.Success | OperationStatus.SuccessWithWarning | OperationStatus.Failure; + cacheId: string; +} + +export class CobuildLock { + public readonly cobuildConfiguration: CobuildConfiguration; + public readonly projectBuildCache: ProjectBuildCache; + + private _cobuildContext: ICobuildContext; + + public constructor(options: ICobuildLockOptions) { + const { + cobuildConfiguration, + projectBuildCache, + cobuildClusterId: clusterId, + lockExpireTimeInSeconds, + packageName, + phaseName + } = options; + const { cobuildContextId: contextId, cobuildRunnerId: runnerId } = cobuildConfiguration; + const { cacheId } = projectBuildCache; + this.cobuildConfiguration = cobuildConfiguration; + this.projectBuildCache = projectBuildCache; + + if (!cacheId) { + // This should never happen + throw new InternalError(`Cache id is require for cobuild lock`); + } + + if (!contextId) { + // This should never happen + throw new InternalError(`Cobuild context id is require for cobuild lock`); + } + + // Example: cobuild:lock:: + const lockKey: string = ['cobuild', 'lock', contextId, clusterId].join(KEY_SEPARATOR); + + // Example: cobuild:completed:: + const completedStateKey: string = ['cobuild', 'completed', contextId, cacheId].join(KEY_SEPARATOR); + + this._cobuildContext = { + contextId, + clusterId, + runnerId, + lockKey, + completedStateKey, + packageName, + phaseName, + lockExpireTimeInSeconds: lockExpireTimeInSeconds, + cacheId + }; + } + + public async setCompletedStateAsync(state: ICobuildCompletedState): Promise { + await this.cobuildConfiguration.cobuildLockProvider.setCompletedStateAsync(this._cobuildContext, state); + } + + public async getCompletedStateAsync(): Promise { + const state: ICobuildCompletedState | undefined = + await this.cobuildConfiguration.cobuildLockProvider.getCompletedStateAsync(this._cobuildContext); + return state; + } + + public async tryAcquireLockAsync(): Promise { + const acquireLockResult: boolean = await this.cobuildConfiguration.cobuildLockProvider.acquireLockAsync( + this._cobuildContext + ); + if (acquireLockResult) { + // renew the lock in a redundant way in case of losing the lock + await this.renewLockAsync(); + } + return acquireLockResult; + } + + public async renewLockAsync(): Promise { + await this.cobuildConfiguration.cobuildLockProvider.renewLockAsync(this._cobuildContext); + } + + public get cobuildContext(): ICobuildContext { + return this._cobuildContext; + } +} diff --git a/libraries/rush-lib/src/logic/cobuild/DisjointSet.ts b/libraries/rush-lib/src/logic/cobuild/DisjointSet.ts new file mode 100644 index 00000000000..3a33aef59ae --- /dev/null +++ b/libraries/rush-lib/src/logic/cobuild/DisjointSet.ts @@ -0,0 +1,120 @@ +// 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'; + +/** + * A disjoint set data structure + */ +export class DisjointSet { + private _forest: Set; + private _parentMap: Map; + private _sizeMap: Map; + private _setByElement: Map> | undefined; + + public constructor() { + this._forest = new Set(); + this._parentMap = new Map(); + this._sizeMap = new Map(); + this._setByElement = new Map>(); + } + + public destroy(): void { + this._forest.clear(); + this._parentMap.clear(); + this._sizeMap.clear(); + this._setByElement?.clear(); + } + + /** + * Adds a new set containing specific object + */ + public add(x: T): void { + if (this._forest.has(x)) { + return; + } + + this._forest.add(x); + this._parentMap.set(x, x); + this._sizeMap.set(x, 1); + this._setByElement = undefined; + } + + /** + * Unions the sets that contain two objects + */ + public union(a: T, b: T): void { + let x: T = this._find(a); + let y: T = this._find(b); + + if (x === y) { + // x and y are already in the same set + return; + } + + const xSize: number = this._getSize(x); + const ySize: number = this._getSize(y); + if (xSize < ySize) { + const t: T = x; + x = y; + y = t; + } + this._parentMap.set(y, x); + this._sizeMap.set(x, xSize + ySize); + this._setByElement = undefined; + } + + public getAllSets(): Iterable> { + if (this._setByElement === undefined) { + this._setByElement = new Map>(); + + for (const element of this._forest) { + const root: T = this._find(element); + let set: Set | undefined = this._setByElement.get(root); + if (set === undefined) { + set = new Set(); + this._setByElement.set(root, set); + } + set.add(element); + } + } + return this._setByElement.values(); + } + + /** + * Returns true if x and y are in the same set + */ + public isConnected(x: T, y: T): boolean { + return this._find(x) === this._find(y); + } + + private _find(a: T): T { + let x: T = a; + let parent: T = this._getParent(x); + while (parent !== x) { + parent = this._getParent(parent); + this._parentMap.set(x, parent); + x = parent; + parent = this._getParent(x); + } + return x; + } + + private _getParent(x: T): T { + const parent: T | undefined = this._parentMap.get(x); + if (parent === undefined) { + // This should not happen + throw new InternalError(`Can not find parent`); + } + return parent; + } + + private _getSize(x: T): number { + const size: number | undefined = this._sizeMap.get(x); + if (size === undefined) { + // This should not happen + throw new InternalError(`Can not get size`); + } + return size; + } +} diff --git a/libraries/rush-lib/src/logic/cobuild/ICobuildLockProvider.ts b/libraries/rush-lib/src/logic/cobuild/ICobuildLockProvider.ts new file mode 100644 index 00000000000..027d8556a0c --- /dev/null +++ b/libraries/rush-lib/src/logic/cobuild/ICobuildLockProvider.ts @@ -0,0 +1,104 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import type { OperationStatus } from '../operations/OperationStatus'; + +/** + * @beta + */ +export interface ICobuildContext { + /** + * The key for acquiring lock. + */ + lockKey: string; + /** + * The expire time of the lock in seconds. + */ + lockExpireTimeInSeconds: number; + /** + * The key for storing completed state. + */ + completedStateKey: string; + /** + * The contextId is provided by the monorepo maintainer, it reads from environment variable {@link EnvironmentVariableNames.RUSH_COBUILD_CONTEXT_ID}. + * It ensure only the builds from the same given contextId cooperated. + */ + contextId: string; + /** + * The id of the cluster. The operations in the same cluster share the same clusterId and + * will be executed on the same machine. + */ + clusterId: string; + /** + * The id of the runner. The identifier for the running machine. + * + * It can be specified via assigning `RUSH_COBUILD_RUNNER_ID` environment variable. + */ + runnerId: string; + /** + * The id of the cache entry. It should be kept the same as the normal cacheId from ProjectBuildCache. + * Otherwise, there is a discrepancy in the success case wherein turning on cobuilds will + * fail to populate the normal build cache. + */ + cacheId: string; + /** + * The name of NPM package + * + * Example: `@scope/MyProject` + */ + packageName: string; + /** + * The name of the phase. + * + * Example: _phase:build + */ + phaseName: string; +} + +/** + * @beta + */ +export interface ICobuildCompletedState { + status: OperationStatus.Success | OperationStatus.SuccessWithWarning | OperationStatus.Failure; + /** + * Completed state points to the cache id that was used to store the build cache. + * Note: Cache failed builds in a separate cache id + */ + cacheId: string; +} + +/** + * @beta + */ +export interface ICobuildLockProvider { + /** + * The callback function invoked to connect to the lock provider. + * For example, initializing the connection to the redis server. + */ + connectAsync(): Promise; + /** + * The callback function invoked to disconnect the lock provider. + */ + disconnectAsync(): Promise; + /** + * The callback function to acquire a lock with a lock key and specific contexts. + * + * NOTE: This lock implementation must be a ReentrantLock. It says the lock might be acquired + * multiple times, since tasks in the same cluster can be run in the same VM. + */ + acquireLockAsync(context: Readonly): Promise; + /** + * The callback function to renew a lock with a lock key and specific contexts. + * + * NOTE: If the lock key expired + */ + renewLockAsync(context: Readonly): Promise; + /** + * The callback function to set completed state. + */ + setCompletedStateAsync(context: Readonly, state: ICobuildCompletedState): Promise; + /** + * The callback function to get completed state. + */ + getCompletedStateAsync(context: Readonly): Promise; +} diff --git a/libraries/rush-lib/src/logic/cobuild/test/CobuildLock.test.ts b/libraries/rush-lib/src/logic/cobuild/test/CobuildLock.test.ts new file mode 100644 index 00000000000..4f4d842e6a9 --- /dev/null +++ b/libraries/rush-lib/src/logic/cobuild/test/CobuildLock.test.ts @@ -0,0 +1,43 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import { CobuildLock, ICobuildLockOptions } from '../CobuildLock'; + +import type { CobuildConfiguration } from '../../../api/CobuildConfiguration'; +import type { ProjectBuildCache } from '../../buildCache/ProjectBuildCache'; +import type { ICobuildContext } from '../ICobuildLockProvider'; + +describe(CobuildLock.name, () => { + function prepareSubject(): CobuildLock { + const cobuildLockOptions: ICobuildLockOptions = { + cobuildConfiguration: { + cobuildContextId: 'context_id', + cobuildRunnerId: 'runner_id' + } as unknown as CobuildConfiguration, + projectBuildCache: { + cacheId: 'cache_id' + } as unknown as ProjectBuildCache, + cobuildClusterId: 'cluster_id', + lockExpireTimeInSeconds: 30, + packageName: 'package_name', + phaseName: 'phase_name' + }; + const subject: CobuildLock = new CobuildLock(cobuildLockOptions); + return subject; + } + it('returns cobuild context', () => { + const subject: CobuildLock = prepareSubject(); + const expected: ICobuildContext = { + lockKey: 'cobuild:lock:context_id:cluster_id', + completedStateKey: 'cobuild:completed:context_id:cache_id', + lockExpireTimeInSeconds: 30, + contextId: 'context_id', + cacheId: 'cache_id', + clusterId: 'cluster_id', + runnerId: 'runner_id', + packageName: 'package_name', + phaseName: 'phase_name' + }; + expect(subject.cobuildContext).toEqual(expected); + }); +}); diff --git a/libraries/rush-lib/src/logic/cobuild/test/DisjointSet.test.ts b/libraries/rush-lib/src/logic/cobuild/test/DisjointSet.test.ts new file mode 100644 index 00000000000..56bb80695d5 --- /dev/null +++ b/libraries/rush-lib/src/logic/cobuild/test/DisjointSet.test.ts @@ -0,0 +1,108 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import { DisjointSet } from '../DisjointSet'; + +describe(DisjointSet.name, () => { + it('can disjoint two sets', () => { + const disjointSet = new DisjointSet<{ id: number }>(); + const obj1 = { id: 1 }; + const obj2 = { id: 2 }; + disjointSet.add(obj1); + disjointSet.add(obj2); + + expect(disjointSet.isConnected(obj1, obj2)).toBe(false); + }); + + it('can disjoint multiple sets', () => { + const disjointSet = new DisjointSet<{ id: number }>(); + const obj1 = { id: 1 }; + const obj2 = { id: 2 }; + const obj3 = { id: 3 }; + const obj4 = { id: 4 }; + disjointSet.add(obj1); + disjointSet.add(obj2); + disjointSet.add(obj3); + disjointSet.add(obj4); + + expect(disjointSet.isConnected(obj1, obj2)).toBe(false); + expect(disjointSet.isConnected(obj1, obj3)).toBe(false); + expect(disjointSet.isConnected(obj1, obj4)).toBe(false); + }); + + it('can union two sets', () => { + const disjointSet = new DisjointSet<{ id: number }>(); + const obj1 = { id: 1 }; + const obj2 = { id: 2 }; + disjointSet.add(obj1); + disjointSet.add(obj2); + expect(disjointSet.isConnected(obj1, obj2)).toBe(false); + + disjointSet.union(obj1, obj2); + expect(disjointSet.isConnected(obj1, obj2)).toBe(true); + }); + + it('can union two sets transitively', () => { + const disjointSet = new DisjointSet<{ id: number }>(); + const obj1 = { id: 1 }; + const obj2 = { id: 2 }; + const obj3 = { id: 3 }; + disjointSet.add(obj1); + disjointSet.add(obj2); + disjointSet.add(obj3); + + disjointSet.union(obj1, obj2); + expect(disjointSet.isConnected(obj1, obj2)).toBe(true); + expect(disjointSet.isConnected(obj1, obj3)).toBe(false); + expect(disjointSet.isConnected(obj2, obj3)).toBe(false); + + disjointSet.union(obj1, obj3); + expect(disjointSet.isConnected(obj1, obj2)).toBe(true); + expect(disjointSet.isConnected(obj2, obj3)).toBe(true); + expect(disjointSet.isConnected(obj1, obj3)).toBe(true); + }); + + it('can union and disjoint sets', () => { + const disjointSet = new DisjointSet<{ id: number }>(); + const obj1 = { id: 1 }; + const obj2 = { id: 2 }; + const obj3 = { id: 3 }; + const obj4 = { id: 4 }; + disjointSet.add(obj1); + disjointSet.add(obj2); + disjointSet.add(obj3); + disjointSet.add(obj4); + + expect(disjointSet.isConnected(obj1, obj2)).toBe(false); + expect(disjointSet.isConnected(obj1, obj3)).toBe(false); + expect(disjointSet.isConnected(obj1, obj4)).toBe(false); + + disjointSet.union(obj1, obj2); + expect(disjointSet.isConnected(obj1, obj2)).toBe(true); + expect(disjointSet.isConnected(obj1, obj3)).toBe(false); + expect(disjointSet.isConnected(obj1, obj4)).toBe(false); + }); + + it('can get all sets', () => { + const disjointSet = new DisjointSet<{ id: number }>(); + const obj1 = { id: 1 }; + const obj2 = { id: 2 }; + const obj3 = { id: 3 }; + disjointSet.add(obj1); + disjointSet.add(obj2); + disjointSet.add(obj3); + + disjointSet.union(obj1, obj2); + + const allSets: Iterable> = disjointSet.getAllSets(); + + const allSetList: Array> = []; + for (const set of allSets) { + allSetList.push(set); + } + + expect(allSetList.length).toBe(2); + expect(Array.from(allSetList[0]).map((x) => x.id)).toEqual(expect.arrayContaining([1, 2])); + expect(Array.from(allSetList[1]).map((x) => x.id)).toEqual(expect.arrayContaining([3])); + }); +}); diff --git a/libraries/rush-lib/src/logic/operations/AsyncOperationQueue.ts b/libraries/rush-lib/src/logic/operations/AsyncOperationQueue.ts index 006df21d840..5bd47bfd597 100644 --- a/libraries/rush-lib/src/logic/operations/AsyncOperationQueue.ts +++ b/libraries/rush-lib/src/logic/operations/AsyncOperationQueue.ts @@ -5,7 +5,19 @@ import { OperationExecutionRecord } from './OperationExecutionRecord'; import { OperationStatus } from './OperationStatus'; /** - * Implmentation of the async iteration protocol for a collection of IOperation objects. + * When the queue returns an unassigned operation, it means there is at least one remote executing operation, + * at this time, the caller has a chance to make a decision: + * 1. Manually invoke `tryGetRemoteExecutingOperation()` to get the remote executing operation. + * 2. If there is no remote executing operation available, wait for some time and return in callback, which + * internally invoke `assignOperations()` to assign new operations. + * NOTE: the caller must wait for some time to avoid busy loop and burn CPU cycles. + */ +export const UNASSIGNED_OPERATION: 'UNASSIGNED_OPERATION' = 'UNASSIGNED_OPERATION'; + +export type IOperationIteratorResult = OperationExecutionRecord | typeof UNASSIGNED_OPERATION; + +/** + * Implementation of the async iteration protocol for a collection of IOperation objects. * The async iterator will wait for an operation to be ready for execution, or terminate if there are no more operations. * * @remarks @@ -14,10 +26,14 @@ import { OperationStatus } from './OperationStatus'; * stall until another operations completes. */ export class AsyncOperationQueue - implements AsyncIterable, AsyncIterator + implements AsyncIterable, AsyncIterator { private readonly _queue: OperationExecutionRecord[]; - private readonly _pendingIterators: ((result: IteratorResult) => void)[]; + private readonly _pendingIterators: ((result: IteratorResult) => void)[]; + private readonly _totalOperations: number; + private readonly _completedOperations: Set; + + private _isDone: boolean; /** * @param operations - The set of operations to be executed @@ -29,17 +45,20 @@ export class AsyncOperationQueue public constructor(operations: Iterable, sortFn: IOperationSortFunction) { this._queue = computeTopologyAndSort(operations, sortFn); this._pendingIterators = []; + this._totalOperations = this._queue.length; + this._isDone = false; + this._completedOperations = new Set(); } /** * For use with `for await (const operation of taskQueue)` * @see {AsyncIterator} */ - public next(): Promise> { + public next(): Promise> { const { _pendingIterators: waitingIterators } = this; - const promise: Promise> = new Promise( - (resolve: (result: IteratorResult) => void) => { + const promise: Promise> = new Promise( + (resolve: (result: IteratorResult) => void) => { waitingIterators.push(resolve); } ); @@ -49,6 +68,17 @@ export class AsyncOperationQueue return promise; } + /** + * Set a callback to be invoked when one operation is completed. + * If all operations are completed, set the queue to done, resolve all pending iterators in next cycle. + */ + public complete(record: OperationExecutionRecord): void { + this._completedOperations.add(record); + if (this._completedOperations.size === this._totalOperations) { + this._isDone = true; + } + } + /** * Routes ready operations with 0 dependencies to waiting iterators. Normally invoked as part of `next()`, but * if the caller does not update operation dependencies prior to calling `next()`, may need to be invoked manually. @@ -60,16 +90,35 @@ export class AsyncOperationQueue for (let i: number = queue.length - 1; waitingIterators.length > 0 && i >= 0; i--) { const operation: OperationExecutionRecord = queue[i]; - if (operation.status === OperationStatus.Blocked) { + if ( + operation.status === OperationStatus.Blocked || + operation.status === OperationStatus.Skipped || + operation.status === OperationStatus.Success || + operation.status === OperationStatus.SuccessWithWarning || + operation.status === OperationStatus.FromCache || + operation.status === OperationStatus.NoOp || + operation.status === OperationStatus.Failure + ) { // It shouldn't be on the queue, remove it queue.splice(i, 1); + } else if ( + operation.status === OperationStatus.Queued || + operation.status === OperationStatus.Executing + ) { + // This operation is currently executing + // next one plz :) + continue; + } else if (operation.status === OperationStatus.RemoteExecuting) { + // This operation is not ready to execute yet, but it may become ready later + // next one plz :) + continue; } else if (operation.status !== OperationStatus.Ready) { // Sanity check throw new Error(`Unexpected status "${operation.status}" for queued operation: ${operation.name}`); } else if (operation.dependencies.size === 0) { // This task is ready to process, hand it to the iterator. - queue.splice(i, 1); // Needs to have queue semantics, otherwise tools that iterate it get confused + operation.status = OperationStatus.Queued; waitingIterators.shift()!({ value: operation, done: false @@ -78,22 +127,51 @@ export class AsyncOperationQueue // Otherwise operation is still waiting } + // Since items only get removed from the queue when they have a final status, this should be safe. if (queue.length === 0) { - // Queue is empty, flush + this._isDone = true; + } + + if (this._isDone) { for (const resolveAsyncIterator of waitingIterators.splice(0)) { resolveAsyncIterator({ value: undefined, done: true }); } + return; + } + + if (waitingIterators.length > 0) { + // returns an unassigned operation to let caller decide when there is at least one + // remote executing operation which is not ready to process. + if (queue.some((operation) => operation.status === OperationStatus.RemoteExecuting)) { + waitingIterators.shift()!({ + value: UNASSIGNED_OPERATION, + done: false + }); + } + } + } + + public tryGetRemoteExecutingOperation(): OperationExecutionRecord | undefined { + const { _queue: queue } = this; + // cycle through the queue to find the next operation that is executed remotely + for (let i: number = queue.length - 1; i >= 0; i--) { + const operation: OperationExecutionRecord = queue[i]; + + if (operation.status === OperationStatus.RemoteExecuting) { + return operation; + } } + return undefined; } /** * Returns this queue as an async iterator, such that multiple functions iterating this object concurrently * receive distinct iteration results. */ - public [Symbol.asyncIterator](): AsyncIterator { + public [Symbol.asyncIterator](): AsyncIterator { return this; } } diff --git a/libraries/rush-lib/src/logic/operations/CacheableOperationPlugin.ts b/libraries/rush-lib/src/logic/operations/CacheableOperationPlugin.ts new file mode 100644 index 00000000000..8f513b11744 --- /dev/null +++ b/libraries/rush-lib/src/logic/operations/CacheableOperationPlugin.ts @@ -0,0 +1,930 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import * as crypto from 'crypto'; +import { Async, InternalError, ITerminal, NewlineKind, Sort, Terminal } from '@rushstack/node-core-library'; +import { CollatedTerminal, CollatedWriter } from '@rushstack/stream-collator'; +import { DiscardStdoutTransform, TextRewriterTransform } from '@rushstack/terminal'; +import { SplitterTransform, TerminalWritable } from '@rushstack/terminal'; + +import { CollatedTerminalProvider } from '../../utilities/CollatedTerminalProvider'; +import { OperationStatus } from './OperationStatus'; +import { CobuildLock, ICobuildCompletedState } from '../cobuild/CobuildLock'; +import { ProjectBuildCache } from '../buildCache/ProjectBuildCache'; +import { RushConstants } from '../RushConstants'; +import { IOperationSettings, RushProjectConfiguration } from '../../api/RushProjectConfiguration'; +import { getHashesForGlobsAsync } from '../buildCache/getHashesForGlobsAsync'; +import { ProjectLogWritable } from './ProjectLogWritable'; +import { CobuildConfiguration } from '../../api/CobuildConfiguration'; +import { DisjointSet } from '../cobuild/DisjointSet'; +import { PeriodicCallback } from './PeriodicCallback'; +import { NullTerminalProvider } from '../../utilities/NullTerminalProvider'; + +import { Operation } from './Operation'; +import type { IOperationRunnerContext } from './IOperationRunner'; +import type { RushConfigurationProject } from '../../api/RushConfigurationProject'; +import type { + ICreateOperationsContext, + IPhasedCommandPlugin, + PhasedCommandHooks +} from '../../pluginFramework/PhasedCommandHooks'; +import type { IPhase } from '../../api/CommandLineConfiguration'; +import type { IRawRepoState, ProjectChangeAnalyzer } from '../ProjectChangeAnalyzer'; +import type { OperationMetadataManager } from './OperationMetadataManager'; +import type { BuildCacheConfiguration } from '../../api/BuildCacheConfiguration'; +import type { IOperationExecutionResult } from './IOperationExecutionResult'; +import type { OperationExecutionRecord } from './OperationExecutionRecord'; + +const PLUGIN_NAME: 'CacheablePhasedOperationPlugin' = 'CacheablePhasedOperationPlugin'; +const PERIODIC_CALLBACK_INTERVAL_IN_SECONDS: number = 10; + +export interface IProjectDeps { + files: { [filePath: string]: string }; + arguments: string; +} + +export interface IOperationBuildCacheContext { + isCacheWriteAllowed: boolean; + isCacheReadAllowed: boolean; + + projectBuildCache: ProjectBuildCache | undefined; + cacheDisabledReason: string | undefined; + operationSettings: IOperationSettings | undefined; + + cobuildLock: CobuildLock | undefined; + + // The id of the cluster contains the operation, used when acquiring cobuild lock + cobuildClusterId: string | undefined; + + // Controls the log for the cache subsystem + buildCacheTerminal: ITerminal | undefined; + buildCacheProjectLogWritable: ProjectLogWritable | undefined; + + periodicCallback: PeriodicCallback; + cacheRestored: boolean; + isCacheReadAttempted: boolean; +} + +export interface ICacheableOperationPluginOptions { + allowWarningsInSuccessfulBuild: boolean; + buildCacheConfiguration: BuildCacheConfiguration; + cobuildConfiguration: CobuildConfiguration | undefined; + terminal: ITerminal; +} + +export class CacheableOperationPlugin implements IPhasedCommandPlugin { + private _buildCacheContextByOperation: Map = new Map(); + + private _createContext: ICreateOperationsContext | undefined; + + private readonly _options: ICacheableOperationPluginOptions; + + public constructor(options: ICacheableOperationPluginOptions) { + this._options = options; + } + + public apply(hooks: PhasedCommandHooks): void { + const { allowWarningsInSuccessfulBuild, buildCacheConfiguration, cobuildConfiguration, terminal } = + this._options; + + hooks.beforeExecuteOperations.tapPromise( + PLUGIN_NAME, + async ( + recordByOperation: Map, + context: ICreateOperationsContext + ): Promise => { + const { isIncrementalBuildAllowed, projectChangeAnalyzer, projectConfigurations } = context; + + this._createContext = context; + + const disjointSet: DisjointSet | undefined = cobuildConfiguration?.cobuildFeatureEnabled + ? new DisjointSet() + : undefined; + + await Async.forEachAsync( + recordByOperation.keys(), + async (operation: Operation) => { + const { associatedProject, associatedPhase, runner } = operation; + if (!associatedProject || !associatedPhase || !runner) { + return; + } + + const { name: phaseName } = associatedPhase; + + const projectConfiguration: RushProjectConfiguration | undefined = + projectConfigurations.get(associatedProject); + + // This value can *currently* be cached per-project, but in the future the list of files will vary + // depending on the selected phase. + const fileHashes: Map | undefined = + await projectChangeAnalyzer._tryGetProjectDependenciesAsync(associatedProject, terminal); + + if (!fileHashes) { + throw new Error( + `Build cache is only supported if running in a Git repository. Either disable the build cache or run Rush in a Git repository.` + ); + } + + const operationSettings: IOperationSettings | undefined = + projectConfiguration?.operationSettingsByOperationName.get(phaseName); + const cacheDisabledReason: string | undefined = projectConfiguration + ? projectConfiguration.getCacheDisabledReason(fileHashes.keys(), phaseName) + : `Project does not have a ${RushConstants.rushProjectConfigFilename} configuration file, ` + + 'or one provided by a rig, so it does not support caching.'; + + disjointSet?.add(operation); + + const buildCacheContext: IOperationBuildCacheContext = { + // Supports cache writes by default. + isCacheWriteAllowed: true, + isCacheReadAllowed: isIncrementalBuildAllowed, + projectBuildCache: undefined, + operationSettings, + cacheDisabledReason, + cobuildLock: undefined, + cobuildClusterId: undefined, + buildCacheTerminal: undefined, + buildCacheProjectLogWritable: undefined, + periodicCallback: new PeriodicCallback({ + interval: PERIODIC_CALLBACK_INTERVAL_IN_SECONDS * 1000 + }), + cacheRestored: false, + isCacheReadAttempted: false + }; + // Upstream runners may mutate the property of build cache context for downstream runners + this._buildCacheContextByOperation.set(operation, buildCacheContext); + }, + { + concurrency: 10 + } + ); + + if (disjointSet) { + // If disjoint set exists, connect build cache disabled project with its consumers + for (const [operation, { cacheDisabledReason }] of this._buildCacheContextByOperation) { + const { associatedProject: project, associatedPhase: phase } = operation; + if (project && phase) { + if (cacheDisabledReason) { + /** + * Group the project build cache disabled with its consumers. This won't affect too much in + * a monorepo with high build cache coverage. + * + * The mental model is that if X disables the cache, and Y depends on X, then: + * 1. Y must be built by the same VM that build X; + * 2. OR, Y must be rebuilt on each VM that needs it. + * Approach 1 is probably the better choice. + */ + for (const consumer of operation.consumers) { + disjointSet?.union(operation, consumer); + } + } + } + } + + for (const operationSet of disjointSet.getAllSets()) { + if (cobuildConfiguration?.cobuildFeatureEnabled && cobuildConfiguration.cobuildContextId) { + // Get a deterministic ordered array of operations, which is important to get a deterministic cluster id. + const groupedOperations: Operation[] = Array.from(operationSet); + Sort.sortBy(groupedOperations, (operation: Operation) => { + return operation.name; + }); + + // Generates cluster id, cluster id comes from the project folder and phase name of all operations in the same cluster. + const hash: crypto.Hash = crypto.createHash('sha1'); + for (const operation of groupedOperations) { + const { associatedPhase: phase, associatedProject: project } = operation; + if (project && phase) { + hash.update(project.projectRelativeFolder); + hash.update(RushConstants.hashDelimiter); + hash.update(phase.name); + hash.update(RushConstants.hashDelimiter); + } + } + const cobuildClusterId: string = hash.digest('hex'); + + // Assign same cluster id to all operations in the same cluster. + for (const record of groupedOperations) { + const buildCacheContext: IOperationBuildCacheContext = + this._getBuildCacheContextByOperationOrThrow(record); + buildCacheContext.cobuildClusterId = cobuildClusterId; + } + } + } + } + } + ); + + hooks.beforeExecuteOperation.tapPromise( + PLUGIN_NAME, + async ( + runnerContext: IOperationRunnerContext & IOperationExecutionResult + ): Promise => { + const { _createContext: createContext } = this; + if (!createContext) { + return; + } + + const buildCacheContext: IOperationBuildCacheContext | undefined = + this._getBuildCacheContextByOperation(runnerContext.operation); + + if (!buildCacheContext) { + return; + } + + const { projectChangeAnalyzer, phaseSelection: selectedPhases } = createContext; + + const record: OperationExecutionRecord = runnerContext as OperationExecutionRecord; + const { + associatedProject: project, + associatedPhase: phase, + runner, + _operationMetadataManager: operationMetadataManager + } = record; + + if (!project || !phase || !runner?.cacheable) { + return; + } + + const runBeforeExecute = async ({ + projectChangeAnalyzer, + buildCacheConfiguration, + cobuildConfiguration, + selectedPhases, + project, + phase, + operationMetadataManager, + buildCacheContext, + record + }: { + projectChangeAnalyzer: ProjectChangeAnalyzer; + buildCacheConfiguration: BuildCacheConfiguration | undefined; + cobuildConfiguration: CobuildConfiguration | undefined; + selectedPhases: ReadonlySet; + project: RushConfigurationProject; + phase: IPhase; + operationMetadataManager: OperationMetadataManager | undefined; + buildCacheContext: IOperationBuildCacheContext; + record: OperationExecutionRecord; + }): Promise => { + const buildCacheTerminal: ITerminal = this._getBuildCacheTerminal({ + record, + buildCacheContext, + buildCacheEnabled: buildCacheConfiguration?.buildCacheEnabled, + rushProject: project, + logFilenameIdentifier: phase.logFilenameIdentifier, + quietMode: record.quietMode, + debugMode: record.debugMode + }); + buildCacheContext.buildCacheTerminal = buildCacheTerminal; + + const configHash: string = record.runner.getConfigHash() || ''; + + let projectBuildCache: ProjectBuildCache | undefined = await this._tryGetProjectBuildCacheAsync({ + buildCacheContext, + buildCacheConfiguration, + rushProject: project, + phase, + projectChangeAnalyzer, + configHash, + terminal: buildCacheTerminal, + operationMetadataManager + }); + + // Try to acquire the cobuild lock + let cobuildLock: CobuildLock | undefined; + if (cobuildConfiguration?.cobuildFeatureEnabled) { + if ( + cobuildConfiguration?.cobuildLeafProjectLogOnlyAllowed && + record.operation.consumers.size === 0 && + !projectBuildCache + ) { + // When the leaf project log only is allowed and the leaf project is build cache "disabled", try to get + // a log files only project build cache + projectBuildCache = await this._tryGetLogOnlyProjectBuildCacheAsync({ + buildCacheConfiguration, + cobuildConfiguration, + buildCacheContext, + rushProject: project, + phase, + projectChangeAnalyzer, + configHash, + terminal: buildCacheTerminal, + operationMetadataManager + }); + if (projectBuildCache) { + buildCacheTerminal.writeVerboseLine( + `Log files only build cache is enabled for the project "${project.packageName}" because the cobuild leaf project log only is allowed` + ); + } else { + buildCacheTerminal.writeWarningLine( + `Failed to get log files only build cache for the project "${project.packageName}"` + ); + } + } + + cobuildLock = await this._tryGetCobuildLockAsync({ + buildCacheContext, + projectBuildCache, + cobuildConfiguration, + packageName: project.packageName, + phaseName: phase.name + }); + } + + // eslint-disable-next-line require-atomic-updates -- we are mutating the build cache context intentionally + buildCacheContext.cobuildLock = cobuildLock; + + // If possible, we want to skip this operation -- either by restoring it from the + // cache, if caching is enabled, or determining that the project + // is unchanged (using the older incremental execution logic). These two approaches, + // "caching" and "skipping", are incompatible, so only one applies. + // + // Note that "caching" and "skipping" take two different approaches + // to tracking dependents: + // + // - For caching, "isCacheReadAllowed" is set if a project supports + // incremental builds, and determining whether this project or a dependent + // has changed happens inside the hashing logic. + // + + const { logPath, errorLogPath } = ProjectLogWritable.getLogFilePaths({ + project, + logFilenameIdentifier: phase.logFilenameIdentifier + }); + const restoreCacheAsync = async ( + projectBuildCache: ProjectBuildCache | undefined, + specifiedCacheId?: string + ): Promise => { + buildCacheContext.isCacheReadAttempted = true; + const restoreFromCacheSuccess: boolean | undefined = + await projectBuildCache?.tryRestoreFromCacheAsync(buildCacheTerminal, specifiedCacheId); + if (restoreFromCacheSuccess) { + buildCacheContext.cacheRestored = true; + // Restore the original state of the operation without cache + await operationMetadataManager?.tryRestoreAsync({ + terminal: buildCacheTerminal, + logPath, + errorLogPath + }); + } + return !!restoreFromCacheSuccess; + }; + if (cobuildLock) { + // handling rebuilds. "rush rebuild" or "rush retest" command will save operations to + // the build cache once completed, but does not retrieve them (since the "incremental" + // flag is disabled). However, we still need a cobuild to be able to retrieve a finished + // build from another cobuild in this case. + const cobuildCompletedState: ICobuildCompletedState | undefined = + await cobuildLock.getCompletedStateAsync(); + if (cobuildCompletedState) { + const { status, cacheId } = cobuildCompletedState; + + const restoreFromCacheSuccess: boolean = await restoreCacheAsync( + cobuildLock.projectBuildCache, + cacheId + ); + + if (restoreFromCacheSuccess) { + if (cobuildCompletedState) { + return cobuildCompletedState.status; + } + return status; + } + } else if (!buildCacheContext.isCacheReadAttempted && buildCacheContext.isCacheReadAllowed) { + const restoreFromCacheSuccess: boolean = await restoreCacheAsync(projectBuildCache); + + if (restoreFromCacheSuccess) { + return OperationStatus.FromCache; + } + } + } else if (buildCacheContext.isCacheReadAllowed) { + const restoreFromCacheSuccess: boolean = await restoreCacheAsync(projectBuildCache); + + if (restoreFromCacheSuccess) { + return OperationStatus.FromCache; + } + } + + if (buildCacheContext.isCacheWriteAllowed && cobuildLock) { + const acquireSuccess: boolean = await cobuildLock.tryAcquireLockAsync(); + if (acquireSuccess) { + const { periodicCallback } = buildCacheContext; + periodicCallback.addCallback(async () => { + await cobuildLock?.renewLockAsync(); + }); + periodicCallback.start(); + } else { + // failed to acquire the lock, mark current operation to remote executing + return OperationStatus.RemoteExecuting; + } + } + }; + + try { + const earlyReturnStatus: OperationStatus | undefined = await runBeforeExecute({ + projectChangeAnalyzer, + buildCacheConfiguration, + cobuildConfiguration, + selectedPhases, + project, + phase, + operationMetadataManager, + buildCacheContext, + record + }); + return earlyReturnStatus; + } catch (e) { + buildCacheContext.buildCacheProjectLogWritable?.close(); + throw e; + } + } + ); + + hooks.afterExecuteOperation.tapPromise( + PLUGIN_NAME, + async (runnerContext: IOperationRunnerContext): Promise => { + const record: OperationExecutionRecord = runnerContext as OperationExecutionRecord; + const { status, stopwatch, _operationMetadataManager: operationMetadataManager, operation } = record; + + const { associatedProject: project, associatedPhase: phase, runner } = operation; + + if (!project || !phase || !runner?.cacheable) { + return; + } + + const buildCacheContext: IOperationBuildCacheContext | undefined = + this._getBuildCacheContextByOperation(operation); + + if (!buildCacheContext) { + return; + } + + // No need to run for the following operation status + switch (record.status) { + case OperationStatus.NoOp: + case OperationStatus.RemoteExecuting: { + return; + } + default: { + break; + } + } + + const { cobuildLock, projectBuildCache, isCacheWriteAllowed, buildCacheTerminal, cacheRestored } = + buildCacheContext; + + try { + if (!cacheRestored) { + // Save the metadata to disk + const { logFilenameIdentifier } = phase; + const { duration: durationInSeconds } = stopwatch; + const { logPath, errorLogPath } = ProjectLogWritable.getLogFilePaths({ + project, + logFilenameIdentifier + }); + await operationMetadataManager?.saveAsync({ + durationInSeconds, + cobuildContextId: cobuildLock?.cobuildConfiguration.cobuildContextId, + cobuildRunnerId: cobuildLock?.cobuildConfiguration.cobuildRunnerId, + logPath, + errorLogPath + }); + } + + if (!buildCacheTerminal) { + // This should not happen + throw new InternalError(`Build Cache Terminal is not created`); + } + + let setCompletedStatePromiseFunction: (() => Promise | undefined) | undefined; + let setCacheEntryPromise: (() => Promise | undefined) | undefined; + if (cobuildLock && isCacheWriteAllowed) { + const { cacheId, contextId } = cobuildLock.cobuildContext; + + const finalCacheId: string = + status === OperationStatus.Failure ? `${cacheId}-${contextId}-failed` : cacheId; + switch (status) { + case OperationStatus.SuccessWithWarning: + case OperationStatus.Success: + case OperationStatus.Failure: { + const currentStatus: ICobuildCompletedState['status'] = status; + setCompletedStatePromiseFunction = () => { + return cobuildLock?.setCompletedStateAsync({ + status: currentStatus, + cacheId: finalCacheId + }); + }; + setCacheEntryPromise = () => + cobuildLock.projectBuildCache.trySetCacheEntryAsync(buildCacheTerminal, finalCacheId); + } + } + } + + const taskIsSuccessful: boolean = + status === OperationStatus.Success || + (status === OperationStatus.SuccessWithWarning && + record.runner.warningsAreAllowed && + allowWarningsInSuccessfulBuild); + + // If the command is successful, we can calculate project hash, and no dependencies were skipped, + // write a new cache entry. + if (!setCacheEntryPromise && taskIsSuccessful && isCacheWriteAllowed && projectBuildCache) { + setCacheEntryPromise = () => projectBuildCache.trySetCacheEntryAsync(buildCacheTerminal); + } + if (!cacheRestored) { + const cacheWriteSuccess: boolean | undefined = await setCacheEntryPromise?.(); + await setCompletedStatePromiseFunction?.(); + + if (cacheWriteSuccess === false && status === OperationStatus.Success) { + record.status = OperationStatus.SuccessWithWarning; + } + } + } finally { + buildCacheContext.buildCacheProjectLogWritable?.close(); + buildCacheContext.periodicCallback.stop(); + } + } + ); + + hooks.afterExecuteOperation.tap( + PLUGIN_NAME, + (record: IOperationRunnerContext & IOperationExecutionResult): void => { + const { operation } = record; + const buildCacheContext: IOperationBuildCacheContext | undefined = + this._buildCacheContextByOperation.get(operation); + // Status changes to direct dependents + let blockCacheWrite: boolean = !buildCacheContext?.isCacheWriteAllowed; + + switch (record.status) { + case OperationStatus.Skipped: { + // Skipping means cannot guarantee integrity, so prevent cache writes in dependents. + blockCacheWrite = true; + break; + } + } + + // Apply status changes to direct dependents + if (blockCacheWrite) { + for (const consumer of operation.consumers) { + const consumerBuildCacheContext: IOperationBuildCacheContext | undefined = + this._getBuildCacheContextByOperation(consumer); + if (consumerBuildCacheContext) { + consumerBuildCacheContext.isCacheWriteAllowed = false; + } + } + } + } + ); + + hooks.afterExecuteOperations.tapPromise(PLUGIN_NAME, async () => { + this._buildCacheContextByOperation.clear(); + }); + } + + private _getBuildCacheContextByOperation(operation: Operation): IOperationBuildCacheContext | undefined { + const buildCacheContext: IOperationBuildCacheContext | undefined = + this._buildCacheContextByOperation.get(operation); + return buildCacheContext; + } + + private _getBuildCacheContextByOperationOrThrow(operation: Operation): IOperationBuildCacheContext { + const buildCacheContext: IOperationBuildCacheContext | undefined = + this._getBuildCacheContextByOperation(operation); + if (!buildCacheContext) { + // This should not happen + throw new InternalError(`Build cache context for operation ${operation.name} should be defined`); + } + return buildCacheContext; + } + + private async _tryGetProjectBuildCacheAsync({ + buildCacheConfiguration, + buildCacheContext, + rushProject, + phase, + projectChangeAnalyzer, + configHash, + terminal, + operationMetadataManager + }: { + buildCacheContext: IOperationBuildCacheContext; + buildCacheConfiguration: BuildCacheConfiguration | undefined; + rushProject: RushConfigurationProject; + phase: IPhase; + projectChangeAnalyzer: ProjectChangeAnalyzer; + configHash: string; + terminal: ITerminal; + operationMetadataManager: OperationMetadataManager | undefined; + }): Promise { + if (!buildCacheContext.projectBuildCache) { + const { cacheDisabledReason } = buildCacheContext; + if (cacheDisabledReason) { + terminal.writeVerboseLine(cacheDisabledReason); + return; + } + + const { operationSettings } = buildCacheContext; + if (!operationSettings || !buildCacheConfiguration) { + // Unreachable, since this will have set `cacheDisabledReason`. + return; + } + + const projectOutputFolderNames: ReadonlyArray = operationSettings.outputFolderNames || []; + const additionalProjectOutputFilePaths: ReadonlyArray = + operationMetadataManager?.relativeFilepaths || []; + const additionalContext: Record = {}; + + await updateAdditionalContextAsync({ + operationSettings, + additionalContext, + projectChangeAnalyzer, + terminal, + rushProject + }); + + // eslint-disable-next-line require-atomic-updates -- This is guaranteed to not be concurrent + buildCacheContext.projectBuildCache = await ProjectBuildCache.tryGetProjectBuildCache({ + project: rushProject, + projectOutputFolderNames, + additionalProjectOutputFilePaths, + additionalContext, + buildCacheConfiguration, + terminal, + configHash, + projectChangeAnalyzer, + phaseName: phase.name + }); + } + + return buildCacheContext.projectBuildCache; + } + + // Get a ProjectBuildCache only cache/restore log files + private async _tryGetLogOnlyProjectBuildCacheAsync({ + buildCacheContext, + rushProject, + terminal, + configHash, + buildCacheConfiguration, + cobuildConfiguration, + phase, + projectChangeAnalyzer, + operationMetadataManager + }: { + buildCacheContext: IOperationBuildCacheContext; + buildCacheConfiguration: BuildCacheConfiguration | undefined; + cobuildConfiguration: CobuildConfiguration; + rushProject: RushConfigurationProject; + phase: IPhase; + configHash: string; + terminal: ITerminal; + projectChangeAnalyzer: ProjectChangeAnalyzer; + operationMetadataManager: OperationMetadataManager | undefined; + }): Promise { + if (!buildCacheConfiguration?.buildCacheEnabled) { + return; + } + + const { operationSettings } = buildCacheContext; + + const projectOutputFolderNames: ReadonlyArray = operationSettings?.outputFolderNames ?? []; + const additionalProjectOutputFilePaths: ReadonlyArray = + operationMetadataManager?.relativeFilepaths || []; + const additionalContext: Record = { + // Force the cache to be a log files only cache + logFilesOnly: '1' + }; + if (cobuildConfiguration.cobuildContextId) { + additionalContext.cobuildContextId = cobuildConfiguration.cobuildContextId; + } + + if (operationSettings) { + await updateAdditionalContextAsync({ + operationSettings, + additionalContext, + projectChangeAnalyzer, + terminal, + rushProject + }); + } + + const projectBuildCache: ProjectBuildCache | undefined = await ProjectBuildCache.tryGetProjectBuildCache({ + project: rushProject, + projectOutputFolderNames, + additionalProjectOutputFilePaths, + additionalContext, + buildCacheConfiguration, + terminal, + configHash, + projectChangeAnalyzer, + phaseName: phase.name + }); + + // eslint-disable-next-line require-atomic-updates -- This is guaranteed to not be concurrent + buildCacheContext.projectBuildCache = projectBuildCache; + + return projectBuildCache; + } + + private async _tryGetCobuildLockAsync({ + cobuildConfiguration, + buildCacheContext, + projectBuildCache, + packageName, + phaseName + }: { + cobuildConfiguration: CobuildConfiguration | undefined; + buildCacheContext: IOperationBuildCacheContext; + projectBuildCache: ProjectBuildCache | undefined; + packageName: string; + phaseName: string; + }): Promise { + if (!buildCacheContext.cobuildLock) { + if (projectBuildCache && cobuildConfiguration?.cobuildFeatureEnabled) { + if (!buildCacheContext.cobuildClusterId) { + // This should not happen + throw new InternalError('Cobuild cluster id is not defined'); + } + buildCacheContext.cobuildLock = new CobuildLock({ + cobuildConfiguration, + projectBuildCache, + cobuildClusterId: buildCacheContext.cobuildClusterId, + lockExpireTimeInSeconds: PERIODIC_CALLBACK_INTERVAL_IN_SECONDS * 3, + packageName, + phaseName + }); + } + } + return buildCacheContext.cobuildLock; + } + + private _getBuildCacheTerminal({ + record, + buildCacheContext, + buildCacheEnabled: buildCacheEnabled, + rushProject, + logFilenameIdentifier, + quietMode, + debugMode + }: { + record: OperationExecutionRecord; + buildCacheContext: IOperationBuildCacheContext; + buildCacheEnabled: boolean | undefined; + rushProject: RushConfigurationProject; + logFilenameIdentifier: string; + quietMode: boolean; + debugMode: boolean; + }): ITerminal { + if ( + !buildCacheContext.buildCacheTerminal || + buildCacheContext.buildCacheProjectLogWritable?.isOpen === false + ) { + // The ProjectLogWritable is does not exist or is closed, re-create one + buildCacheContext.buildCacheTerminal = this._createBuildCacheTerminal({ + record, + buildCacheContext, + buildCacheEnabled, + rushProject, + logFilenameIdentifier, + quietMode, + debugMode + }); + } + + return buildCacheContext.buildCacheTerminal; + } + + private _createBuildCacheTerminal({ + record, + buildCacheContext, + buildCacheEnabled, + rushProject, + logFilenameIdentifier, + quietMode, + debugMode + }: { + record: OperationExecutionRecord; + buildCacheContext: IOperationBuildCacheContext; + buildCacheEnabled: boolean | undefined; + rushProject: RushConfigurationProject; + logFilenameIdentifier: string; + quietMode: boolean; + debugMode: boolean; + }): ITerminal { + const silent: boolean = record.runner.silent; + if (silent) { + const nullTerminalProvider: NullTerminalProvider = new NullTerminalProvider(); + return new Terminal(nullTerminalProvider); + } + + let cacheConsoleWritable: TerminalWritable; + // This creates the writer, only do this if necessary. + const collatedWriter: CollatedWriter = record.collatedWriter; + const cacheProjectLogWritable: ProjectLogWritable | undefined = this._tryGetBuildCacheProjectLogWritable({ + buildCacheContext, + buildCacheEnabled, + rushProject, + collatedTerminal: collatedWriter.terminal, + logFilenameIdentifier + }); + + if (quietMode) { + const discardTransform: DiscardStdoutTransform = new DiscardStdoutTransform({ + destination: collatedWriter + }); + const normalizeNewlineTransform: TextRewriterTransform = new TextRewriterTransform({ + destination: discardTransform, + normalizeNewlines: NewlineKind.Lf, + ensureNewlineAtEnd: true + }); + cacheConsoleWritable = normalizeNewlineTransform; + } else { + cacheConsoleWritable = collatedWriter; + } + + let cacheCollatedTerminal: CollatedTerminal; + if (cacheProjectLogWritable) { + const cacheSplitterTransform: SplitterTransform = new SplitterTransform({ + destinations: [cacheConsoleWritable, cacheProjectLogWritable] + }); + cacheCollatedTerminal = new CollatedTerminal(cacheSplitterTransform); + } else { + cacheCollatedTerminal = new CollatedTerminal(cacheConsoleWritable); + } + + const buildCacheTerminalProvider: CollatedTerminalProvider = new CollatedTerminalProvider( + cacheCollatedTerminal, + { + debugEnabled: debugMode + } + ); + return new Terminal(buildCacheTerminalProvider); + } + + private _tryGetBuildCacheProjectLogWritable({ + buildCacheEnabled, + rushProject, + buildCacheContext, + collatedTerminal, + logFilenameIdentifier + }: { + buildCacheEnabled: boolean | undefined; + rushProject: RushConfigurationProject; + buildCacheContext: IOperationBuildCacheContext; + collatedTerminal: CollatedTerminal; + logFilenameIdentifier: string; + }): ProjectLogWritable | undefined { + // Only open the *.cache.log file(s) if the cache is enabled. + if (!buildCacheEnabled) { + return; + } + + buildCacheContext.buildCacheProjectLogWritable = new ProjectLogWritable( + rushProject, + collatedTerminal, + `${logFilenameIdentifier}.cache` + ); + return buildCacheContext.buildCacheProjectLogWritable; + } +} +async function updateAdditionalContextAsync({ + operationSettings, + additionalContext, + projectChangeAnalyzer, + terminal, + rushProject +}: { + operationSettings: IOperationSettings; + additionalContext: Record; + projectChangeAnalyzer: ProjectChangeAnalyzer; + terminal: ITerminal; + rushProject: RushConfigurationProject; +}): Promise { + if (operationSettings.dependsOnEnvVars) { + for (const varName of operationSettings.dependsOnEnvVars) { + additionalContext['$' + varName] = process.env[varName] || ''; + } + } + + if (operationSettings.dependsOnAdditionalFiles) { + const repoState: IRawRepoState | undefined = await projectChangeAnalyzer._ensureInitializedAsync( + terminal + ); + + const additionalFiles: Map = await getHashesForGlobsAsync( + operationSettings.dependsOnAdditionalFiles, + rushProject.projectFolder, + repoState + ); + + terminal.writeDebugLine( + `Including additional files to calculate build cache hash:\n ${Array.from(additionalFiles.keys()).join( + '\n ' + )} ` + ); + + for (const [filePath, fileHash] of additionalFiles) { + additionalContext['file://' + filePath] = fileHash; + } + } +} diff --git a/libraries/rush-lib/src/logic/operations/ConsoleTimelinePlugin.ts b/libraries/rush-lib/src/logic/operations/ConsoleTimelinePlugin.ts index aff052574b4..27a73a78b5c 100644 --- a/libraries/rush-lib/src/logic/operations/ConsoleTimelinePlugin.ts +++ b/libraries/rush-lib/src/logic/operations/ConsoleTimelinePlugin.ts @@ -12,6 +12,7 @@ import { } from '../../pluginFramework/PhasedCommandHooks'; import { IExecutionResult } from './IOperationExecutionResult'; import { OperationStatus } from './OperationStatus'; +import { CobuildConfiguration } from '../../api/CobuildConfiguration'; const PLUGIN_NAME: 'ConsoleTimelinePlugin' = 'ConsoleTimelinePlugin'; @@ -55,7 +56,11 @@ export class ConsoleTimelinePlugin implements IPhasedCommandPlugin { hooks.afterExecuteOperations.tap( PLUGIN_NAME, (result: IExecutionResult, context: ICreateOperationsContext): void => { - _printTimeline(this._terminal, result); + _printTimeline({ + terminal: this._terminal, + result, + cobuildConfiguration: context.cobuildConfiguration + }); } ); } @@ -71,7 +76,9 @@ const TIMELINE_WIDTH: number = 109; */ const TIMELINE_CHART_SYMBOLS: Record = { [OperationStatus.Ready]: '?', + [OperationStatus.Queued]: '?', [OperationStatus.Executing]: '?', + [OperationStatus.RemoteExecuting]: '?', [OperationStatus.Success]: '#', [OperationStatus.SuccessWithWarning]: '!', [OperationStatus.Failure]: '!', @@ -86,7 +93,9 @@ const TIMELINE_CHART_SYMBOLS: Record = { */ const TIMELINE_CHART_COLORIZER: Record string> = { [OperationStatus.Ready]: colors.yellow, + [OperationStatus.Queued]: colors.yellow, [OperationStatus.Executing]: colors.yellow, + [OperationStatus.RemoteExecuting]: colors.yellow, [OperationStatus.Success]: colors.green, [OperationStatus.SuccessWithWarning]: colors.yellow, [OperationStatus.Failure]: colors.red, @@ -102,12 +111,23 @@ interface ITimelineRecord { durationString: string; name: string; status: OperationStatus; + isExecuteByOtherCobuildRunner: boolean; } + +/** + * @internal + */ +export interface IPrintTimelineParameters { + terminal: ITerminal; + result: IExecutionResult; + cobuildConfiguration: CobuildConfiguration | undefined; +} + /** * Print a more detailed timeline and analysis of CPU usage for the build. * @internal */ -export function _printTimeline(terminal: ITerminal, result: IExecutionResult): void { +export function _printTimeline({ terminal, result, cobuildConfiguration }: IPrintTimelineParameters): void { // // Gather the operation records we'll be displaying. Do some inline max() // finding to reduce the number of times we need to loop through operations. @@ -163,7 +183,10 @@ export function _printTimeline(terminal: ITerminal, result: IExecutionResult): v endTime, durationString, name: operation.name!, - status: operationResult.status + status: operationResult.status, + isExecuteByOtherCobuildRunner: + !!operationResult.cobuildRunnerId && + operationResult.cobuildRunnerId !== cobuildConfiguration?.cobuildRunnerId }); } } @@ -203,7 +226,19 @@ export function _printTimeline(terminal: ITerminal, result: IExecutionResult): v terminal.writeLine(''); terminal.writeLine('='.repeat(maxWidth)); - for (const { startTime, endTime, durationString, name, status } of data) { + let hasCobuildSymbol: boolean = false; + + function getChartSymbol(record: ITimelineRecord): string { + const { isExecuteByOtherCobuildRunner, status } = record; + if (isExecuteByOtherCobuildRunner) { + hasCobuildSymbol = true; + return 'C'; + } + return TIMELINE_CHART_SYMBOLS[status]; + } + + for (const record of data) { + const { startTime, endTime, durationString, name, status } = record; // Track busy CPUs const openCpu: number = getOpenCPU(startTime); busyCpus[openCpu] = endTime; @@ -215,7 +250,7 @@ export function _printTimeline(terminal: ITerminal, result: IExecutionResult): v const chart: string = colors.gray('-'.repeat(startIdx)) + - TIMELINE_CHART_COLORIZER[status](TIMELINE_CHART_SYMBOLS[status].repeat(length)) + + TIMELINE_CHART_COLORIZER[status](getChartSymbol(record).repeat(length)) + colors.gray('-'.repeat(chartWidth - endIdx)); terminal.writeLine( `${colors.cyan(name.padStart(longestNameLength))} ${chart} ${colors.white( @@ -232,19 +267,27 @@ export function _printTimeline(terminal: ITerminal, result: IExecutionResult): v const usedCpus: number = busyCpus.length; - const legend: string[] = ['LEGEND:', ' [#] Success [!] Failed/warnings [%] Skipped/cached/no-op']; + const legend: string[] = [ + 'LEGEND:', + ' [#] Success [!] Failed/warnings [%] Skipped/cached/no-op', + '', + '' + ]; + if (hasCobuildSymbol) { + legend[2] = ' [C] Cobuild'; + } const summary: string[] = [ `Total Work: ${workDuration.toFixed(1)}s`, - `Wall Clock: ${allDurationSeconds.toFixed(1)}s` + `Wall Clock: ${allDurationSeconds.toFixed(1)}s`, + `Max Parallelism Used: ${usedCpus}`, + `Avg Parallelism Used: ${(workDuration / allDurationSeconds).toFixed(1)}` ]; terminal.writeLine(legend[0] + summary[0].padStart(maxWidth - legend[0].length)); terminal.writeLine(legend[1] + summary[1].padStart(maxWidth - legend[1].length)); - terminal.writeLine(`Max Parallelism Used: ${usedCpus}`.padStart(maxWidth)); - terminal.writeLine( - `Avg Parallelism Used: ${(workDuration / allDurationSeconds).toFixed(1)}`.padStart(maxWidth) - ); + terminal.writeLine(legend[2] + summary[2].padStart(maxWidth - legend[2].length)); + terminal.writeLine(legend[3] + summary[3].padStart(maxWidth - legend[3].length)); // // Include time-by-phase, if phases are enabled diff --git a/libraries/rush-lib/src/logic/operations/IOperationExecutionResult.ts b/libraries/rush-lib/src/logic/operations/IOperationExecutionResult.ts index ebb3e892cc2..ea7f4476daa 100644 --- a/libraries/rush-lib/src/logic/operations/IOperationExecutionResult.ts +++ b/libraries/rush-lib/src/logic/operations/IOperationExecutionResult.ts @@ -3,14 +3,18 @@ import type { StdioSummarizer } from '@rushstack/terminal'; import type { OperationStatus } from './OperationStatus'; -import type { IStopwatchResult } from '../../utilities/Stopwatch'; import type { Operation } from './Operation'; +import type { IStopwatchResult } from '../../utilities/Stopwatch'; /** * The `IOperationExecutionResult` interface represents the results of executing an {@link Operation}. * @alpha */ export interface IOperationExecutionResult { + /** + * The operation itself + */ + readonly operation: Operation; /** * The current execution status of an operation. Operations start in the 'ready' state, * but can be 'blocked' if an upstream operation failed. It is 'executing' when @@ -35,6 +39,10 @@ export interface IOperationExecutionResult { * The value indicates the duration of the same operation without cache hit. */ readonly nonCachedDurationMs: number | undefined; + /** + * The id of the runner which actually runs the building process in cobuild mode. + */ + readonly cobuildRunnerId: string | undefined; } /** diff --git a/libraries/rush-lib/src/logic/operations/IOperationRunner.ts b/libraries/rush-lib/src/logic/operations/IOperationRunner.ts index 22062e82b71..c17eed4d3ff 100644 --- a/libraries/rush-lib/src/logic/operations/IOperationRunner.ts +++ b/libraries/rush-lib/src/logic/operations/IOperationRunner.ts @@ -40,6 +40,27 @@ export interface IOperationRunnerContext { * Object used to track elapsed time. */ stopwatch: IStopwatchResult; + /** + * The current execution status of an operation. Operations start in the 'ready' state, + * but can be 'blocked' if an upstream operation failed. It is 'executing' when + * the operation is executing. Once execution is complete, it is either 'success' or + * 'failure'. + */ + status: OperationStatus; + + /** + * Error which occurred while executing this operation, this is stored in case we need + * it later (for example to re-print errors at end of execution). + */ + error?: Error; + + /** + * Normally the incremental build logic will rebuild changed projects as well as + * any projects that directly or indirectly depend on a changed project. + * If true, then the incremental build logic will only rebuild changed projects and + * ignore dependent projects. + */ + readonly changedProjectsOnly: boolean; } /** @@ -56,9 +77,9 @@ export interface IOperationRunner { readonly name: string; /** - * This flag determines if the operation is allowed to be skipped if up to date. + * Whether or not the operation is cacheable. If false, all cache engines will be disabled for this operation. */ - isSkipAllowed: boolean; + cacheable: boolean; /** * Indicates that this runner's duration has meaning. @@ -77,12 +98,12 @@ export interface IOperationRunner { warningsAreAllowed: boolean; /** - * Indicates if the output of this operation may be written to the cache + * Method to be executed for the operation. */ - isCacheWriteAllowed: boolean; + executeAsync(context: IOperationRunnerContext): Promise; /** - * Method to be executed for the operation. + * Return a hash of the configuration that affects the operation. */ - executeAsync(context: IOperationRunnerContext): Promise; + getConfigHash(): string; } diff --git a/libraries/rush-lib/src/logic/operations/LegacySkipPlugin.ts b/libraries/rush-lib/src/logic/operations/LegacySkipPlugin.ts new file mode 100644 index 00000000000..e3ab5eaa36f --- /dev/null +++ b/libraries/rush-lib/src/logic/operations/LegacySkipPlugin.ts @@ -0,0 +1,269 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import path from 'node:path'; + +import { + Async, + ColorValue, + FileSystem, + JsonFile, + type ITerminal, + type JsonObject +} from '@rushstack/node-core-library'; +import { PrintUtilities } from '@rushstack/terminal'; + +import { Operation } from './Operation'; +import { OperationStatus } from './OperationStatus'; +import type { + ICreateOperationsContext, + IPhasedCommandPlugin, + PhasedCommandHooks +} from '../../pluginFramework/PhasedCommandHooks'; +import { IOperationRunnerContext } from './IOperationRunner'; +import { IOperationExecutionResult } from './IOperationExecutionResult'; +import { ProjectChangeAnalyzer } from '../ProjectChangeAnalyzer'; + +const PLUGIN_NAME: 'LegacySkipPlugin' = 'LegacySkipPlugin'; + +function _areShallowEqual(object1: JsonObject, object2: JsonObject): boolean { + for (const n in object1) { + if (!(n in object2) || object1[n] !== object2[n]) { + return false; + } + } + for (const n in object2) { + if (!(n in object1)) { + return false; + } + } + return true; +} + +export interface IProjectDeps { + files: { [filePath: string]: string }; + arguments: string; +} + +interface ILegacySkipRecord { + allowSkip: boolean; + packageDeps: IProjectDeps | undefined; + packageDepsPath: string; +} + +export interface ILegacySkipPluginOptions { + terminal: ITerminal; + changedProjectsOnly: boolean; + isIncrementalBuildAllowed: boolean; +} + +/** + * Core phased command plugin that implements the legacy skip detection logic, used when build cache is disabled. + */ +export class LegacySkipPlugin implements IPhasedCommandPlugin { + private readonly _options: ILegacySkipPluginOptions; + + public constructor(options: ILegacySkipPluginOptions) { + this._options = options; + } + + public apply(hooks: PhasedCommandHooks): void { + const stateMap: WeakMap = new WeakMap(); + + let projectChangeAnalyzer!: ProjectChangeAnalyzer; + + const { terminal, changedProjectsOnly, isIncrementalBuildAllowed } = this._options; + + hooks.createOperations.tap( + PLUGIN_NAME, + (operations: Set, context: ICreateOperationsContext): Set => { + projectChangeAnalyzer = context.projectChangeAnalyzer; + + return operations; + } + ); + + hooks.beforeExecuteOperations.tapPromise( + PLUGIN_NAME, + async (operations: ReadonlyMap): Promise => { + let logGitWarning: boolean = false; + + await Async.forEachAsync(operations.values(), async (record: IOperationExecutionResult) => { + const { operation } = record; + const { associatedProject, associatedPhase, runner } = operation; + if (!associatedProject || !associatedPhase || !runner) { + return; + } + + if (!runner.cacheable) { + stateMap.set(operation, { + allowSkip: true, + packageDeps: undefined, + packageDepsPath: '' + }); + return; + } + + const packageDepsFilename: string = `package-deps_${associatedPhase.logFilenameIdentifier}.json`; + + const packageDepsPath: string = path.join( + associatedProject.projectRushTempFolder, + packageDepsFilename + ); + + let packageDeps: IProjectDeps | undefined; + + try { + const fileHashes: Map | undefined = + await projectChangeAnalyzer._tryGetProjectDependenciesAsync(associatedProject, terminal); + + if (!fileHashes) { + logGitWarning = true; + return; + } + + const files: Record = {}; + for (const [filePath, fileHash] of fileHashes) { + files[filePath] = fileHash; + } + + packageDeps = { + files, + arguments: runner.getConfigHash() + }; + } catch (error) { + // To test this code path: + // Delete a project's ".rush/temp/shrinkwrap-deps.json" then run "rush build --verbose" + terminal.writeLine( + `Unable to calculate incremental state for ${record.operation.name}: ` + + (error as Error).toString() + ); + terminal.writeLine({ + text: 'Rush will proceed without incremental execution and change detection.', + foregroundColor: ColorValue.Cyan + }); + } + + stateMap.set(operation, { + packageDepsPath, + packageDeps, + allowSkip: isIncrementalBuildAllowed + }); + }); + + if (logGitWarning) { + // To test this code path: + // Remove the `.git` folder then run "rush build --verbose" + terminal.writeLine({ + text: PrintUtilities.wrapWords( + 'This workspace does not appear to be tracked by Git. ' + + 'Rush will proceed without incremental execution, caching, and change detection.' + ), + foregroundColor: ColorValue.Cyan + }); + } + } + ); + + hooks.beforeExecuteOperation.tapPromise( + PLUGIN_NAME, + async ( + record: IOperationRunnerContext & IOperationExecutionResult + ): Promise => { + const { operation } = record; + const skipRecord: ILegacySkipRecord | undefined = stateMap.get(operation); + if (!skipRecord) { + // This operation doesn't support skip detection. + return; + } + + if (!operation.runner!.cacheable) { + // This operation doesn't support skip detection. + return; + } + + const { associatedProject } = operation; + + const { packageDepsPath, packageDeps, allowSkip } = skipRecord; + + let lastProjectDeps: IProjectDeps | undefined = undefined; + + try { + const lastDepsContents: string = await FileSystem.readFileAsync(packageDepsPath); + lastProjectDeps = JSON.parse(lastDepsContents); + } catch (e) { + if (!FileSystem.isNotExistError(e)) { + // Warn and ignore - treat failing to load the file as the operation being not built. + // TODO: Update this to be the terminal specific to the operation. + terminal.writeWarningLine( + `Warning: error parsing ${packageDepsPath}: ${e}. Ignoring and treating this operation as not run.` + ); + } + } + + if (allowSkip) { + const isPackageUnchanged: boolean = !!( + lastProjectDeps && + packageDeps && + packageDeps.arguments === lastProjectDeps.arguments && + _areShallowEqual(packageDeps.files, lastProjectDeps.files) + ); + + if (isPackageUnchanged) { + return OperationStatus.Skipped; + } + } + + // TODO: Remove legacyDepsPath with the next major release of Rush + const legacyDepsPath: string = path.join(associatedProject!.projectFolder, 'package-deps.json'); + + await Promise.all([ + // Delete the legacy package-deps.json + FileSystem.deleteFileAsync(legacyDepsPath), + + // If the deps file exists, remove it before starting execution. + FileSystem.deleteFileAsync(packageDepsPath) + ]); + } + ); + + hooks.afterExecuteOperation.tapPromise( + PLUGIN_NAME, + async (record: IOperationRunnerContext & IOperationExecutionResult): Promise => { + const { status, operation } = record; + + const skipRecord: ILegacySkipRecord | undefined = stateMap.get(operation); + if (!skipRecord) { + return; + } + + const blockSkip: boolean = + !skipRecord.allowSkip || + (!changedProjectsOnly && + (status === OperationStatus.Success || status === OperationStatus.SuccessWithWarning)); + if (blockSkip) { + for (const consumer of operation.consumers) { + const consumerSkipRecord: ILegacySkipRecord | undefined = stateMap.get(consumer); + if (consumerSkipRecord) { + consumerSkipRecord.allowSkip = false; + } + } + } + + if (!record.operation.runner!.cacheable) { + // This operation doesn't support skip detection. + return; + } + + const { packageDeps, packageDepsPath } = skipRecord; + + if ((packageDeps && status === OperationStatus.Success) || status === OperationStatus.NoOp) { + // Write deps on success. + await JsonFile.saveAsync(packageDeps, packageDepsPath, { + ensureFolderExists: true + }); + } + } + ); + } +} diff --git a/libraries/rush-lib/src/logic/operations/NullOperationRunner.ts b/libraries/rush-lib/src/logic/operations/NullOperationRunner.ts index 8e3f14fac25..d2b31e56a8c 100644 --- a/libraries/rush-lib/src/logic/operations/NullOperationRunner.ts +++ b/libraries/rush-lib/src/logic/operations/NullOperationRunner.ts @@ -31,10 +31,8 @@ export class NullOperationRunner implements IOperationRunner { // This operation does nothing, so timing is meaningless public readonly reportTiming: boolean = false; public readonly silent: boolean; - // The operation may be skipped; it doesn't do anything anyway - public isSkipAllowed: boolean = true; - // The operation is a no-op, so is cacheable. - public isCacheWriteAllowed: boolean = true; + // The operation is a no-op, so it is faster to not cache it + public cacheable: boolean = false; // Nothing will get logged, no point allowing warnings public readonly warningsAreAllowed: boolean = false; @@ -49,4 +47,8 @@ export class NullOperationRunner implements IOperationRunner { public async executeAsync(context: IOperationRunnerContext): Promise { return this.result; } + + public getConfigHash(): string { + return ''; + } } diff --git a/libraries/rush-lib/src/logic/operations/OperationExecutionManager.ts b/libraries/rush-lib/src/logic/operations/OperationExecutionManager.ts index 4cc9847e9f9..b46dc315caf 100644 --- a/libraries/rush-lib/src/logic/operations/OperationExecutionManager.ts +++ b/libraries/rush-lib/src/logic/operations/OperationExecutionManager.ts @@ -6,7 +6,12 @@ import { TerminalWritable, StdioWritable, TextRewriterTransform } from '@rushsta import { StreamCollator, CollatedTerminal, CollatedWriter } from '@rushstack/stream-collator'; import { NewlineKind, Async } from '@rushstack/node-core-library'; -import { AsyncOperationQueue, IOperationSortFunction } from './AsyncOperationQueue'; +import { + AsyncOperationQueue, + IOperationIteratorResult, + IOperationSortFunction, + UNASSIGNED_OPERATION +} from './AsyncOperationQueue'; import { Operation } from './Operation'; import { OperationStatus } from './OperationStatus'; import { IOperationExecutionRecordContext, OperationExecutionRecord } from './OperationExecutionRecord'; @@ -19,6 +24,8 @@ export interface IOperationExecutionManagerOptions { changedProjectsOnly: boolean; destination?: TerminalWritable; + beforeExecuteOperation?: (operation: OperationExecutionRecord) => Promise; + afterExecuteOperation?: (operation: OperationExecutionRecord) => Promise; onOperationStatusChanged?: (record: OperationExecutionRecord) => void; beforeExecuteOperations?: (records: Map) => Promise; } @@ -28,6 +35,13 @@ export interface IOperationExecutionManagerOptions { */ const ASCII_HEADER_WIDTH: number = 79; +const prioritySort: IOperationSortFunction = ( + a: OperationExecutionRecord, + b: OperationExecutionRecord +): number => { + return a.criticalPathLength! - b.criticalPathLength!; +}; + /** * A class which manages the execution of a set of tasks with interdependencies. * Initially, and at the end of each task execution, all unblocked tasks @@ -47,6 +61,10 @@ export class OperationExecutionManager { private readonly _terminal: CollatedTerminal; + private readonly _beforeExecuteOperation?: ( + operation: OperationExecutionRecord + ) => Promise; + private readonly _afterExecuteOperation?: (operation: OperationExecutionRecord) => Promise; private readonly _onOperationStatusChanged?: (record: OperationExecutionRecord) => void; private readonly _beforeExecuteOperations?: ( records: Map @@ -56,6 +74,7 @@ export class OperationExecutionManager { private _hasAnyFailures: boolean; private _hasAnyNonAllowedWarnings: boolean; private _completedOperations: number; + private _executionQueue: AsyncOperationQueue; public constructor(operations: Set, options: IOperationExecutionManagerOptions) { const { @@ -63,6 +82,8 @@ export class OperationExecutionManager { debugMode, parallelism, changedProjectsOnly, + beforeExecuteOperation, + afterExecuteOperation, onOperationStatusChanged, beforeExecuteOperations } = options; @@ -73,6 +94,8 @@ export class OperationExecutionManager { this._changedProjectsOnly = changedProjectsOnly; this._parallelism = parallelism; + this._beforeExecuteOperation = beforeExecuteOperation; + this._afterExecuteOperation = afterExecuteOperation; this._beforeExecuteOperations = beforeExecuteOperations; this._onOperationStatusChanged = onOperationStatusChanged; @@ -97,7 +120,8 @@ export class OperationExecutionManager { streamCollator: this._streamCollator, onOperationStatusChanged, debugMode, - quietMode + quietMode, + changedProjectsOnly }; let totalOperations: number = 0; @@ -128,6 +152,12 @@ export class OperationExecutionManager { dependencyRecord.consumers.add(consumer); } } + + const executionQueue: AsyncOperationQueue = new AsyncOperationQueue( + this._executionRecords.values(), + prioritySort + ); + this._executionQueue = executionQueue; } private _streamCollator_onWriterActive = (writer: CollatedWriter | undefined): void => { @@ -191,31 +221,60 @@ export class OperationExecutionManager { this._terminal.writeStdoutLine(`Executing a maximum of ${this._parallelism} simultaneous processes...`); const maxParallelism: number = Math.min(totalOperations, this._parallelism); - const prioritySort: IOperationSortFunction = ( - a: OperationExecutionRecord, - b: OperationExecutionRecord - ): number => { - return a.criticalPathLength! - b.criticalPathLength!; - }; - const executionQueue: AsyncOperationQueue = new AsyncOperationQueue( - this._executionRecords.values(), - prioritySort - ); await this._beforeExecuteOperations?.(this._executionRecords); // This function is a callback because it may write to the collatedWriter before // operation.executeAsync returns (and cleans up the writer) - const onOperationComplete: (record: OperationExecutionRecord) => void = ( + const onOperationCompleteAsync: (record: OperationExecutionRecord) => Promise = async ( record: OperationExecutionRecord ) => { + try { + await this._afterExecuteOperation?.(record); + } catch (e) { + // Failed operations get reported here + const message: string | undefined = record.error?.message; + if (message) { + this._terminal.writeStderrLine('Unhandled exception: '); + this._terminal.writeStderrLine(message); + } + throw e; + } this._onOperationComplete(record); }; + const onOperationStartAsync: ( + record: OperationExecutionRecord + ) => Promise = async (record: OperationExecutionRecord) => { + return await this._beforeExecuteOperation?.(record); + }; + await Async.forEachAsync( - executionQueue, - async (operation: OperationExecutionRecord) => { - await operation.executeAsync(onOperationComplete); + this._executionQueue, + async (operation: IOperationIteratorResult) => { + let record: OperationExecutionRecord | undefined; + /** + * If the operation is UNASSIGNED_OPERATION, it means that the queue is not able to assign a operation. + * This happens when some operations run remotely. So, we should try to get a remote executing operation + * from the queue manually here. + */ + if (operation === UNASSIGNED_OPERATION) { + // Pause for a few time + await Async.sleep(5000); + record = this._executionQueue.tryGetRemoteExecutingOperation(); + } else { + record = operation; + } + + if (!record) { + // Fail to assign a operation, start over again + return; + } else { + await record.executeAsync({ + onStart: onOperationStartAsync, + onResult: onOperationCompleteAsync + }); + } }, { concurrency: maxParallelism @@ -240,9 +299,6 @@ export class OperationExecutionManager { private _onOperationComplete(record: OperationExecutionRecord): void { const { runner, name, status } = record; - let blockCacheWrite: boolean = !runner.isCacheWriteAllowed; - let blockSkip: boolean = !runner.isSkipAllowed; - const silent: boolean = runner.silent; switch (status) { @@ -262,6 +318,7 @@ export class OperationExecutionManager { const blockedQueue: Set = new Set(record.consumers); for (const blockedRecord of blockedQueue) { if (blockedRecord.status === OperationStatus.Ready) { + this._executionQueue.complete(blockedRecord); this._completedOperations++; // Now that we have the concept of architectural no-ops, we could implement this by replacing @@ -301,8 +358,6 @@ export class OperationExecutionManager { if (!silent) { record.collatedWriter.terminal.writeStdoutLine(colors.green(`"${name}" was skipped.`)); } - // Skipping means cannot guarantee integrity, so prevent cache writes in dependents. - blockCacheWrite = true; break; } @@ -322,8 +377,6 @@ export class OperationExecutionManager { colors.green(`"${name}" completed successfully in ${record.stopwatch.toString()}.`) ); } - // Legacy incremental build, if asked, prevent skip in dependents if the operation executed. - blockSkip ||= !this._changedProjectsOnly; break; } @@ -333,25 +386,20 @@ export class OperationExecutionManager { colors.yellow(`"${name}" completed with warnings in ${record.stopwatch.toString()}.`) ); } - // Legacy incremental build, if asked, prevent skip in dependents if the operation executed. - blockSkip ||= !this._changedProjectsOnly; this._hasAnyNonAllowedWarnings = this._hasAnyNonAllowedWarnings || !runner.warningsAreAllowed; break; } } - // Apply status changes to direct dependents - for (const item of record.consumers) { - if (blockCacheWrite) { - item.runner.isCacheWriteAllowed = false; - } + if (record.status !== OperationStatus.RemoteExecuting) { + // If the operation was not remote, then we can notify queue that it is complete + this._executionQueue.complete(record); - if (blockSkip) { - item.runner.isSkipAllowed = false; + // Apply status changes to direct dependents + for (const item of record.consumers) { + // Remove this operation from the dependencies, to unblock the scheduler + item.dependencies.delete(record); } - - // Remove this operation from the dependencies, to unblock the scheduler - item.dependencies.delete(record); } } } diff --git a/libraries/rush-lib/src/logic/operations/OperationExecutionRecord.ts b/libraries/rush-lib/src/logic/operations/OperationExecutionRecord.ts index 3c97bbc574a..1d025de4d31 100644 --- a/libraries/rush-lib/src/logic/operations/OperationExecutionRecord.ts +++ b/libraries/rush-lib/src/logic/operations/OperationExecutionRecord.ts @@ -10,6 +10,8 @@ import { IOperationRunner, IOperationRunnerContext } from './IOperationRunner'; import { Operation } from './Operation'; import { Stopwatch } from '../../utilities/Stopwatch'; import { OperationMetadataManager } from './OperationMetadataManager'; +import type { IPhase } from '../../api/CommandLineConfiguration'; +import type { RushConfigurationProject } from '../../api/RushConfigurationProject'; export interface IOperationExecutionRecordContext { streamCollator: StreamCollator; @@ -17,12 +19,20 @@ export interface IOperationExecutionRecordContext { debugMode: boolean; quietMode: boolean; + changedProjectsOnly: boolean; } /** * Internal class representing everything about executing an operation + * + * @internal */ export class OperationExecutionRecord implements IOperationRunnerContext { + /** + * The associated operation. + */ + public readonly operation: Operation; + /** * The current execution status of an operation. Operations start in the 'ready' state, * but can be 'blocked' if an upstream operation failed. It is 'executing' when @@ -47,6 +57,7 @@ export class OperationExecutionRecord implements IOperationRunnerContext { * operation to execute, the operation with the highest criticalPathLength is chosen. * * Example: + * ``` * (0) A * \ * (1) B C (0) (applications) @@ -63,6 +74,7 @@ export class OperationExecutionRecord implements IOperationRunnerContext { * X has a score of 1, since the only package which depends on it is A * Z has a score of 2, since only X depends on it, and X has a score of 1 * Y has a score of 2, since the chain Y->X->C is longer than Y->C + * ``` * * The algorithm is implemented in AsyncOperationQueue.ts as calculateCriticalPathLength() */ @@ -82,6 +94,8 @@ export class OperationExecutionRecord implements IOperationRunnerContext { public readonly runner: IOperationRunner; public readonly weight: number; + public readonly associatedPhase: IPhase | undefined; + public readonly associatedProject: RushConfigurationProject | undefined; public readonly _operationMetadataManager: OperationMetadataManager | undefined; private readonly _context: IOperationExecutionRecordContext; @@ -89,16 +103,19 @@ export class OperationExecutionRecord implements IOperationRunnerContext { private _collatedWriter: CollatedWriter | undefined = undefined; public constructor(operation: Operation, context: IOperationExecutionRecordContext) { - const { runner } = operation; + const { runner, associatedPhase, associatedProject } = operation; if (!runner) { throw new InternalError( - `Operation for phase '${operation.associatedPhase?.name}' and project '${operation.associatedProject?.packageName}' has no runner.` + `Operation for phase '${associatedPhase?.name}' and project '${associatedProject?.packageName}' has no runner.` ); } + this.operation = operation; this.runner = runner; this.weight = operation.weight; + this.associatedPhase = associatedPhase; + this.associatedProject = associatedProject; if (operation.associatedPhase && operation.associatedProject) { this._operationMetadataManager = new OperationMetadataManager({ phase: operation.associatedPhase, @@ -120,6 +137,10 @@ export class OperationExecutionRecord implements IOperationRunnerContext { return this._context.quietMode; } + public get changedProjectsOnly(): boolean { + return this._context.changedProjectsOnly; + } + public get collatedWriter(): CollatedWriter { // Lazy instantiate because the registerTask() call affects display ordering if (!this._collatedWriter) { @@ -133,24 +154,46 @@ export class OperationExecutionRecord implements IOperationRunnerContext { return this._operationMetadataManager?.stateFile.state?.nonCachedDurationMs; } - public async executeAsync(onResult: (record: OperationExecutionRecord) => void): Promise { + public get cobuildRunnerId(): string | undefined { + // Lazy calculated because the state file is created/restored later on + return this._operationMetadataManager?.stateFile.state?.cobuildRunnerId; + } + + public async executeAsync({ + onStart, + onResult + }: { + onStart: (record: OperationExecutionRecord) => Promise; + onResult: (record: OperationExecutionRecord) => Promise; + }): Promise { + if (this.status === OperationStatus.RemoteExecuting) { + this.stopwatch.reset(); + } this.status = OperationStatus.Executing; this.stopwatch.start(); this._context.onOperationStatusChanged?.(this); try { - this.status = await this.runner.executeAsync(this); + const earlyReturnStatus: OperationStatus | undefined = await onStart(this); + // When the operation status returns by the hook, bypass the runner execution. + if (earlyReturnStatus) { + this.status = earlyReturnStatus; + } else { + this.status = await this.runner.executeAsync(this); + } // Delegate global state reporting - onResult(this); + await onResult(this); } catch (error) { this.status = OperationStatus.Failure; this.error = error; // Delegate global state reporting - onResult(this); + await onResult(this); } finally { - this._collatedWriter?.close(); - this.stdioSummarizer.close(); - this.stopwatch.stop(); + if (this.status !== OperationStatus.RemoteExecuting) { + this._collatedWriter?.close(); + this.stdioSummarizer.close(); + this.stopwatch.stop(); + } this._context.onOperationStatusChanged?.(this); } } diff --git a/libraries/rush-lib/src/logic/operations/OperationMetadataManager.ts b/libraries/rush-lib/src/logic/operations/OperationMetadataManager.ts index 90c7caa22ff..1df3df4ee1e 100644 --- a/libraries/rush-lib/src/logic/operations/OperationMetadataManager.ts +++ b/libraries/rush-lib/src/logic/operations/OperationMetadataManager.ts @@ -26,6 +26,8 @@ export interface IOperationMetaData { durationInSeconds: number; logPath: string; errorLogPath: string; + cobuildContextId: string | undefined; + cobuildRunnerId: string | undefined; } /** @@ -70,9 +72,17 @@ export class OperationMetadataManager { return [this.stateFile.relativeFilepath, this._relativeLogPath, this._relativeErrorLogPath]; } - public async saveAsync({ durationInSeconds, logPath, errorLogPath }: IOperationMetaData): Promise { + public async saveAsync({ + durationInSeconds, + cobuildContextId, + cobuildRunnerId, + logPath, + errorLogPath + }: IOperationMetaData): Promise { const state: IOperationStateJson = { - nonCachedDurationMs: durationInSeconds * 1000 + nonCachedDurationMs: durationInSeconds * 1000, + cobuildContextId, + cobuildRunnerId }; await this.stateFile.writeAsync(state); @@ -112,8 +122,9 @@ export class OperationMetadataManager { // Append cached log into current log file terminal.writeLine(`Restoring cached log file at ${this._logPath}`); + let logReadStream: fs.ReadStream | undefined; try { - const logReadStream: fs.ReadStream = fs.createReadStream(this._logPath, { + logReadStream = fs.createReadStream(this._logPath, { encoding: 'utf-8' }); for await (const data of logReadStream) { @@ -123,6 +134,9 @@ export class OperationMetadataManager { if (!FileSystem.isNotExistError(e)) { throw e; } + } finally { + // Clean up the read steam + logReadStream?.close(); } // Try to restore cached error log as error log file diff --git a/libraries/rush-lib/src/logic/operations/OperationStateFile.ts b/libraries/rush-lib/src/logic/operations/OperationStateFile.ts index de8b6ed7321..b05cf70b57f 100644 --- a/libraries/rush-lib/src/logic/operations/OperationStateFile.ts +++ b/libraries/rush-lib/src/logic/operations/OperationStateFile.ts @@ -16,6 +16,8 @@ export interface IOperationStateFileOptions { */ export interface IOperationStateJson { nonCachedDurationMs: number; + cobuildContextId: string | undefined; + cobuildRunnerId: string | undefined; } /** @@ -53,7 +55,7 @@ export class OperationStateFile { } public async writeAsync(json: IOperationStateJson): Promise { - await JsonFile.saveAsync(json, this.filepath, { ensureFolderExists: true, updateExistingFile: true }); + await JsonFile.saveAsync(json, this.filepath, { ensureFolderExists: true, ignoreUndefinedValues: true }); this._state = json; } diff --git a/libraries/rush-lib/src/logic/operations/OperationStatus.ts b/libraries/rush-lib/src/logic/operations/OperationStatus.ts index 3fdff28ba84..38a6955296c 100644 --- a/libraries/rush-lib/src/logic/operations/OperationStatus.ts +++ b/libraries/rush-lib/src/logic/operations/OperationStatus.ts @@ -10,10 +10,18 @@ export enum OperationStatus { * The Operation is on the queue, ready to execute (but may be waiting for dependencies) */ Ready = 'READY', + /** + * The Operation is Queued + */ + Queued = 'QUEUED', /** * The Operation is currently executing */ Executing = 'EXECUTING', + /** + * The Operation is currently executing by a remote process + */ + RemoteExecuting = 'REMOTE EXECUTING', /** * The Operation completed successfully and did not write to standard output */ diff --git a/libraries/rush-lib/src/logic/operations/PeriodicCallback.ts b/libraries/rush-lib/src/logic/operations/PeriodicCallback.ts new file mode 100644 index 00000000000..26aa1814f55 --- /dev/null +++ b/libraries/rush-lib/src/logic/operations/PeriodicCallback.ts @@ -0,0 +1,54 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +export type ICallbackFn = () => Promise | void; + +export interface IPeriodicCallbackOptions { + interval: number; +} + +/** + * A help class to run callbacks in a loop with a specified interval. + * + * @beta + */ +export class PeriodicCallback { + private _callbacks: ICallbackFn[]; + private _interval: number; + private _intervalId: NodeJS.Timeout | undefined; + private _isRunning: boolean; + + public constructor(options: IPeriodicCallbackOptions) { + this._callbacks = []; + this._interval = options.interval; + this._isRunning = false; + } + + public addCallback(callback: ICallbackFn): void { + if (this._isRunning) { + throw new Error('Can not add callback while watcher is running'); + } + this._callbacks.push(callback); + } + + public start(): void { + if (this._intervalId) { + throw new Error('Watcher already started'); + } + if (this._callbacks.length === 0) { + return; + } + this._isRunning = true; + this._intervalId = setInterval(() => { + this._callbacks.forEach((callback) => callback()); + }, this._interval); + } + + public stop(): void { + if (this._intervalId) { + clearInterval(this._intervalId); + this._intervalId = undefined; + this._isRunning = false; + } + } +} diff --git a/libraries/rush-lib/src/logic/operations/ProjectLogWritable.ts b/libraries/rush-lib/src/logic/operations/ProjectLogWritable.ts index adf338a1fbd..0f0591167bb 100644 --- a/libraries/rush-lib/src/logic/operations/ProjectLogWritable.ts +++ b/libraries/rush-lib/src/logic/operations/ProjectLogWritable.ts @@ -30,57 +30,20 @@ export class ProjectLogWritable extends TerminalWritable { this._project = project; this._terminal = terminal; - function getLogFilePaths( - projectFolder: string, - logFilenameIdentifier: string, - logFolder?: string - ): { - logPath: string; - errorLogPath: string; - relativeLogPath: string; - relativeErrorLogPath: string; - } { - const unscopedProjectName: string = PackageNameParsers.permissive.getUnscopedName(project.packageName); - const logFileBaseName: string = `${unscopedProjectName}.${logFilenameIdentifier}`; - const logFilename: string = `${logFileBaseName}.log`; - const errorLogFilename: string = `${logFileBaseName}.error.log`; - - const relativeLogPath: string = logFolder ? `${logFolder}/${logFilename}` : logFilename; - const relativeErrorLogPath: string = logFolder ? `${logFolder}/${errorLogFilename}` : errorLogFilename; - - const logPath: string = `${projectFolder}/${relativeLogPath}`; - const errorLogPath: string = `${projectFolder}/${relativeErrorLogPath}`; - - return { - logPath, - errorLogPath, - relativeLogPath, - relativeErrorLogPath - }; - } - - const projectFolder: string = this._project.projectFolder; // Delete the legacy logs - const { logPath: legacyLogPath, errorLogPath: legacyErrorLogPath } = getLogFilePaths( - projectFolder, - 'build' - ); + const { logPath: legacyLogPath, errorLogPath: legacyErrorLogPath } = ProjectLogWritable.getLogFilePaths({ + project, + logFilenameIdentifier: 'build', + isLegacyLog: true + }); FileSystem.deleteFile(legacyLogPath); FileSystem.deleteFile(legacyErrorLogPath); - // If the phased commands experiment is enabled, put logs under `rush-logs` - let logFolder: string | undefined; - if (project.rushConfiguration.experimentsConfiguration.configuration.phasedCommands) { - const logPathPrefix: string = `${projectFolder}/${RushConstants.rushLogsFolderName}`; - FileSystem.ensureFolder(logPathPrefix); - logFolder = RushConstants.rushLogsFolderName; - } - - const { logPath, errorLogPath, relativeLogPath, relativeErrorLogPath } = getLogFilePaths( - projectFolder, - logFilenameIdentifier, - logFolder - ); + const { logPath, errorLogPath, relativeLogPath, relativeErrorLogPath } = + ProjectLogWritable.getLogFilePaths({ + project, + logFilenameIdentifier + }); this.logPath = logPath; this.errorLogPath = errorLogPath; this.relativeLogPath = relativeLogPath; @@ -97,6 +60,58 @@ export class ProjectLogWritable extends TerminalWritable { this._logWriter = FileWriter.open(this.logPath); } + public static getLogFilePaths({ + project, + logFilenameIdentifier, + isLegacyLog = false + }: { + project: RushConfigurationProject; + logFilenameIdentifier: string; + isLegacyLog?: boolean; + }): { + logPath: string; + errorLogPath: string; + relativeLogPath: string; + relativeErrorLogPath: string; + } { + const unscopedProjectName: string = PackageNameParsers.permissive.getUnscopedName(project.packageName); + const logFileBaseName: string = `${unscopedProjectName}.${logFilenameIdentifier}`; + const logFilename: string = `${logFileBaseName}.log`; + const errorLogFilename: string = `${logFileBaseName}.error.log`; + + const { projectFolder } = project; + + // If the phased commands experiment is enabled, put logs under `rush-logs` + let logFolder: string | undefined; + if (!isLegacyLog && project.rushConfiguration.experimentsConfiguration.configuration.phasedCommands) { + const logPathPrefix: string = `${projectFolder}/${RushConstants.rushLogsFolderName}`; + FileSystem.ensureFolder(logPathPrefix); + logFolder = RushConstants.rushLogsFolderName; + } + + const relativeLogPath: string = logFolder ? `${logFolder}/${logFilename}` : logFilename; + const relativeErrorLogPath: string = logFolder ? `${logFolder}/${errorLogFilename}` : errorLogFilename; + + const logPath: string = `${projectFolder}/${relativeLogPath}`; + const errorLogPath: string = `${projectFolder}/${relativeErrorLogPath}`; + + return { + logPath, + errorLogPath, + relativeLogPath, + relativeErrorLogPath + }; + } + + // Override writeChunk function to throw custom error + public writeChunk(chunk: ITerminalChunk): void { + if (!this._logWriter) { + throw new InternalError(`Log writer was closed for ${this.logPath}`); + } + // Stderr can always get written to a error log writer + super.writeChunk(chunk); + } + protected onWriteChunk(chunk: ITerminalChunk): void { if (!this._logWriter) { throw new InternalError('Output file was closed'); diff --git a/libraries/rush-lib/src/logic/operations/ShellOperationRunner.ts b/libraries/rush-lib/src/logic/operations/ShellOperationRunner.ts index 9a909ae10c7..f51f0af3c03 100644 --- a/libraries/rush-lib/src/logic/operations/ShellOperationRunner.ts +++ b/libraries/rush-lib/src/logic/operations/ShellOperationRunner.ts @@ -2,59 +2,33 @@ // See LICENSE in the project root for license information. import * as child_process from 'child_process'; -import * as path from 'path'; -import { - JsonFile, - Text, - FileSystem, - JsonObject, - NewlineKind, - InternalError, - ITerminal, - Terminal, - ColorValue -} from '@rushstack/node-core-library'; +import { Text, NewlineKind, InternalError, Terminal } from '@rushstack/node-core-library'; import { TerminalChunkKind, TextRewriterTransform, StderrLineTransform, SplitterTransform, - DiscardStdoutTransform, - PrintUtilities + DiscardStdoutTransform } from '@rushstack/terminal'; import { CollatedTerminal } from '@rushstack/stream-collator'; -import type { TerminalWritable } from '@rushstack/terminal'; -import { Utilities, UNINITIALIZED } from '../../utilities/Utilities'; +import { Utilities } from '../../utilities/Utilities'; import { OperationStatus } from './OperationStatus'; import { OperationError } from './OperationError'; import { IOperationRunner, IOperationRunnerContext } from './IOperationRunner'; import { ProjectLogWritable } from './ProjectLogWritable'; -import { ProjectBuildCache } from '../buildCache/ProjectBuildCache'; -import { getHashesForGlobsAsync } from '../buildCache/getHashesForGlobsAsync'; -import { IOperationSettings, RushProjectConfiguration } from '../../api/RushProjectConfiguration'; import { CollatedTerminalProvider } from '../../utilities/CollatedTerminalProvider'; -import { RushConstants } from '../RushConstants'; import { EnvironmentConfiguration } from '../../api/EnvironmentConfiguration'; -import { OperationMetadataManager } from './OperationMetadataManager'; import type { RushConfiguration } from '../../api/RushConfiguration'; import type { RushConfigurationProject } from '../../api/RushConfigurationProject'; -import type { ProjectChangeAnalyzer, IRawRepoState } from '../ProjectChangeAnalyzer'; -import type { BuildCacheConfiguration } from '../../api/BuildCacheConfiguration'; +import type { ProjectChangeAnalyzer } from '../ProjectChangeAnalyzer'; import type { IPhase } from '../../api/CommandLineConfiguration'; -export interface IProjectDeps { - files: { [filePath: string]: string }; - arguments: string; -} - export interface IOperationRunnerOptions { rushProject: RushConfigurationProject; rushConfiguration: RushConfiguration; - buildCacheConfiguration: BuildCacheConfiguration | undefined; commandToRun: string; - isIncrementalBuildAllowed: boolean; projectChangeAnalyzer: ProjectChangeAnalyzer; displayName: string; phase: IPhase; @@ -64,20 +38,6 @@ export interface IOperationRunnerOptions { selectedPhases: Iterable; } -function _areShallowEqual(object1: JsonObject, object2: JsonObject): boolean { - for (const n in object1) { - if (!(n in object2) || object1[n] !== object2[n]) { - return false; - } - } - for (const n in object2) { - if (!(n in object1)) { - return false; - } - } - return true; -} - /** * An `IOperationRunner` subclass that performs an operation via a shell command. * Currently contains the build cache logic, pending extraction as separate operations. @@ -86,49 +46,27 @@ function _areShallowEqual(object1: JsonObject, object2: JsonObject): boolean { export class ShellOperationRunner implements IOperationRunner { public readonly name: string; - // This runner supports cache writes by default. - public isCacheWriteAllowed: boolean = true; - public isSkipAllowed: boolean; public readonly reportTiming: boolean = true; public readonly silent: boolean = false; + public readonly cacheable: boolean = true; public readonly warningsAreAllowed: boolean; - private readonly _rushProject: RushConfigurationProject; - private readonly _phase: IPhase; - private readonly _rushConfiguration: RushConfiguration; - private readonly _buildCacheConfiguration: BuildCacheConfiguration | undefined; - private readonly _commandName: string; private readonly _commandToRun: string; - private readonly _isCacheReadAllowed: boolean; - private readonly _projectChangeAnalyzer: ProjectChangeAnalyzer; - private readonly _packageDepsFilename: string; - private readonly _logFilenameIdentifier: string; - private readonly _selectedPhases: Iterable; - /** - * UNINITIALIZED === we haven't tried to initialize yet - * undefined === we didn't create one because the feature is not enabled - */ - private _projectBuildCache: ProjectBuildCache | undefined | UNINITIALIZED = UNINITIALIZED; + private readonly _logFilenameIdentifier: string; + private readonly _rushProject: RushConfigurationProject; + private readonly _rushConfiguration: RushConfiguration; public constructor(options: IOperationRunnerOptions) { const { phase } = options; this.name = options.displayName; this._rushProject = options.rushProject; - this._phase = phase; this._rushConfiguration = options.rushConfiguration; - this._buildCacheConfiguration = options.buildCacheConfiguration; - this._commandName = phase.name; this._commandToRun = options.commandToRun; - this._isCacheReadAllowed = options.isIncrementalBuildAllowed; - this.isSkipAllowed = options.isIncrementalBuildAllowed; - this._projectChangeAnalyzer = options.projectChangeAnalyzer; - this._packageDepsFilename = `package-deps_${phase.logFilenameIdentifier}.json`; this.warningsAreAllowed = EnvironmentConfiguration.allowWarningsInSuccessfulBuild || phase.allowWarningsOnSuccess || false; this._logFilenameIdentifier = phase.logFilenameIdentifier; - this._selectedPhases = options.selectedPhases; } public async executeAsync(context: IOperationRunnerContext): Promise { @@ -139,17 +77,11 @@ export class ShellOperationRunner implements IOperationRunner { } } - private async _executeAsync(context: IOperationRunnerContext): Promise { - // Only open the *.cache.log file(s) if the cache is enabled. - const cacheProjectLogWritable: ProjectLogWritable | undefined = this._buildCacheConfiguration - ?.buildCacheEnabled - ? new ProjectLogWritable( - this._rushProject, - context.collatedWriter.terminal, - `${this._logFilenameIdentifier}.cache` - ) - : undefined; + public getConfigHash(): string { + return this._commandToRun; + } + private async _executeAsync(context: IOperationRunnerContext): Promise { const projectLogWritable: ProjectLogWritable = new ProjectLogWritable( this._rushProject, context.collatedWriter.terminal, @@ -157,35 +89,6 @@ export class ShellOperationRunner implements IOperationRunner { ); try { - //#region CACHE LOGGING - let cacheConsoleWritable: TerminalWritable; - if (context.quietMode) { - cacheConsoleWritable = new DiscardStdoutTransform({ - destination: context.collatedWriter - }); - } else { - cacheConsoleWritable = context.collatedWriter; - } - - let cacheCollatedTerminal: CollatedTerminal; - if (cacheProjectLogWritable) { - const cacheSplitterTransform: SplitterTransform = new SplitterTransform({ - destinations: [cacheConsoleWritable, cacheProjectLogWritable] - }); - cacheCollatedTerminal = new CollatedTerminal(cacheSplitterTransform); - } else { - cacheCollatedTerminal = new CollatedTerminal(cacheConsoleWritable); - } - - const buildCacheTerminalProvider: CollatedTerminalProvider = new CollatedTerminalProvider( - cacheCollatedTerminal, - { - debugEnabled: context.debugMode - } - ); - const buildCacheTerminal: Terminal = new Terminal(buildCacheTerminalProvider); - //#endregion - //#region OPERATION LOGGING // TERMINAL PIPELINE: // @@ -232,133 +135,6 @@ export class ShellOperationRunner implements IOperationRunner { let hasWarningOrError: boolean = false; const projectFolder: string = this._rushProject.projectFolder; - let lastProjectDeps: IProjectDeps | undefined = undefined; - - const currentDepsPath: string = path.join( - this._rushProject.projectRushTempFolder, - this._packageDepsFilename - ); - - if (FileSystem.exists(currentDepsPath)) { - try { - lastProjectDeps = JsonFile.load(currentDepsPath); - } catch (e) { - // Warn and ignore - treat failing to load the file as the project being not built. - terminal.writeWarningLine( - `Warning: error parsing ${this._packageDepsFilename}: ${e}. Ignoring and ` + - `treating the command "${this._commandToRun}" as not run.` - ); - } - } - - let projectDeps: IProjectDeps | undefined; - let trackedProjectFiles: string[] | undefined; - try { - const fileHashes: Map | undefined = - await this._projectChangeAnalyzer._tryGetProjectDependenciesAsync(this._rushProject, terminal); - - if (fileHashes) { - const files: { [filePath: string]: string } = {}; - trackedProjectFiles = []; - for (const [filePath, fileHash] of fileHashes) { - files[filePath] = fileHash; - trackedProjectFiles.push(filePath); - } - - projectDeps = { - files, - arguments: this._commandToRun - }; - } else if (this.isSkipAllowed) { - // To test this code path: - // Remove the `.git` folder then run "rush build --verbose" - terminal.writeLine({ - text: PrintUtilities.wrapWords( - 'This workspace does not appear to be tracked by Git. ' + - 'Rush will proceed without incremental execution, caching, and change detection.' - ), - foregroundColor: ColorValue.Cyan - }); - } - } catch (error) { - // To test this code path: - // Delete a project's ".rush/temp/shrinkwrap-deps.json" then run "rush build --verbose" - terminal.writeLine('Unable to calculate incremental state: ' + (error as Error).toString()); - terminal.writeLine({ - text: 'Rush will proceed without incremental execution, caching, and change detection.', - foregroundColor: ColorValue.Cyan - }); - } - - // If possible, we want to skip this operation -- either by restoring it from the - // cache, if caching is enabled, or determining that the project - // is unchanged (using the older incremental execution logic). These two approaches, - // "caching" and "skipping", are incompatible, so only one applies. - // - // Note that "caching" and "skipping" take two different approaches - // to tracking dependents: - // - // - For caching, "isCacheReadAllowed" is set if a project supports - // incremental builds, and determining whether this project or a dependent - // has changed happens inside the hashing logic. - // - // - For skipping, "isSkipAllowed" is set to true initially, and during - // the process of running dependents, it will be changed by OperationExecutionManager to - // false if a dependency wasn't able to be skipped. - // - let buildCacheReadAttempted: boolean = false; - if (this._isCacheReadAllowed) { - const projectBuildCache: ProjectBuildCache | undefined = await this._tryGetProjectBuildCacheAsync({ - terminal: buildCacheTerminal, - trackedProjectFiles, - operationMetadataManager: context._operationMetadataManager - }); - - buildCacheReadAttempted = !!projectBuildCache; - const restoreFromCacheSuccess: boolean | undefined = - await projectBuildCache?.tryRestoreFromCacheAsync(buildCacheTerminal); - - if (restoreFromCacheSuccess) { - // Restore the original state of the operation without cache - await context._operationMetadataManager?.tryRestoreAsync({ - terminal, - logPath: projectLogWritable.logPath, - errorLogPath: projectLogWritable.errorLogPath - }); - return OperationStatus.FromCache; - } - } - if (this.isSkipAllowed && !buildCacheReadAttempted) { - const isPackageUnchanged: boolean = !!( - lastProjectDeps && - projectDeps && - projectDeps.arguments === lastProjectDeps.arguments && - _areShallowEqual(projectDeps.files, lastProjectDeps.files) - ); - - if (isPackageUnchanged) { - return OperationStatus.Skipped; - } - } - - // If the deps file exists, remove it before starting execution. - FileSystem.deleteFile(currentDepsPath); - - // TODO: Remove legacyDepsPath with the next major release of Rush - const legacyDepsPath: string = path.join(this._rushProject.projectFolder, 'package-deps.json'); - // Delete the legacy package-deps.json - FileSystem.deleteFile(legacyDepsPath); - - if (!this._commandToRun) { - // Write deps on success. - if (projectDeps) { - JsonFile.save(projectDeps, currentDepsPath, { - ensureFolderExists: true - }); - } - - return OperationStatus.Success; - } // Run the operation terminal.writeLine('Invoking: ' + this._commandToRun); @@ -396,7 +172,9 @@ export class ShellOperationRunner implements IOperationRunner { subProcess.on('close', (code: number) => { try { if (code !== 0) { - reject(new OperationError('error', `Returned error code: ${code}`)); + // Do NOT reject here immediately, give a chance for other logic to suppress the error + context.error = new OperationError('error', `Returned error code: ${code}`); + resolve(OperationStatus.Failure); } else if (hasWarningOrError) { resolve(OperationStatus.SuccessWithWarning); } else { @@ -418,146 +196,15 @@ export class ShellOperationRunner implements IOperationRunner { throw new InternalError('The output file handle was not closed'); } - const taskIsSuccessful: boolean = - status === OperationStatus.Success || - (status === OperationStatus.SuccessWithWarning && - this.warningsAreAllowed && - !!this._rushConfiguration.experimentsConfiguration.configuration - .buildCacheWithAllowWarningsInSuccessfulBuild); - - if (taskIsSuccessful && projectDeps) { - // Write deps on success. - const writeProjectStatePromise: Promise = JsonFile.saveAsync(projectDeps, currentDepsPath, { - ensureFolderExists: true - }); - - // If the operation without cache was successful, we can save the metadata to disk - const { duration: durationInSeconds } = context.stopwatch; - await context._operationMetadataManager?.saveAsync({ - durationInSeconds, - logPath: projectLogWritable.logPath, - errorLogPath: projectLogWritable.errorLogPath - }); - - // If the command is successful, we can calculate project hash, and no dependencies were skipped, - // write a new cache entry. - const setCacheEntryPromise: Promise | undefined = this.isCacheWriteAllowed - ? ( - await this._tryGetProjectBuildCacheAsync({ - terminal: buildCacheTerminal, - trackedProjectFiles, - operationMetadataManager: context._operationMetadataManager - }) - )?.trySetCacheEntryAsync(buildCacheTerminal) - : undefined; - - const [, cacheWriteSuccess] = await Promise.all([writeProjectStatePromise, setCacheEntryPromise]); - - if (buildCacheTerminalProvider.hasErrors) { - status = OperationStatus.Failure; - } else if (cacheWriteSuccess === false) { - status = OperationStatus.SuccessWithWarning; - } + if (terminalProvider.hasErrors) { + status = OperationStatus.Failure; } return status; } finally { projectLogWritable.close(); - cacheProjectLogWritable?.close(); } } - - private async _tryGetProjectBuildCacheAsync({ - terminal, - trackedProjectFiles, - operationMetadataManager - }: { - terminal: ITerminal; - trackedProjectFiles: string[] | undefined; - operationMetadataManager: OperationMetadataManager | undefined; - }): Promise { - if (this._projectBuildCache === UNINITIALIZED) { - this._projectBuildCache = undefined; - - if (this._buildCacheConfiguration && this._buildCacheConfiguration.buildCacheEnabled) { - // Disable legacy skip logic if the build cache is in play - this.isSkipAllowed = false; - - const projectConfiguration: RushProjectConfiguration | undefined = - await RushProjectConfiguration.tryLoadForProjectAsync(this._rushProject, terminal); - if (projectConfiguration) { - projectConfiguration.validatePhaseConfiguration(this._selectedPhases, terminal); - if (projectConfiguration.disableBuildCacheForProject) { - terminal.writeVerboseLine('Caching has been disabled for this project.'); - } else { - const operationSettings: IOperationSettings | undefined = - projectConfiguration.operationSettingsByOperationName.get(this._commandName); - if (!operationSettings) { - terminal.writeVerboseLine( - `This project does not define the caching behavior of the "${this._commandName}" command, so caching has been disabled.` - ); - } else if (operationSettings.disableBuildCacheForOperation) { - terminal.writeVerboseLine( - `Caching has been disabled for this project's "${this._commandName}" command.` - ); - } else { - const projectOutputFolderNames: ReadonlyArray = - operationSettings.outputFolderNames || []; - const additionalProjectOutputFilePaths: ReadonlyArray = [ - ...(operationMetadataManager?.relativeFilepaths || []) - ]; - const additionalContext: Record = {}; - if (operationSettings.dependsOnEnvVars) { - for (const varName of operationSettings.dependsOnEnvVars) { - additionalContext['$' + varName] = process.env[varName] || ''; - } - } - - if (operationSettings.dependsOnAdditionalFiles) { - const repoState: IRawRepoState | undefined = - await this._projectChangeAnalyzer._ensureInitializedAsync(terminal); - - const additionalFiles: Map = await getHashesForGlobsAsync( - operationSettings.dependsOnAdditionalFiles, - this._rushProject.projectFolder, - repoState - ); - - terminal.writeDebugLine( - `Including additional files to calculate build cache hash:\n ${Array.from( - additionalFiles.keys() - ).join('\n ')} ` - ); - - for (const [filePath, fileHash] of additionalFiles) { - additionalContext['file://' + filePath] = fileHash; - } - } - this._projectBuildCache = await ProjectBuildCache.tryGetProjectBuildCache({ - projectConfiguration, - projectOutputFolderNames, - additionalProjectOutputFilePaths, - additionalContext, - buildCacheConfiguration: this._buildCacheConfiguration, - terminal, - command: this._commandToRun, - trackedProjectFiles: trackedProjectFiles, - projectChangeAnalyzer: this._projectChangeAnalyzer, - phaseName: this._phase.name - }); - } - } - } else { - terminal.writeVerboseLine( - `Project does not have a ${RushConstants.rushProjectConfigFilename} configuration file, ` + - 'or one provided by a rig, so it does not support caching.' - ); - } - } - } - - return this._projectBuildCache; - } } /** diff --git a/libraries/rush-lib/src/logic/operations/ShellOperationRunnerPlugin.ts b/libraries/rush-lib/src/logic/operations/ShellOperationRunnerPlugin.ts index d9a3e08a55b..40a3be46480 100644 --- a/libraries/rush-lib/src/logic/operations/ShellOperationRunnerPlugin.ts +++ b/libraries/rush-lib/src/logic/operations/ShellOperationRunnerPlugin.ts @@ -29,13 +29,7 @@ function createShellOperations( operations: Set, context: ICreateOperationsContext ): Set { - const { - buildCacheConfiguration, - isIncrementalBuildAllowed, - phaseSelection: selectedPhases, - projectChangeAnalyzer, - rushConfiguration - } = context; + const { phaseSelection: selectedPhases, projectChangeAnalyzer, rushConfiguration } = context; const customParametersByPhase: Map = new Map(); @@ -77,17 +71,16 @@ function createShellOperations( const displayName: string = getDisplayName(phase, project); if (commandToRun) { - operation.runner = new ShellOperationRunner({ - buildCacheConfiguration, + const shellOperationRunner: ShellOperationRunner = new ShellOperationRunner({ commandToRun: commandToRun || '', displayName, - isIncrementalBuildAllowed, phase, projectChangeAnalyzer, rushConfiguration, rushProject: project, selectedPhases }); + operation.runner = shellOperationRunner; } else { // Empty build script indicates a no-op, so use a no-op runner operation.runner = new NullOperationRunner({ diff --git a/libraries/rush-lib/src/logic/operations/test/AsyncOperationQueue.test.ts b/libraries/rush-lib/src/logic/operations/test/AsyncOperationQueue.test.ts index 1270b19c262..7c97cf3f248 100644 --- a/libraries/rush-lib/src/logic/operations/test/AsyncOperationQueue.test.ts +++ b/libraries/rush-lib/src/logic/operations/test/AsyncOperationQueue.test.ts @@ -4,7 +4,14 @@ import { Operation } from '../Operation'; import { IOperationExecutionRecordContext, OperationExecutionRecord } from '../OperationExecutionRecord'; import { MockOperationRunner } from './MockOperationRunner'; -import { AsyncOperationQueue, IOperationSortFunction } from '../AsyncOperationQueue'; +import { + AsyncOperationQueue, + IOperationIteratorResult, + IOperationSortFunction, + UNASSIGNED_OPERATION +} from '../AsyncOperationQueue'; +import { OperationStatus } from '../OperationStatus'; +import { Async } from '@rushstack/node-core-library'; function addDependency(consumer: OperationExecutionRecord, dependency: OperationExecutionRecord): void { consumer.dependencies.add(dependency); @@ -34,15 +41,24 @@ describe(AsyncOperationQueue.name, () => { const expectedOrder = [operations[2], operations[0], operations[1], operations[3]]; const actualOrder = []; + // Nothing sets the RemoteExecuting status, this should be a error if it happens + let hasUnassignedOperation: boolean = false; const queue: AsyncOperationQueue = new AsyncOperationQueue(operations, nullSort); for await (const operation of queue) { actualOrder.push(operation); + if (operation === UNASSIGNED_OPERATION) { + hasUnassignedOperation = true; + continue; + } for (const consumer of operation.consumers) { consumer.dependencies.delete(operation); } + operation.status = OperationStatus.Success; + queue.complete(operation); } expect(actualOrder).toEqual(expectedOrder); + expect(hasUnassignedOperation).toEqual(false); }); it('respects the sort predicate', async () => { @@ -56,19 +72,29 @@ describe(AsyncOperationQueue.name, () => { ): number => { return expectedOrder.indexOf(b) - expectedOrder.indexOf(a); }; + // Nothing sets the RemoteExecuting status, this should be a error if it happens + let hasUnassignedOperation: boolean = false; const queue: AsyncOperationQueue = new AsyncOperationQueue(operations, customSort); for await (const operation of queue) { actualOrder.push(operation); + if (operation === UNASSIGNED_OPERATION) { + hasUnassignedOperation = true; + continue; + } for (const consumer of operation.consumers) { consumer.dependencies.delete(operation); } + operation.status = OperationStatus.Success; + queue.complete(operation); } expect(actualOrder).toEqual(expectedOrder); + + expect(hasUnassignedOperation).toEqual(false); }); - it('detects cyles', async () => { + it('detects cycles', async () => { const operations = [createRecord('a'), createRecord('b'), createRecord('c'), createRecord('d')]; addDependency(operations[0], operations[2]); @@ -107,11 +133,17 @@ describe(AsyncOperationQueue.name, () => { const actualConcurrency: Map = new Map(); const queue: AsyncOperationQueue = new AsyncOperationQueue(operations, nullSort); let concurrency: number = 0; + // Nothing sets the RemoteExecuting status, this should be a error if it happens + let hasUnassignedOperation: boolean = false; // Use 3 concurrent iterators to verify that it handles having more than the operation concurrency await Promise.all( Array.from({ length: 3 }, async () => { for await (const operation of queue) { + if (operation === UNASSIGNED_OPERATION) { + hasUnassignedOperation = true; + continue; + } ++concurrency; await Promise.resolve(); @@ -124,6 +156,8 @@ describe(AsyncOperationQueue.name, () => { } --concurrency; + operation.status = OperationStatus.Success; + queue.complete(operation); } }) ); @@ -131,5 +165,70 @@ describe(AsyncOperationQueue.name, () => { for (const [operation, operationConcurrency] of expectedConcurrency) { expect(actualConcurrency.get(operation)).toEqual(operationConcurrency); } + + expect(hasUnassignedOperation).toEqual(false); + }); + + it('handles remote executed operations', async () => { + const operations = [ + createRecord('a'), + createRecord('b'), + createRecord('c'), + createRecord('d'), + createRecord('e') + ]; + + addDependency(operations[2], operations[1]); + addDependency(operations[3], operations[1]); + addDependency(operations[4], operations[1]); + addDependency(operations[3], operations[2]); + addDependency(operations[4], operations[3]); + + // b remote executing -> a -> b (remote executed) -> c -> d -> e + const expectedOrder: string[] = ['b', 'a', 'b', 'c', 'd', 'e']; + + const queue: AsyncOperationQueue = new AsyncOperationQueue(operations, nullSort); + + const actualOrder: string[] = []; + let remoteExecuted: boolean = false; + for await (const operation of queue) { + let record: OperationExecutionRecord | undefined; + if (operation === UNASSIGNED_OPERATION) { + await Async.sleep(100); + record = queue.tryGetRemoteExecutingOperation(); + } else { + record = operation; + } + if (!record) { + continue; + } + + actualOrder.push(record.name); + + if (record === operations[1]) { + if (!remoteExecuted) { + operations[1].status = OperationStatus.RemoteExecuting; + // remote executed operation is finished later + remoteExecuted = true; + continue; + } + } + for (const consumer of record.consumers) { + consumer.dependencies.delete(record); + } + record.status = OperationStatus.Success; + queue.complete(record); + } + + expect(actualOrder).toEqual(expectedOrder); + }); + + it('handles an empty queue', async () => { + const operations: OperationExecutionRecord[] = []; + + const queue: AsyncOperationQueue = new AsyncOperationQueue(operations, nullSort); + const iterator: AsyncIterator = queue[Symbol.asyncIterator](); + const result: IteratorResult = await iterator.next(); + expect(result.done).toEqual(true); }); }); diff --git a/libraries/rush-lib/src/logic/operations/test/MockOperationRunner.ts b/libraries/rush-lib/src/logic/operations/test/MockOperationRunner.ts index 58a71c26a21..8f505120b91 100644 --- a/libraries/rush-lib/src/logic/operations/test/MockOperationRunner.ts +++ b/libraries/rush-lib/src/logic/operations/test/MockOperationRunner.ts @@ -11,8 +11,7 @@ export class MockOperationRunner implements IOperationRunner { public readonly name: string; public readonly reportTiming: boolean = true; public readonly silent: boolean = false; - public isSkipAllowed: boolean = false; - public isCacheWriteAllowed: boolean = false; + public readonly cacheable: boolean = false; public readonly warningsAreAllowed: boolean; public constructor( @@ -32,4 +31,8 @@ export class MockOperationRunner implements IOperationRunner { } return result || OperationStatus.Success; } + + public getConfigHash(): string { + return 'mock'; + } } 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 378175310d6..5818fce6721 100644 --- a/libraries/rush-lib/src/logic/operations/test/OperationExecutionManager.test.ts +++ b/libraries/rush-lib/src/logic/operations/test/OperationExecutionManager.test.ts @@ -212,7 +212,7 @@ describe(OperationExecutionManager.name, () => { ); const result: IExecutionResult = await executionManager.executeAsync(); - _printTimeline(mockTerminal, result); + _printTimeline({ terminal: mockTerminal, result, cobuildConfiguration: undefined }); _printOperationStatus(mockTerminal, result); const allMessages: string = mockWritable.getAllOutput(); expect(allMessages).toContain('Build step 1'); 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 96fe059ee21..c5d86c70a5b 100644 --- a/libraries/rush-lib/src/logic/operations/test/ShellOperationRunnerPlugin.test.ts +++ b/libraries/rush-lib/src/logic/operations/test/ShellOperationRunnerPlugin.test.ts @@ -11,7 +11,6 @@ import { ICommandLineJson } from '../../../api/CommandLineJson'; import { PhasedOperationPlugin } from '../PhasedOperationPlugin'; import { ShellOperationRunnerPlugin } from '../ShellOperationRunnerPlugin'; import { ICreateOperationsContext, PhasedCommandHooks } from '../../../pluginFramework/PhasedCommandHooks'; -import { ShellOperationRunner } from '../ShellOperationRunner'; interface ISerializedOperation { name: string; @@ -21,7 +20,7 @@ interface ISerializedOperation { function serializeOperation(operation: Operation): ISerializedOperation { return { name: operation.name!, - commandToRun: (operation.runner as ShellOperationRunner)['_commandToRun'] + commandToRun: operation.runner!.getConfigHash() }; } diff --git a/libraries/rush-lib/src/logic/operations/test/__snapshots__/AsyncOperationQueue.test.ts.snap b/libraries/rush-lib/src/logic/operations/test/__snapshots__/AsyncOperationQueue.test.ts.snap index 7a4c086efd4..c1642f68137 100644 --- a/libraries/rush-lib/src/logic/operations/test/__snapshots__/AsyncOperationQueue.test.ts.snap +++ b/libraries/rush-lib/src/logic/operations/test/__snapshots__/AsyncOperationQueue.test.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`AsyncOperationQueue detects cyles 1`] = ` +exports[`AsyncOperationQueue detects cycles 1`] = ` "A cyclic dependency was encountered: a -> c diff --git a/libraries/rush-lib/src/pluginFramework/PhasedCommandHooks.ts b/libraries/rush-lib/src/pluginFramework/PhasedCommandHooks.ts index 7b69ae88cb5..abf6ca57546 100644 --- a/libraries/rush-lib/src/pluginFramework/PhasedCommandHooks.ts +++ b/libraries/rush-lib/src/pluginFramework/PhasedCommandHooks.ts @@ -1,18 +1,24 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -import { AsyncSeriesHook, AsyncSeriesWaterfallHook, SyncHook } from 'tapable'; +import { AsyncSeriesBailHook, AsyncSeriesHook, AsyncSeriesWaterfallHook, SyncHook } from 'tapable'; import type { CommandLineParameter } from '@rushstack/ts-command-line'; import type { BuildCacheConfiguration } from '../api/BuildCacheConfiguration'; import type { IPhase } from '../api/CommandLineConfiguration'; import type { RushConfiguration } from '../api/RushConfiguration'; import type { RushConfigurationProject } from '../api/RushConfigurationProject'; - import type { Operation } from '../logic/operations/Operation'; import type { ProjectChangeAnalyzer } from '../logic/ProjectChangeAnalyzer'; -import { ITelemetryData } from '../logic/Telemetry'; -import { IExecutionResult, IOperationExecutionResult } from '../logic/operations/IOperationExecutionResult'; +import type { + IExecutionResult, + IOperationExecutionResult +} from '../logic/operations/IOperationExecutionResult'; +import type { CobuildConfiguration } from '../api/CobuildConfiguration'; +import { RushProjectConfiguration } from '../api/RushProjectConfiguration'; +import type { IOperationRunnerContext } from '../logic/operations/IOperationRunner'; +import type { ITelemetryData } from '../logic/Telemetry'; +import type { OperationStatus } from '../logic/operations/OperationStatus'; /** * A plugin that interacts with a phased commands. @@ -34,6 +40,10 @@ export interface ICreateOperationsContext { * The configuration for the build cache, if the feature is enabled. */ readonly buildCacheConfiguration: BuildCacheConfiguration | undefined; + /** + * The configuration for the cobuild, if cobuild feature and build cache feature are both enabled. + */ + readonly cobuildConfiguration: CobuildConfiguration | undefined; /** * The set of custom parameters for the executing command. * Maps from the `longName` field in command-line.json to the parser configuration in ts-command-line. @@ -69,6 +79,10 @@ export interface ICreateOperationsContext { * The set of Rush projects selected for the current command execution. */ readonly projectSelection: ReadonlySet; + /** + * All successfully loaded rush-project.json data for selected projects. + */ + readonly projectConfigurations: ReadonlyMap; /** * The set of Rush projects that have not been built in the current process since they were last modified. * When `isInitial` is true, this will be an exact match of `projectSelection`. @@ -96,8 +110,9 @@ export class PhasedCommandHooks { * Hook invoked before operation start * Hook is series for stable output. */ - public readonly beforeExecuteOperations: AsyncSeriesHook<[Map]> = - new AsyncSeriesHook(['records']); + public readonly beforeExecuteOperations: AsyncSeriesHook< + [Map, ICreateOperationsContext] + > = new AsyncSeriesHook(['records', 'context']); /** * Hook invoked when operation status changed @@ -113,6 +128,21 @@ export class PhasedCommandHooks { public readonly afterExecuteOperations: AsyncSeriesHook<[IExecutionResult, ICreateOperationsContext]> = new AsyncSeriesHook(['results', 'context']); + /** + * Hook invoked before executing a operation. + */ + public readonly beforeExecuteOperation: AsyncSeriesBailHook< + [IOperationRunnerContext & IOperationExecutionResult], + OperationStatus | undefined + > = new AsyncSeriesBailHook(['runnerContext'], 'beforeExecuteOperation'); + + /** + * Hook invoked after executing a operation. + */ + public readonly afterExecuteOperation: AsyncSeriesHook< + [IOperationRunnerContext & IOperationExecutionResult] + > = new AsyncSeriesHook(['runnerContext'], 'afterExecuteOperation'); + /** * Hook invoked after a run has finished and the command is watching for changes. * May be used to display additional relevant data to the user. diff --git a/libraries/rush-lib/src/pluginFramework/RushSession.ts b/libraries/rush-lib/src/pluginFramework/RushSession.ts index edfd502455d..374960f9530 100644 --- a/libraries/rush-lib/src/pluginFramework/RushSession.ts +++ b/libraries/rush-lib/src/pluginFramework/RushSession.ts @@ -2,11 +2,14 @@ // See LICENSE in the project root for license information. import { InternalError, ITerminalProvider } from '@rushstack/node-core-library'; -import { IBuildCacheJson } from '../api/BuildCacheConfiguration'; -import { ICloudBuildCacheProvider } from '../logic/buildCache/ICloudBuildCacheProvider'; import { ILogger, ILoggerOptions, Logger } from './logging/Logger'; import { RushLifecycleHooks } from './RushLifeCycle'; +import type { IBuildCacheJson } from '../api/BuildCacheConfiguration'; +import type { ICloudBuildCacheProvider } from '../logic/buildCache/ICloudBuildCacheProvider'; +import type { ICobuildJson } from '../api/CobuildConfiguration'; +import type { ICobuildLockProvider } from '../logic/cobuild/ICobuildLockProvider'; + /** * @beta */ @@ -22,12 +25,20 @@ export type CloudBuildCacheProviderFactory = ( buildCacheJson: IBuildCacheJson ) => ICloudBuildCacheProvider | Promise; +/** + * @beta + */ +export type CobuildLockProviderFactory = ( + cobuildJson: ICobuildJson +) => ICobuildLockProvider | Promise; + /** * @beta */ export class RushSession { private readonly _options: IRushSessionOptions; private readonly _cloudBuildCacheProviderFactories: Map = new Map(); + private readonly _cobuildLockProviderFactories: Map = new Map(); public readonly hooks: RushLifecycleHooks; @@ -71,4 +82,22 @@ export class RushSession { ): CloudBuildCacheProviderFactory | undefined { return this._cloudBuildCacheProviderFactories.get(cacheProviderName); } + + public registerCobuildLockProviderFactory( + cobuildLockProviderName: string, + factory: CobuildLockProviderFactory + ): void { + if (this._cobuildLockProviderFactories.has(cobuildLockProviderName)) { + throw new Error( + `A cobuild lock provider factory for ${cobuildLockProviderName} has already been registered` + ); + } + this._cobuildLockProviderFactories.set(cobuildLockProviderName, factory); + } + + public getCobuildLockProviderFactory( + cobuildLockProviderName: string + ): CobuildLockProviderFactory | undefined { + return this._cobuildLockProviderFactories.get(cobuildLockProviderName); + } } diff --git a/libraries/rush-lib/src/schemas/cobuild.schema.json b/libraries/rush-lib/src/schemas/cobuild.schema.json new file mode 100644 index 00000000000..6fe630b89d8 --- /dev/null +++ b/libraries/rush-lib/src/schemas/cobuild.schema.json @@ -0,0 +1,35 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Configuration for Rush's cobuild.", + "description": "For use with the Rush tool, this file provides configuration options for cobuild feature. See http://rushjs.io for details.", + "definitions": { + "anything": { + "type": ["array", "boolean", "integer", "number", "object", "string"], + "items": { + "$ref": "#/definitions/anything" + } + } + }, + "type": "object", + "allOf": [ + { + "type": "object", + "additionalProperties": false, + "required": ["cobuildFeatureEnabled", "cobuildLockProvider"], + "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" + }, + "cobuildFeatureEnabled": { + "description": "Set this to true to enable the cobuild feature.", + "type": "boolean" + }, + "cobuildLockProvider": { + "description": "Specify the cobuild lock provider to use", + "type": "string" + } + } + } + ] +} diff --git a/libraries/rush-lib/src/utilities/NullTerminalProvider.ts b/libraries/rush-lib/src/utilities/NullTerminalProvider.ts new file mode 100644 index 00000000000..5850747a0cd --- /dev/null +++ b/libraries/rush-lib/src/utilities/NullTerminalProvider.ts @@ -0,0 +1,10 @@ +import type { ITerminalProvider } from '@rushstack/node-core-library'; + +/** + * A terminal provider like /dev/null + */ +export class NullTerminalProvider implements ITerminalProvider { + public supportsColor: boolean = false; + public eolCharacter: string = '\n'; + public write(): void {} +} diff --git a/libraries/rush-sdk/src/test/__snapshots__/script.test.ts.snap b/libraries/rush-sdk/src/test/__snapshots__/script.test.ts.snap index 76ddc90091b..a789f7b16a1 100644 --- a/libraries/rush-sdk/src/test/__snapshots__/script.test.ts.snap +++ b/libraries/rush-sdk/src/test/__snapshots__/script.test.ts.snap @@ -13,6 +13,7 @@ Loaded @microsoft/rush-lib from process.env._RUSH_LIB_PATH 'BuildCacheConfiguration', 'BumpType', 'ChangeManager', + 'CobuildConfiguration', 'CommonVersionsConfiguration', 'CredentialCache', 'CustomTipsConfiguration', @@ -42,6 +43,7 @@ Loaded @microsoft/rush-lib from process.env._RUSH_LIB_PATH 'RushConfigurationProject', 'RushConstants', 'RushLifecycleHooks', + 'RushProjectConfiguration', 'RushSession', 'RushUserConfiguration', 'VersionPolicy', diff --git a/rush-plugins/rush-amazon-s3-build-cache-plugin/src/AmazonS3Credentials.ts b/rush-plugins/rush-amazon-s3-build-cache-plugin/src/AmazonS3Credentials.ts index 8a7c6c8470e..6c3164a17e9 100644 --- a/rush-plugins/rush-amazon-s3-build-cache-plugin/src/AmazonS3Credentials.ts +++ b/rush-plugins/rush-amazon-s3-build-cache-plugin/src/AmazonS3Credentials.ts @@ -34,13 +34,13 @@ export const fromAmazonEnv = (): IAmazonS3Credentials | undefined => { }; } else if (accessKeyId) { throw new Error( - `The "${AWS_ACCESS_KEY_ID}" env variable is set, but the "${AWS_SECRET_ACCESS_KEY}" `+ - `env variable is not set. Both or neither must be provided.` + `The "${AWS_ACCESS_KEY_ID}" env variable is set, but the "${AWS_SECRET_ACCESS_KEY}" ` + + `env variable is not set. Both or neither must be provided.` ); } else if (secretAccessKey) { throw new Error( - `The "${AWS_SECRET_ACCESS_KEY}" env variable is set, but the "${AWS_ACCESS_KEY_ID}" `+ - `env variable is not set. Both or neither must be provided.` + `The "${AWS_SECRET_ACCESS_KEY}" env variable is set, but the "${AWS_ACCESS_KEY_ID}" ` + + `env variable is not set. Both or neither must be provided.` ); } else { return undefined; diff --git a/rush-plugins/rush-amazon-s3-build-cache-plugin/src/test/AmazonS3Credentials.test.ts b/rush-plugins/rush-amazon-s3-build-cache-plugin/src/test/AmazonS3Credentials.test.ts index fd8f63286ef..b73abc08e70 100644 --- a/rush-plugins/rush-amazon-s3-build-cache-plugin/src/test/AmazonS3Credentials.test.ts +++ b/rush-plugins/rush-amazon-s3-build-cache-plugin/src/test/AmazonS3Credentials.test.ts @@ -79,11 +79,15 @@ describe('Amazon S3 Credentials', () => { it('returns undefined if access key and secret are not both present', () => { process.env[AWS_ACCESS_KEY_ID] = AWS_ACCESS_KEY_ID; - expect(() => fromAmazonEnv()).toThrowErrorMatchingInlineSnapshot(`"The \\"AWS_ACCESS_KEY_ID\\" env variable is set, but the \\"AWS_SECRET_ACCESS_KEY\\" env variable is not set. Both or neither must be provided."`); + expect(() => fromAmazonEnv()).toThrowErrorMatchingInlineSnapshot( + `"The \\"AWS_ACCESS_KEY_ID\\" env variable is set, but the \\"AWS_SECRET_ACCESS_KEY\\" env variable is not set. Both or neither must be provided."` + ); delete process.env[AWS_ACCESS_KEY_ID]; process.env[AWS_SECRET_ACCESS_KEY] = AWS_SECRET_ACCESS_KEY; - expect(() => fromAmazonEnv()).toThrowErrorMatchingInlineSnapshot(`"The \\"AWS_SECRET_ACCESS_KEY\\" env variable is set, but the \\"AWS_ACCESS_KEY_ID\\" env variable is not set. Both or neither must be provided."`); + expect(() => fromAmazonEnv()).toThrowErrorMatchingInlineSnapshot( + `"The \\"AWS_SECRET_ACCESS_KEY\\" env variable is set, but the \\"AWS_ACCESS_KEY_ID\\" env variable is not set. Both or neither must be provided."` + ); }); }); diff --git a/rush-plugins/rush-redis-cobuild-plugin/.eslintrc.js b/rush-plugins/rush-redis-cobuild-plugin/.eslintrc.js new file mode 100644 index 00000000000..4c934799d67 --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-plugin/.eslintrc.js @@ -0,0 +1,10 @@ +// This is a workaround for https://github.com/eslint/eslint/issues/3458 +require('@rushstack/eslint-config/patch/modern-module-resolution'); + +module.exports = { + extends: [ + '@rushstack/eslint-config/profile/node-trusted-tool', + '@rushstack/eslint-config/mixins/friendly-locals' + ], + parserOptions: { tsconfigRootDir: __dirname } +}; diff --git a/rush-plugins/rush-redis-cobuild-plugin/.npmignore b/rush-plugins/rush-redis-cobuild-plugin/.npmignore new file mode 100644 index 00000000000..fcd991b60fa --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-plugin/.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/** +!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 (and its variants) +# CHANGELOG (and its variants) +# LICENSE / LICENCE + +#-------------------------------------------- +# DO NOT MODIFY THE TEMPLATE ABOVE THIS LINE +#-------------------------------------------- + +# (Add your project-specific overrides here) +!/includes/** +!rush-plugin-manifest.json diff --git a/rush-plugins/rush-redis-cobuild-plugin/LICENSE b/rush-plugins/rush-redis-cobuild-plugin/LICENSE new file mode 100644 index 00000000000..0fbcd4e5857 --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-plugin/LICENSE @@ -0,0 +1,24 @@ +@rushstack/rush-redis-cobuild-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/rush-plugins/rush-redis-cobuild-plugin/README.md b/rush-plugins/rush-redis-cobuild-plugin/README.md new file mode 100644 index 00000000000..9ffa0231a46 --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-plugin/README.md @@ -0,0 +1,9 @@ +# @rushstack/rush-redis-cobuild-plugin + +This is a Rush plugin for using Redis as cobuild lock provider during the "build" + +## Links + +- [CHANGELOG.md]( + https://github.com/microsoft/rushstack/blob/main/rush-plugins/rush-redis-cobuild-plugin/CHANGELOG.md) - Find + out what's new in the latest version diff --git a/rush-plugins/rush-redis-cobuild-plugin/config/api-extractor.json b/rush-plugins/rush-redis-cobuild-plugin/config/api-extractor.json new file mode 100644 index 00000000000..74590d3c4f8 --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-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/rush-plugins/rush-redis-cobuild-plugin/config/jest.config.json b/rush-plugins/rush-redis-cobuild-plugin/config/jest.config.json new file mode 100644 index 00000000000..4bb17bde3ee --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-plugin/config/jest.config.json @@ -0,0 +1,3 @@ +{ + "extends": "@rushstack/heft-node-rig/profiles/default/config/jest.config.json" +} diff --git a/rush-plugins/rush-redis-cobuild-plugin/config/rig.json b/rush-plugins/rush-redis-cobuild-plugin/config/rig.json new file mode 100644 index 00000000000..6ac88a96368 --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-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": "@rushstack/heft-node-rig" +} diff --git a/rush-plugins/rush-redis-cobuild-plugin/package.json b/rush-plugins/rush-redis-cobuild-plugin/package.json new file mode 100644 index 00000000000..c4112a7facb --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-plugin/package.json @@ -0,0 +1,34 @@ +{ + "name": "@rushstack/rush-redis-cobuild-plugin", + "version": "0.0.0", + "description": "Rush plugin for Redis cobuild lock", + "repository": { + "type": "git", + "url": "https://github.com/microsoft/rushstack", + "directory": "rush-plugins/rush-redis-cobuild-plugin" + }, + "homepage": "https://rushjs.io", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "license": "MIT", + "scripts": { + "build": "heft build --clean", + "start": "heft test-watch", + "test": "heft test --clean", + "_phase:build": "heft run --only build -- --clean", + "_phase:test": "heft run --only test -- --clean" + }, + "dependencies": { + "@redis/client": "~1.5.5", + "@rushstack/node-core-library": "workspace:*", + "@rushstack/rush-sdk": "workspace:*" + }, + "devDependencies": { + "@microsoft/rush-lib": "workspace:*", + "@rushstack/eslint-config": "workspace:*", + "@rushstack/heft": "workspace:*", + "@rushstack/heft-node-rig": "workspace:*", + "@types/heft-jest": "1.0.1", + "@types/node": "14.18.36" + } +} diff --git a/rush-plugins/rush-redis-cobuild-plugin/rush-plugin-manifest.json b/rush-plugins/rush-redis-cobuild-plugin/rush-plugin-manifest.json new file mode 100644 index 00000000000..64ebf15d963 --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-plugin/rush-plugin-manifest.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush-plugin-manifest.schema.json", + "plugins": [ + { + "pluginName": "rush-redis-cobuild-plugin", + "description": "Rush plugin for Redis cobuild lock", + "entryPoint": "lib/index.js", + "optionsSchema": "lib/schemas/redis-config.schema.json" + } + ] +} diff --git a/rush-plugins/rush-redis-cobuild-plugin/src/RedisCobuildLockProvider.ts b/rush-plugins/rush-redis-cobuild-plugin/src/RedisCobuildLockProvider.ts new file mode 100644 index 00000000000..54dee4e2db4 --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-plugin/src/RedisCobuildLockProvider.ts @@ -0,0 +1,222 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import { createClient } from '@redis/client'; + +import { + ICobuildLockProvider, + ICobuildContext, + ICobuildCompletedState, + RushSession +} from '@rushstack/rush-sdk'; +import type { + RedisClientOptions, + RedisClientType, + RedisFunctions, + RedisModules, + RedisScripts +} from '@redis/client'; +import type { ITerminal } from '@rushstack/node-core-library'; + +/** + * The redis client options + * @beta + */ +export interface IRedisCobuildLockProviderOptions extends RedisClientOptions { + /** + * The environment variable name for the redis password + */ + passwordEnvironmentVariable?: string; +} + +const COMPLETED_STATE_SEPARATOR: ';' = ';'; + +/** + * @beta + */ +export class RedisCobuildLockProvider implements ICobuildLockProvider { + private readonly _options: IRedisCobuildLockProviderOptions; + private readonly _terminal: ITerminal; + private readonly _lockKeyIdentifierMap: WeakMap = new WeakMap< + ICobuildContext, + string + >(); + private readonly _completedStateKeyIdentifierMap: WeakMap = new WeakMap< + ICobuildContext, + string + >(); + + private readonly _redisClient: RedisClientType; + + public constructor(options: IRedisCobuildLockProviderOptions, rushSession: RushSession) { + this._options = RedisCobuildLockProvider.expandOptionsWithEnvironmentVariables(options); + this._terminal = rushSession.getLogger('RedisCobuildLockProvider').terminal; + try { + this._redisClient = createClient(this._options); + } catch (e) { + throw new Error(`Failed to create redis client: ${e.message}`); + } + } + + public static expandOptionsWithEnvironmentVariables( + options: IRedisCobuildLockProviderOptions, + environment: NodeJS.ProcessEnv = process.env + ): IRedisCobuildLockProviderOptions { + const finalOptions: IRedisCobuildLockProviderOptions = { ...options }; + const missingEnvironmentVariables: Set = new Set(); + + if (finalOptions.passwordEnvironmentVariable) { + const password: string | undefined = environment[finalOptions.passwordEnvironmentVariable]; + if (password !== undefined) { + finalOptions.password = password; + } else { + missingEnvironmentVariables.add(finalOptions.passwordEnvironmentVariable); + } + finalOptions.passwordEnvironmentVariable = undefined; + } + + if (missingEnvironmentVariables.size) { + throw new Error( + `The "RedisCobuildLockProvider" tries to access missing environment variable${ + missingEnvironmentVariables.size > 1 ? 's' : '' + }: ${Array.from(missingEnvironmentVariables).join( + ', ' + )}\nPlease check the configuration in rush-redis-cobuild-plugin.json file` + ); + } + return finalOptions; + } + + public async connectAsync(): Promise { + try { + await this._redisClient.connect(); + // Check the connection works at early stage + await this._redisClient.ping(); + } catch (e) { + throw new Error(`Failed to connect to redis server: ${e.message}`); + } + } + + public async disconnectAsync(): Promise { + try { + await this._redisClient.disconnect(); + } catch (e) { + throw new Error(`Failed to disconnect to redis server: ${e.message}`); + } + } + + /** + * Acquiring the lock based on the specific context. + * + * NOTE: this is a reentrant lock implementation + */ + public async acquireLockAsync(context: ICobuildContext): Promise { + const { _terminal: terminal } = this; + const { lockKey, lockExpireTimeInSeconds, runnerId } = context; + let result: boolean = false; + const lockKeyIdentifier: string = this._getLockKeyIdentifier(context); + try { + // According to the doc, the reply of set command is either "OK" or nil. The reply doesn't matter + await this._redisClient.set(lockKey, runnerId, { + NX: true, + // call EXPIRE in an atomic command + EX: lockExpireTimeInSeconds + // Do not specify GET here since using NX ane GET together requires Redis@7. + }); + // Just read the value by lock key to see wether it equals current runner id + const value: string | null = await this._redisClient.get(lockKey); + if (value === null) { + // This should not happen. + throw new Error(`Get redis key failed: ${lockKey}`); + } + result = value === runnerId; + if (result) { + terminal.writeDebugLine( + `Successfully acquired ${lockKeyIdentifier} to runner(${runnerId}) and it expires in ${lockExpireTimeInSeconds}s` + ); + } else { + terminal.writeDebugLine(`Failed to acquire ${lockKeyIdentifier}, locked by runner ${value}`); + } + } catch (e) { + throw new Error(`Error occurs when acquiring ${lockKeyIdentifier}: ${e.message}`); + } + return result; + } + + public async renewLockAsync(context: ICobuildContext): Promise { + const { _terminal: terminal } = this; + const { lockKey, lockExpireTimeInSeconds } = context; + const lockKeyIdentifier: string = this._getLockKeyIdentifier(context); + try { + await this._redisClient.expire(lockKey, lockExpireTimeInSeconds); + } catch (e) { + throw new Error(`Failed to renew ${lockKeyIdentifier}: ${e.message}`); + } + terminal.writeDebugLine(`Renewed ${lockKeyIdentifier} expires in ${lockExpireTimeInSeconds} seconds`); + } + + public async setCompletedStateAsync( + context: ICobuildContext, + state: ICobuildCompletedState + ): Promise { + const { _terminal: terminal } = this; + const { completedStateKey: key } = context; + const value: string = this._serializeCompletedState(state); + const completedStateKeyIdentifier: string = this._getCompletedStateKeyIdentifier(context); + try { + await this._redisClient.set(key, value); + } catch (e) { + throw new Error(`Failed to set ${completedStateKeyIdentifier}: ${e.message}`); + } + terminal.writeDebugLine(`Set ${completedStateKeyIdentifier}: ${value}`); + } + + public async getCompletedStateAsync(context: ICobuildContext): Promise { + const { _terminal: terminal } = this; + const { completedStateKey: key } = context; + const completedStateKeyIdentifier: string = this._getCompletedStateKeyIdentifier(context); + let state: ICobuildCompletedState | undefined; + try { + const value: string | null = await this._redisClient.get(key); + if (value) { + state = this._deserializeCompletedState(value); + } + terminal.writeDebugLine(`Get ${completedStateKeyIdentifier}: ${value}`); + } catch (e) { + throw new Error(`Failed to get ${completedStateKeyIdentifier}: ${e.message}`); + } + return state; + } + + private _serializeCompletedState(state: ICobuildCompletedState): string { + // Example: SUCCESS;1234567890 + // Example: FAILURE;1234567890 + const { status, cacheId } = state; + return [status, cacheId].join(COMPLETED_STATE_SEPARATOR); + } + + private _deserializeCompletedState(state: string): ICobuildCompletedState | undefined { + const [status, cacheId] = state.split(COMPLETED_STATE_SEPARATOR); + return { status: status as ICobuildCompletedState['status'], cacheId }; + } + + private _getLockKeyIdentifier(context: ICobuildContext): string { + let lockKeyIdentifier: string | undefined = this._lockKeyIdentifierMap.get(context); + if (lockKeyIdentifier === undefined) { + const { lockKey, packageName, phaseName } = context; + lockKeyIdentifier = `lock(${lockKey})_package(${packageName})_phase(${phaseName})`; + this._lockKeyIdentifierMap.set(context, lockKeyIdentifier); + } + return lockKeyIdentifier; + } + + private _getCompletedStateKeyIdentifier(context: ICobuildContext): string { + let completedStateKeyIdentifier: string | undefined = this._completedStateKeyIdentifierMap.get(context); + if (completedStateKeyIdentifier === undefined) { + const { completedStateKey, packageName, phaseName } = context; + completedStateKeyIdentifier = `completed_state(${completedStateKey})_package(${packageName})_phase(${phaseName})`; + this._completedStateKeyIdentifierMap.set(context, completedStateKeyIdentifier); + } + return completedStateKeyIdentifier; + } +} diff --git a/rush-plugins/rush-redis-cobuild-plugin/src/RushRedisCobuildPlugin.ts b/rush-plugins/rush-redis-cobuild-plugin/src/RushRedisCobuildPlugin.ts new file mode 100644 index 00000000000..4e8f07d7f70 --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-plugin/src/RushRedisCobuildPlugin.ts @@ -0,0 +1,40 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +import { Import } from '@rushstack/node-core-library'; +import type { IRushPlugin, RushSession, RushConfiguration } from '@rushstack/rush-sdk'; +import type { IRedisCobuildLockProviderOptions, RedisCobuildLockProvider } from './RedisCobuildLockProvider'; + +const RedisCobuildLockProviderModule: typeof import('./RedisCobuildLockProvider') = Import.lazy( + './RedisCobuildLockProvider', + require +); + +const PLUGIN_NAME: string = 'RedisCobuildPlugin'; + +/** + * @public + */ +export type IRushRedisCobuildPluginOptions = IRedisCobuildLockProviderOptions; + +/** + * @public + */ +export class RushRedisCobuildPlugin implements IRushPlugin { + public pluginName: string = PLUGIN_NAME; + + private _options: IRushRedisCobuildPluginOptions; + + public constructor(options: IRushRedisCobuildPluginOptions) { + this._options = options; + } + + public apply(rushSession: RushSession, rushConfiguration: RushConfiguration): void { + rushSession.hooks.initialize.tap(PLUGIN_NAME, () => { + rushSession.registerCobuildLockProviderFactory('redis', (): RedisCobuildLockProvider => { + const options: IRushRedisCobuildPluginOptions = this._options; + return new RedisCobuildLockProviderModule.RedisCobuildLockProvider(options, rushSession); + }); + }); + } +} diff --git a/rush-plugins/rush-redis-cobuild-plugin/src/index.ts b/rush-plugins/rush-redis-cobuild-plugin/src/index.ts new file mode 100644 index 00000000000..77bf9156355 --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-plugin/src/index.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 { RushRedisCobuildPlugin, IRushRedisCobuildPluginOptions } from './RushRedisCobuildPlugin'; + +export default RushRedisCobuildPlugin; +export { RedisCobuildLockProvider } from './RedisCobuildLockProvider'; +export { IRedisCobuildLockProviderOptions } from './RedisCobuildLockProvider'; +export { IRushRedisCobuildPluginOptions }; diff --git a/rush-plugins/rush-redis-cobuild-plugin/src/schemas/redis-config.schema.json b/rush-plugins/rush-redis-cobuild-plugin/src/schemas/redis-config.schema.json new file mode 100644 index 00000000000..d4283ba7be2 --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-plugin/src/schemas/redis-config.schema.json @@ -0,0 +1,70 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Configuration for cobuild lock with Redis configuration\n\nhttps://github.com/redis/node-redis/blob/master/docs/client-configuration.md", + "type": "object", + "additionalProperties": false, + "properties": { + "url": { + "type": "string", + "description": "redis[s]://[[username][:password]@][host][:port][/db-number]\n\n See the following links for more information:\n\nredis: https://www.iana.org/assignments/uri-schemes/prov/redis\n\nrediss: https://www.iana.org/assignments/uri-schemes/prov/rediss" + }, + "socket": { + "type": "object", + "description": "Socket connection properties. Unlisted net.connect properties (and tls.connect) are also supported", + "properties": { + "port": { + "description": "Redis server port. Default value is 6379", + "type": "number" + }, + "host": { + "description": "Redis server host. Default value is localhost", + "type": "string" + }, + "family": { + "description": "IP Stack version (one of 4 | 6 | 0). Default value is 0", + "type": "number" + }, + "path": { + "description": "path to the UNIX Socket", + "type": "string" + }, + "connectTimeout": { + "description": "Connection timeout in milliseconds. Default value is 5000", + "type": "number" + }, + "noDelay": { + "description": "Toggle Nagle's algorithm. Default value is true", + "type": "boolean" + }, + "keepAlive": { + "description": "Toggle keep alive on the socket", + "type": "boolean" + } + } + }, + "username": { + "description": "ACL username", + "type": "string" + }, + "passwordEnvironmentVariable": { + "description": "The environment variable used to get the ACL password", + "type": "string" + }, + "name": { + "description": "Redis client name", + "type": "string" + }, + "database": { + "description": "Redis database number", + "type": "number" + }, + "legacyMode": { + "description": "Maintain some backwards compatibility", + "type": "boolean" + }, + "pingInterval": { + "description": "Send PING command at interval (in ms). Useful with \"Azure Cache for Redis\".", + "type": "number" + } + } +} diff --git a/rush-plugins/rush-redis-cobuild-plugin/src/test/RedisCobuildLockProvider.test.ts b/rush-plugins/rush-redis-cobuild-plugin/src/test/RedisCobuildLockProvider.test.ts new file mode 100644 index 00000000000..c90fbb16075 --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-plugin/src/test/RedisCobuildLockProvider.test.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 { ConsoleTerminalProvider } from '@rushstack/node-core-library'; +import * as redisAPI from '@redis/client'; +import type { RedisClientType } from '@redis/client'; + +import { ICobuildCompletedState, ICobuildContext, OperationStatus, RushSession } from '@rushstack/rush-sdk'; +import { IRedisCobuildLockProviderOptions, RedisCobuildLockProvider } from '../RedisCobuildLockProvider'; + +const rushSession: RushSession = new RushSession({ + terminalProvider: new ConsoleTerminalProvider(), + getIsDebugMode: () => false +}); + +describe(RedisCobuildLockProvider.name, () => { + let storage: Record = {}; + beforeEach(() => { + jest.spyOn(redisAPI, 'createClient').mockImplementation(() => { + return { + expire: jest.fn().mockResolvedValue(undefined), + set: jest + .fn() + .mockImplementation((key: string, value: string, options?: { NX?: boolean; GET?: boolean }) => { + // https://redis.io/commands/set/ + const oldValue: string | undefined = storage[key]; + const { NX, GET } = options || {}; + let didSet: boolean = false; + if (NX) { + if (!storage[key]) { + storage[key] = value; + didSet = true; + } + } else { + storage[key] = value; + didSet = true; + } + + if (GET) { + if (oldValue === undefined) { + return null; + } else { + return oldValue; + } + } else { + if (didSet) { + return 'OK'; + } else { + return null; + } + } + }), + get: jest.fn().mockImplementation((key: string) => { + return storage[key]; + }) + } as unknown as RedisClientType; + }); + }); + + afterEach(() => { + jest.resetAllMocks(); + storage = {}; + }); + + function prepareSubject(): RedisCobuildLockProvider { + return new RedisCobuildLockProvider({} as IRedisCobuildLockProviderOptions, rushSession); + } + + const context: ICobuildContext = { + contextId: 'context_id', + cacheId: 'cache_id', + lockKey: 'lock_key', + lockExpireTimeInSeconds: 30, + completedStateKey: 'completed_state_key', + clusterId: 'cluster_id', + runnerId: 'runner_id', + packageName: 'package_name', + phaseName: 'phase_name' + }; + + it('expands options with environment variables', () => { + const expectedOptions = { + password: 'redis123' + }; + const actualOptions = RedisCobuildLockProvider.expandOptionsWithEnvironmentVariables( + { + passwordEnvironmentVariable: 'REDIS_PASS' + }, + { + REDIS_PASS: 'redis123' + } + ); + expect(actualOptions).toEqual(expectedOptions); + }); + + it('throws error with missing environment variables', () => { + expect(() => { + RedisCobuildLockProvider.expandOptionsWithEnvironmentVariables( + { + passwordEnvironmentVariable: 'REDIS_PASS' + }, + {} + ); + }).toThrowErrorMatchingSnapshot(); + }); + + it('acquires lock success', async () => { + const subject: RedisCobuildLockProvider = prepareSubject(); + const result: boolean = await subject.acquireLockAsync(context); + expect(result).toBe(true); + }); + + it('acquires lock is a reentrant lock', async () => { + const subject: RedisCobuildLockProvider = prepareSubject(); + const result1: boolean = await subject.acquireLockAsync(context); + expect(result1).toBe(true); + const result2: boolean = await subject.acquireLockAsync(context); + expect(result2).toBe(true); + }); + + it('acquires lock fails with a different runner', async () => { + const subject: RedisCobuildLockProvider = prepareSubject(); + const result1: boolean = await subject.acquireLockAsync(context); + expect(result1).toBe(true); + const cobuildContext: ICobuildContext = { + ...context, + runnerId: 'other_runner_id' + }; + const result2: boolean = await subject.acquireLockAsync(cobuildContext); + expect(result2).toBe(false); + }); + + it('set and get completedState works', async () => { + const subject: RedisCobuildLockProvider = prepareSubject(); + const cacheId: string = 'foo'; + const status: ICobuildCompletedState['status'] = OperationStatus.SuccessWithWarning; + expect(() => subject.setCompletedStateAsync(context, { status, cacheId })).not.toThrowError(); + const actualState: ICobuildCompletedState | undefined = await subject.getCompletedStateAsync(context); + expect(actualState?.cacheId).toBe(cacheId); + expect(actualState?.status).toBe(status); + }); +}); diff --git a/rush-plugins/rush-redis-cobuild-plugin/src/test/__snapshots__/RedisCobuildLockProvider.test.ts.snap b/rush-plugins/rush-redis-cobuild-plugin/src/test/__snapshots__/RedisCobuildLockProvider.test.ts.snap new file mode 100644 index 00000000000..f2e6e72eb4c --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-plugin/src/test/__snapshots__/RedisCobuildLockProvider.test.ts.snap @@ -0,0 +1,10 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`RedisCobuildLockProvider getCompletedStateKey works 1`] = `"cobuild:v1:123:abc:completed"`; + +exports[`RedisCobuildLockProvider getLockKey works 1`] = `"cobuild:v1:123:abc:lock"`; + +exports[`RedisCobuildLockProvider throws error with missing environment variables 1`] = ` +"The \\"RedisCobuildLockProvider\\" tries to access missing environment variable: REDIS_PASS +Please check the configuration in rush-redis-cobuild-plugin.json file" +`; diff --git a/rush-plugins/rush-redis-cobuild-plugin/tsconfig.json b/rush-plugins/rush-redis-cobuild-plugin/tsconfig.json new file mode 100644 index 00000000000..fbc2f5c0a6c --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-plugin/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "./node_modules/@rushstack/heft-node-rig/profiles/default/tsconfig-base.json", + + "compilerOptions": { + "types": ["heft-jest", "node"] + } +} diff --git a/rush.json b/rush.json index 298365cc70e..5b45c84c180 100644 --- a/rush.json +++ b/rush.json @@ -833,6 +833,12 @@ "reviewCategory": "tests", "shouldPublish": false }, + { + "packageName": "rush-redis-cobuild-plugin-integration-test", + "projectFolder": "build-tests/rush-redis-cobuild-plugin-integration-test", + "reviewCategory": "tests", + "shouldPublish": false + }, { "packageName": "set-webpack-public-path-plugin-webpack4-test", "projectFolder": "build-tests/set-webpack-public-path-plugin-webpack4-test", @@ -1097,6 +1103,12 @@ "reviewCategory": "libraries", "shouldPublish": false }, + { + "packageName": "@rushstack/rush-redis-cobuild-plugin", + "projectFolder": "rush-plugins/rush-redis-cobuild-plugin", + "reviewCategory": "libraries", + "versionPolicyName": "rush" + }, { "packageName": "@rushstack/rush-serve-plugin", "projectFolder": "rush-plugins/rush-serve-plugin",