diff --git a/.eslintrc.json b/.eslintrc.json index 054c887c94..68dfeb7f25 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,11 +1,7 @@ { "root": true, - "parserOptions": { - "ecmaVersion": 2020 - }, - "extends": ["airbnb-base", "plugin:jest/recommended", "plugin:node/recommended", "prettier"], - "plugins": ["jest", "node"], - "ignorePatterns": ["website/**/*"], + "ignorePatterns": ["website/**/*", "__fixtures__"], + "plugins": ["@nrwl/nx"], "settings": { "import/resolver": { "node": { @@ -13,45 +9,83 @@ } } }, - "rules": { - "class-methods-use-this": [ - "error", - { - "exceptMethods": ["defaultOptions", "otherCommandConfigs", "requiresGit"] - } - ], - "consistent-return": "off", - "curly": ["error", "all"], - "no-param-reassign": [ - "error", - { - "props": true, - "ignorePropertyModificationsFor": ["err", "obj", "pkg"] + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": { + "@nrwl/nx/enforce-module-boundaries": [ + "error", + { + "enforceBuildableLibDependency": true, + "allow": [], + "depConstraints": [ + { + "sourceTag": "*", + "onlyDependOnLibsWithTags": ["*"] + } + ] + } + ] } - ], - "no-restricted-syntax": ["error", "ForInStatement", "LabeledStatement", "WithStatement"], - "no-underscore-dangle": [ - "error", - { - "allowAfterThis": true + }, + { + "files": ["*.ts", "*.tsx"], + "extends": ["plugin:@nrwl/nx/typescript"], + "rules": { + "@typescript-eslint/no-empty-function": "off" } - ], - "no-use-before-define": [ - "error", - { - "functions": false, - "classes": false + }, + { + "files": ["*.js", "*.jsx"], + "extends": ["airbnb-base", "plugin:node/recommended", "plugin:@nrwl/nx/javascript"], + "rules": { + "@typescript-eslint/no-empty-function": "off", + "class-methods-use-this": [ + "error", + { + "exceptMethods": ["defaultOptions", "otherCommandConfigs", "requiresGit"] + } + ], + "consistent-return": "off", + "curly": ["error", "all"], + "no-param-reassign": [ + "error", + { + "props": true, + "ignorePropertyModificationsFor": ["err", "obj", "pkg"] + } + ], + "no-restricted-syntax": ["error", "ForInStatement", "LabeledStatement", "WithStatement"], + "no-underscore-dangle": [ + "error", + { + "allowAfterThis": true + } + ], + "no-use-before-define": [ + "error", + { + "functions": false, + "classes": false + } + ], + "node/no-unsupported-features/es-syntax": "off", + "prefer-destructuring": "off", + "prefer-object-spread": "off", + "strict": "off", + "default-param-last": "warn", + "max-len": "off", + "arrow-body-style": "off" } - ], - "node/no-unsupported-features/es-syntax": "off", - "prefer-destructuring": "off", - "prefer-object-spread": "off", - "strict": "off", - "default-param-last": "warn", - "max-len": "off", - "arrow-body-style": "off" - }, - "overrides": [ + }, + { + "files": ["*.spec.ts", "*.spec.tsx", "*.spec.js", "*.spec.jsx", "*.test.js"], + "extends": ["plugin:jest/recommended"], + "env": { + "jest": true + }, + "rules": {} + }, { "files": "commands/*/command.js", "rules": { @@ -101,6 +135,11 @@ "rules": { "no-useless-catch": "off" } + }, + { + "files": "*.json", + "parser": "jsonc-eslint-parser", + "rules": {} } ] } diff --git a/.github/actions/install-node-and-dependencies/action.yml b/.github/actions/install-node-and-dependencies/action.yml index d96816eb66..fe8fa03f9b 100644 --- a/.github/actions/install-node-and-dependencies/action.yml +++ b/.github/actions/install-node-and-dependencies/action.yml @@ -9,15 +9,15 @@ runs: using: "composite" steps: - name: Install node and npm based on the given values (or the volta config in package.json) - uses: volta-cli/action@v1 + uses: volta-cli/action@v4 with: node-version: ${{ inputs.node-version }} - name: Get npm cache directory and node version for cache key id: npm-cache-dir run: | - echo "::set-output name=node_version::$(node --version)" - echo "::set-output name=dir::$(npm config get cache)" + echo "node_version=$(node --version)" >> $GITHUB_OUTPUT + echo "dir=$(npm config get cache)" >> $GITHUB_OUTPUT shell: bash - uses: actions/cache@v3 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3aa66ee4fb..0977730f8e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,22 +15,47 @@ concurrency: env: NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} + NX_CLOUD_DISTRIBUTED_EXECUTION: true + NX_BRANCH: ${{ github.event.number || github.ref_name }} jobs: - lint: + main: + name: Nx Cloud - Main Job runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Derive appropriate SHAs for base and head for `nx affected` commands + uses: nrwl/nx-set-shas@v3 - name: Install primary node version (see volta config in package.json) and dependencies uses: ./.github/actions/install-node-and-dependencies - - run: npm run format:check - - run: npm run ci:lint - - e2e: - needs: [lint] + - name: Run parallel distributed tasks + uses: jameshenry/parallel-bash-commands@v1 + with: + cmd1: npx nx-cloud record -- npx nx format:check + cmd2: npx nx-cloud record -- npx nx workspace-lint + cmd3: npx nx-cloud record -- npm run ci:lint + cmd4: npx nx run-many --target=lint --all --parallel=3 + # TODO: update this once project targets are converted + cmd5: npx nx run-many --target=test --projects=\"libs-*,nx-*\" --parallel=3 + + - run: PUBLISHED_VERSION=999.9.9-e2e.0 npx nx run-many --target=run-e2e-tests-process --parallel=2 + + - name: Stop all running agents for this CI run + # It's important that we always run this step, otherwise in the case of any failures in preceding non-Nx steps, the agents will keep running and waste billable minutes + if: ${{ always() }} + run: npx nx-cloud stop-all-agents + + agents: + name: Nx Cloud - Agent ${{ matrix.agent }} runs-on: ubuntu-latest + strategy: + matrix: + agent: [1, 2, 3, 4] steps: - uses: actions/checkout@v3 @@ -42,10 +67,17 @@ jobs: - name: Install primary node version (see volta config in package.json) and dependencies uses: ./.github/actions/install-node-and-dependencies - - run: npm run e2e + - run: npm run e2e-start-local-registry + + - run: PUBLISHED_VERSION=999.9.9-e2e.0 npm run e2e-build-package-publish + + - name: Start Nx Agent ${{ matrix.agent }} + run: npx nx-cloud start-agent + env: + NX_AGENT_NAME: ${{matrix.agent}} + # TODO: migrate to cacheable/distributable targets test: - needs: [lint] runs-on: ubuntu-latest strategy: fail-fast: false @@ -67,8 +99,8 @@ jobs: - run: npm run ${{ matrix.script }} + # TODO: migrate to cacheable/distributable targets windows: - needs: [lint] runs-on: windows-latest strategy: fail-fast: false diff --git a/.verdaccio/config.yml b/.verdaccio/config.yml new file mode 100644 index 0000000000..0f930f4657 --- /dev/null +++ b/.verdaccio/config.yml @@ -0,0 +1,42 @@ +# path to a directory with all packages +# JH: changed to dist +storage: ../dist/local-registry/storage + +auth: + htpasswd: + file: ./htpasswd + +# a list of other known repositories we can talk to +uplinks: + npmjs: + url: https://registry.npmjs.org/ + cache: true + yarn: + url: https://registry.yarnpkg.com + cache: true + +packages: + "@*/*": + # scoped packages + access: $all + publish: $all + unpublish: $all + proxy: npmjs + + "**": + # allow all users (including non-authenticated users) to read and + # publish all packages + access: $all + + # allow all users (including non-authenticated users) to publish/publish packages + publish: $all + unpublish: $all + + # if package is not available locally, proxy requests to 'yarn' registry + proxy: npmjs + +# log settings +logs: + type: stdout + format: pretty + level: http diff --git a/.verdaccio/htpasswd b/.verdaccio/htpasswd new file mode 100644 index 0000000000..8391cd4b0a --- /dev/null +++ b/.verdaccio/htpasswd @@ -0,0 +1 @@ +test:$6FrCaT/v0dwE:autocreated 2020-03-25T19:10:50.254Z diff --git a/CHANGELOG.md b/CHANGELOG.md index 46a77bbc8f..dd48033b67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +### Bug Fixes + +- **run:** detect target configuration in package.json files ([#3432](https://github.com/lerna/lerna/issues/3432)) ([798aae1](https://github.com/lerna/lerna/commit/798aae14656c9fbbde62bd941fe3a11450112f3b)) + +### Features + +- **version:** bump prerelease versions from conventional commits ([#3362](https://github.com/lerna/lerna/issues/3362)) ([2288b3a](https://github.com/lerna/lerna/commit/2288b3aca4753b3943ea845ef8785321e5f77610)) + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) ### Bug Fixes diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 40102e8820..08d98463b7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -75,6 +75,21 @@ $ npx jest --config jest.integration.js # etc ``` +### Coverage + +If you would like to check test coverage, run the coverage script, then open +`coverage/lcov-report/index.html` in your favorite browser. + +```sh +$ npm test -- --coverage + +# OS X +$ open coverage/lcov-report/index.html + +# Linux +$ xdg-open coverage/lcov-report/index.html +``` + ### Run Integration Tests ```sh @@ -106,23 +121,15 @@ $ npm run lint -- --fix ### Local CLI Testing -If you want to test out Lerna on local repos, you can leverage verdaccio as a local npm regsitry. +If you want to test out Lerna on local repos, you can leverage verdaccio as a local npm registry. -Open a new terminal window and run the following from the root of the workspace: +You will need two different terminal windows for this as one of them will contain the long-running serve command of the verdaccio instance (your local npm registry) which you will be publishing to. -```sh -npx lerna run --scope @lerna/e2e start-verdaccio -``` - -This will run verdaccio on http://localhost:4872 - -> NOTE: You may wish to set the log level of verdaccio to be "http" in e2e/local-registry/config.yml to see all the publishing and install activity - -In another terminal window you can now build and publish any new version (in this example `999.9.9`) to that local registry: - -```sh -npm run e2e:local-publish -- 999.9.9 -``` +- Run `npm run local-registry start` in Terminal 1 (keep it running) +- Run `npm adduser --registry http://localhost:4873` in Terminal 2 (real credentials are not required, you just need to + be logged in. You can use test/test/test@test.io.) +- Run `npm run local-registry enable` in Terminal 2 +- Run `npm run local-release 999.9.9 --local` in Terminal 2 - you can choose any nonexistent version number here, but it's recommended to use something which is different from the current major You can then install your local version of lerna wherever you want by leveraging the `--registry` flag on the npm/npx client. @@ -130,53 +137,38 @@ E.g. you could start a new lerna workspace with your new version ```sh cd /some/path/on/your/machine -npx --registry=http://localhost:4872/ lerna@999.9.9 init -npm --registry=http://localhost:4872/ install +npx --registry=http://localhost:4873/ lerna@999.9.9 init +npm --registry=http://localhost:4873/ install npx lerna --version # 999.9.9 ``` -To forcibly kill the running verdaccio instance you can run: - -```sh -npx lerna run --scope @lerna/e2e kill-verdaccio -``` +**NOTE:** After you finish with local testing don't forget to stop the local registry (e.g. closing the Terminal 1) and disabling the local registry using `npm run local-registry disable`. Keeping the local registry enabled will change your lock file resolutions to `localhost:4873` on the next `npm install`. You can also run `npm run local-registry clear` to clean all packages in that local registry. -Which will simply attempt to kill the process running on port `4872`. +**NOTE:** To use this newly published local version, you need to make a new workspace or change all of your target packages to this new version, eg: `"lerna": "^999.9.9",` and re-run `npm install` in your testing project. ### Run E2E Tests +> NOTE: You will need to have `pnpm` installed at version `7.7.0` or later in order to run the full suite of e2e tests + In addition to our lower level testing, we also have a suite of e2e tests which actually publish our packages to a locally running npm registry (using verdaccio in the same way as described in the section above) and use the `lerna` CLI directly. These are our most valuable tests because they get us as close as possible to the experience of our users. -To build, version and publish all the packages, as well as run all e2e tests using those same packages, you just need to run a single command: +Because of this high-value nature of the tests, they are also much slower than unit tests. Therefore they are split up into different e2e projects in the workspace which can be run independently and can benefit from more granular caching (thanks to Nx). + +To run the e2e tests for a particular project, such as `e2e/info`, which tests the `lerna info` CLI command, you can run: ```sh -npm run e2e +npx nx e2e e2e-info ``` -If you want to run the e2e tests for just a single command (such as `lerna info`), you can forward arguments onto the underlying `jest` process like so: +You can forward arguments onto the underlying `jest` process like so: ```sh -# This will cause jest to only match against the `lerna-info.spec.ts` file and ignore the others -npm run e2e -- --testRegex=lerna-info +# This will cause jest to only match against tests which have `qqqq` in their `describe()` or `it()` description (thanks to -t), and update the snapshots (thanks to -u) +npx nx e2e e2e-info -t qqqq -u ``` > NOTE: The building, versioning and publishing of the packages will be the same regardless of the jest flags passed -### Coverage - -If you would like to check test coverage, run the coverage script, then open -`coverage/lcov-report/index.html` in your favorite browser. - -```sh -$ npm test -- --coverage - -# OS X -$ open coverage/lcov-report/index.html - -# Linux -$ xdg-open coverage/lcov-report/index.html -``` - ### Releasing If you are a member of Lerna's [GitHub org](https://github.com/orgs/lerna/people) and have read-write privileges in Lerna's [npm org](https://www.npmjs.com/org/lerna) _with 2-factor auth enabled_, congratulations, you can cut a release! diff --git a/commands/__mocks__/@lerna/prompt.js b/commands/__mocks__/@lerna/prompt.js index e88750341d..de81c97cdb 100644 --- a/commands/__mocks__/@lerna/prompt.js +++ b/commands/__mocks__/@lerna/prompt.js @@ -20,16 +20,9 @@ exports.promptSelectOne = mockSelect; exports.promptTextInput = mockInput; const semverIndex = new Map( - [ - "patch", - "minor", - "major", - "prepatch", - "preminor", - "premajor", - "PRERELEASE", - "CUSTOM", - ].map((keyword, idx) => [keyword, idx]) + ["patch", "minor", "major", "prepatch", "preminor", "premajor", "PRERELEASE", "CUSTOM"].map( + (keyword, idx) => [keyword, idx] + ) ); mockSelect.chooseBump = (keyword) => { diff --git a/commands/add/CHANGELOG.md b/commands/add/CHANGELOG.md index 7a0621aaae..56fd7e85d9 100644 --- a/commands/add/CHANGELOG.md +++ b/commands/add/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/add + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/add diff --git a/commands/add/package.json b/commands/add/package.json index 28ac0bd321..a51b827514 100644 --- a/commands/add/package.json +++ b/commands/add/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/add", - "version": "6.0.3", + "version": "6.1.0", "description": "Add a dependency to matched packages", "keywords": [ "lerna", diff --git a/commands/bootstrap/CHANGELOG.md b/commands/bootstrap/CHANGELOG.md index 20b9d07323..88baf41d0d 100644 --- a/commands/bootstrap/CHANGELOG.md +++ b/commands/bootstrap/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/bootstrap + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/bootstrap diff --git a/commands/bootstrap/package.json b/commands/bootstrap/package.json index e194d57ca6..c026f302ae 100644 --- a/commands/bootstrap/package.json +++ b/commands/bootstrap/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/bootstrap", - "version": "6.0.3", + "version": "6.1.0", "description": "Link local packages together and install remaining package dependencies", "keywords": [ "lerna", diff --git a/commands/changed/CHANGELOG.md b/commands/changed/CHANGELOG.md index 633031c3eb..6e3ccf9cf8 100644 --- a/commands/changed/CHANGELOG.md +++ b/commands/changed/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/changed + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/changed diff --git a/commands/changed/package.json b/commands/changed/package.json index b97b454cdf..aa07bdf052 100644 --- a/commands/changed/package.json +++ b/commands/changed/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/changed", - "version": "6.0.3", + "version": "6.1.0", "description": "List local packages that have changed since the last tagged release", "keywords": [ "lerna", diff --git a/commands/clean/CHANGELOG.md b/commands/clean/CHANGELOG.md index d403e6a94b..b68a4c753e 100644 --- a/commands/clean/CHANGELOG.md +++ b/commands/clean/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/clean + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/clean diff --git a/commands/clean/package.json b/commands/clean/package.json index e834754440..c4b7205b84 100644 --- a/commands/clean/package.json +++ b/commands/clean/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/clean", - "version": "6.0.3", + "version": "6.1.0", "description": "Remove the node_modules directory from all packages", "keywords": [ "lerna", diff --git a/commands/create/CHANGELOG.md b/commands/create/CHANGELOG.md index e92ff8f872..8a78059ef2 100644 --- a/commands/create/CHANGELOG.md +++ b/commands/create/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/create + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/create diff --git a/commands/create/package.json b/commands/create/package.json index d225d6575c..d53f7ea517 100644 --- a/commands/create/package.json +++ b/commands/create/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/create", - "version": "6.0.3", + "version": "6.1.0", "description": "Create a new lerna-managed package", "keywords": [ "lerna", diff --git a/commands/diff/CHANGELOG.md b/commands/diff/CHANGELOG.md index 2bc114dead..73913218c8 100644 --- a/commands/diff/CHANGELOG.md +++ b/commands/diff/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/diff + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/diff diff --git a/commands/diff/package.json b/commands/diff/package.json index 9b8c4a379a..b073f1609f 100644 --- a/commands/diff/package.json +++ b/commands/diff/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/diff", - "version": "6.0.3", + "version": "6.1.0", "description": "Diff all packages or a single package since the last release", "keywords": [ "lerna", diff --git a/commands/exec/CHANGELOG.md b/commands/exec/CHANGELOG.md index 5b9c805b43..96a99aa9c1 100644 --- a/commands/exec/CHANGELOG.md +++ b/commands/exec/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/exec + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/exec diff --git a/commands/exec/package.json b/commands/exec/package.json index 519728ad7d..69ae7160ea 100644 --- a/commands/exec/package.json +++ b/commands/exec/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/exec", - "version": "6.0.3", + "version": "6.1.0", "description": "Execute an arbitrary command in each package", "keywords": [ "lerna", diff --git a/commands/import/CHANGELOG.md b/commands/import/CHANGELOG.md index 39d3f1e7ee..805a7cd910 100644 --- a/commands/import/CHANGELOG.md +++ b/commands/import/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/import + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/import diff --git a/commands/import/package.json b/commands/import/package.json index 3a8fc402db..3513aa1b8b 100644 --- a/commands/import/package.json +++ b/commands/import/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/import", - "version": "6.0.3", + "version": "6.1.0", "description": "Import a package into the monorepo with commit history", "keywords": [ "lerna", diff --git a/commands/info/CHANGELOG.md b/commands/info/CHANGELOG.md index e0f765f078..60da291db0 100644 --- a/commands/info/CHANGELOG.md +++ b/commands/info/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/info + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/info diff --git a/commands/info/package.json b/commands/info/package.json index 80cba1188b..9752af3cdd 100644 --- a/commands/info/package.json +++ b/commands/info/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/info", - "version": "6.0.3", + "version": "6.1.0", "description": "Prints local environment information", "keywords": [ "lerna", diff --git a/commands/init/CHANGELOG.md b/commands/init/CHANGELOG.md index fd9690156f..f6a8ac237e 100644 --- a/commands/init/CHANGELOG.md +++ b/commands/init/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/init + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/init diff --git a/commands/init/package.json b/commands/init/package.json index c7c4dc5834..581c1e740c 100644 --- a/commands/init/package.json +++ b/commands/init/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/init", - "version": "6.0.3", + "version": "6.1.0", "description": "Create a new Lerna repo or upgrade an existing repo to the current version of Lerna", "keywords": [ "lerna", diff --git a/commands/link/CHANGELOG.md b/commands/link/CHANGELOG.md index facee62295..876da040f7 100644 --- a/commands/link/CHANGELOG.md +++ b/commands/link/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/link + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/link diff --git a/commands/link/package.json b/commands/link/package.json index fffcaa9cea..0df35f1682 100644 --- a/commands/link/package.json +++ b/commands/link/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/link", - "version": "6.0.3", + "version": "6.1.0", "description": "Symlink together all packages that are dependencies of each other", "keywords": [ "lerna", diff --git a/commands/list/CHANGELOG.md b/commands/list/CHANGELOG.md index ba85657763..50b8f18068 100644 --- a/commands/list/CHANGELOG.md +++ b/commands/list/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/list + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/list diff --git a/commands/list/package.json b/commands/list/package.json index 7e145ea550..dd232839ac 100644 --- a/commands/list/package.json +++ b/commands/list/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/list", - "version": "6.0.3", + "version": "6.1.0", "description": "List local packages", "keywords": [ "lerna", diff --git a/commands/publish/CHANGELOG.md b/commands/publish/CHANGELOG.md index 5bfccaf4b6..ab123eb6be 100644 --- a/commands/publish/CHANGELOG.md +++ b/commands/publish/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/publish + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) ### Bug Fixes diff --git a/commands/publish/README.md b/commands/publish/README.md index 7337294241..059416d808 100644 --- a/commands/publish/README.md +++ b/commands/publish/README.md @@ -118,6 +118,15 @@ This option can be used to publish a [`prerelease`](http://carrot.is/coding/npm_ > Note: the `latest` tag is the one that is used when a user runs `npm install my-package`. > To install a different tag, a user can run `npm install my-package@prerelease`. +> + +### `--force-publish` + +To be used with [`--canary`](#--canary) to publish a canary version of all packages in your monorepo. This flag can be helpful when you need to make canary releases of packages beyond what was changed in the most recent commit. + +``` +lerna publish --canary --force-publish +``` ### `--git-head ` diff --git a/commands/publish/index.js b/commands/publish/index.js index 16b3007760..2892169dd9 100644 --- a/commands/publish/index.js +++ b/commands/publish/index.js @@ -374,14 +374,16 @@ class PublishCommand extends Command { }).filter((node) => !node.pkg.private) ); - const makeVersion = (fallback) => ({ lastVersion = fallback, refCount, sha }) => { - // the next version is bumped without concern for preid or current index - const nextVersion = semver.inc(lastVersion.replace(this.tagPrefix, ""), release.replace("pre", "")); - - // semver.inc() starts a new prerelease at .0, git describe starts at .1 - // and build metadata is always ignored when comparing dependency ranges - return `${nextVersion}-${preid}.${Math.max(0, refCount - 1)}+${sha}`; - }; + const makeVersion = + (fallback) => + ({ lastVersion = fallback, refCount, sha }) => { + // the next version is bumped without concern for preid or current index + const nextVersion = semver.inc(lastVersion.replace(this.tagPrefix, ""), release.replace("pre", "")); + + // semver.inc() starts a new prerelease at .0, git describe starts at .1 + // and build metadata is always ignored when comparing dependency ranges + return `${nextVersion}-${preid}.${Math.max(0, refCount - 1)}+${sha}`; + }; if (this.project.isIndependent()) { // each package is described against its tags only diff --git a/commands/publish/package.json b/commands/publish/package.json index 565a552dd5..25bc054a37 100644 --- a/commands/publish/package.json +++ b/commands/publish/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/publish", - "version": "6.0.3", + "version": "6.1.0", "description": "Publish packages in the current project", "keywords": [ "lerna", diff --git a/commands/run/CHANGELOG.md b/commands/run/CHANGELOG.md index e0293d003f..7bf8e87f6e 100644 --- a/commands/run/CHANGELOG.md +++ b/commands/run/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +### Bug Fixes + +- **run:** detect target configuration in package.json files ([#3432](https://github.com/lerna/lerna/issues/3432)) ([798aae1](https://github.com/lerna/lerna/commit/798aae14656c9fbbde62bd941fe3a11450112f3b)) + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/run diff --git a/commands/run/index.js b/commands/run/index.js index 75a6aae308..d183838265 100644 --- a/commands/run/index.js +++ b/commands/run/index.js @@ -188,7 +188,7 @@ class RunCommand extends Command { } } - runScriptsUsingNx() { + async runScriptsUsingNx() { if (this.options.ci) { process.env.CI = "true"; } @@ -199,7 +199,7 @@ class RunCommand extends Command { } performance.mark("init-local"); this.configureNxOutput(); - const { targetDependencies, options, extraOptions } = this.prepNxOptions(); + const { targetDependencies, options, extraOptions } = await this.prepNxOptions(); if (this.packagesWithScript.length === 1) { const { runOne } = require("nx/src/command-line/run-one"); @@ -231,14 +231,18 @@ class RunCommand extends Command { } } - prepNxOptions() { + async prepNxOptions() { const nxJsonExists = existsSync(path.join(this.project.rootPath, "nx.json")); const { readNxJson } = require("nx/src/config/configuration"); const nxJson = readNxJson(); const targetDependenciesAreDefined = Object.keys(nxJson.targetDependencies || nxJson.targetDefaults || {}).length > 0; - const mimicLernaDefaultBehavior = !(nxJsonExists && targetDependenciesAreDefined); + + const hasProjectSpecificNxConfiguration = this.packagesWithScript.some((p) => !!p.get("nx")); + const hasCustomizedNxConfiguration = + (nxJsonExists && targetDependenciesAreDefined) || hasProjectSpecificNxConfiguration; + const mimicLernaDefaultBehavior = !hasCustomizedNxConfiguration; const targetDependencies = this.toposort && !this.options.parallel && mimicLernaDefaultBehavior @@ -276,36 +280,36 @@ class RunCommand extends Command { __overrides__: this.args.map((t) => t.toString()), }; - if (!mimicLernaDefaultBehavior) { + if (hasCustomizedNxConfiguration) { this.logger.verbose( this.name, - "nx.json with targetDefaults was found. Task dependencies will be automatically included." + "Nx target configuration was found. Task dependencies will be automatically included." ); if (this.options.parallel || this.options.sort !== undefined) { this.logger.warn( this.name, - `"parallel", "sort", and "no-sort" are ignored when nx.json has targetDefaults defined. See https://lerna.js.org/docs/lerna6-obsolete-options for details.` + `"parallel", "sort", and "no-sort" are ignored when Nx targets are configured. See https://lerna.js.org/docs/lerna6-obsolete-options for details.` ); } if (this.options.includeDependencies) { this.logger.info( this.name, - `Using the "include-dependencies" option when nx.json has targetDefaults defined will include both task dependencies detected by Nx and project dependencies detected by Lerna. See https://lerna.js.org/docs/lerna6-obsolete-options#--include-dependencies for details.` + `Using the "include-dependencies" option when Nx targets are configured will include both task dependencies detected by Nx and project dependencies detected by Lerna. See https://lerna.js.org/docs/lerna6-obsolete-options#--include-dependencies for details.` ); } if (this.options.ignore) { this.logger.info( this.name, - `Using the "ignore" option when nx.json has targetDefaults defined will exclude only tasks that are not determined to be required by Nx. See https://lerna.js.org/docs/lerna6-obsolete-options#--ignore for details.` + `Using the "ignore" option when Nx targets are configured will exclude only tasks that are not determined to be required by Nx. See https://lerna.js.org/docs/lerna6-obsolete-options#--ignore for details.` ); } } else { this.logger.verbose( this.name, - "nx.json was not found or is missing targetDefaults. Task dependencies will not be automatically included." + "Nx target configuration was not found. Task dependencies will not be automatically included." ); } diff --git a/commands/run/package.json b/commands/run/package.json index 680c6b28b0..a1ddae6b80 100644 --- a/commands/run/package.json +++ b/commands/run/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/run", - "version": "6.0.3", + "version": "6.1.0", "description": "Run an npm script in each package that contains that script", "keywords": [ "lerna", diff --git a/commands/version/CHANGELOG.md b/commands/version/CHANGELOG.md index 3bf22f8e62..e9f974670b 100644 --- a/commands/version/CHANGELOG.md +++ b/commands/version/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +### Features + +- **version:** bump prerelease versions from conventional commits ([#3362](https://github.com/lerna/lerna/issues/3362)) ([2288b3a](https://github.com/lerna/lerna/commit/2288b3aca4753b3943ea845ef8785321e5f77610)) + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) ### Bug Fixes diff --git a/commands/version/README.md b/commands/version/README.md index ce303e30e4..e78ce3b571 100644 --- a/commands/version/README.md +++ b/commands/version/README.md @@ -55,6 +55,7 @@ Running `lerna version --conventional-commits` without the above flags will rele - [`--conventional-commits`](#--conventional-commits) - [`--conventional-graduate`](#--conventional-graduate) - [`--conventional-prerelease`](#--conventional-prerelease) + - [`--conventional-bump-prerelease`](#--conventional-bump-prerelease) - [`--create-release `](#--create-release-type) - [`--exact`](#--exact) - [`--force-publish`](#--force-publish) @@ -201,6 +202,21 @@ lerna version --conventional-commits --conventional-prerelease When run with this flag, `lerna version` will release with prerelease versions the specified packages (comma-separated) or all packages using `*`. Releases all unreleased changes as pre(patch/minor/major/release) by prefixing the version recommendation from `conventional-commits` with `pre`, eg. if present changes include a feature commit, the recommended bump will be `minor`, so this flag will result in a `preminor` release. If changes are present for packages that are not specified (if specifying packages), or for packages that are already in prerelease, those packages will be versioned as they normally would using `--conventional-commits`. +### `--conventional-bump-prerelease` + +```sh +lerna version --conventional-commits --conventional-prerelease --conventional-bump-prerelease +``` + +When run with this flag, `lerna version` will release with bumped prerelease versions even if already released packages are prereleases. Releases all unreleased changes as pre(patch/minor/major/release) by prefixing the version recommendation from `conventional-commits` with `pre`, eg. if present changes include a feature commit, the recommended bump will be `minor`, so this flag will result in a `preminor` release. If not used just a prerelease bump will be applied to prereleased packages. + +```sh +Changes: + - major: 1.0.0-alpha.0 => 2.0.0-alpha.0 + - minor: 1.0.0-alpha.0 => 1.1.0-alpha.0 + - patch: 1.0.0-alpha.0 => 1.0.1-alpha.0 +``` + ### `--create-release ` ```sh diff --git a/commands/version/__tests__/version-conventional-commits.test.js b/commands/version/__tests__/version-conventional-commits.test.js index 93a886df6f..f5784ad6b1 100644 --- a/commands/version/__tests__/version-conventional-commits.test.js +++ b/commands/version/__tests__/version-conventional-commits.test.js @@ -91,6 +91,33 @@ describe("--conventional-commits", () => { }); }); + it("should call recommended version with conventionalBumpPrerelease set", async () => { + prereleaseVersionBumps.forEach((bump) => recommendVersion.mockResolvedValueOnce(bump)); + const cwd = await initFixture("prerelease-independent"); + + await lernaVersion(cwd)( + "--conventional-commits", + "--conventional-prerelease", + "--conventional-bump-prerelease" + ); + + prereleaseVersionBumps.forEach((version, name) => { + const prereleaseId = semver.prerelease(version)[0]; + expect(recommendVersion).toHaveBeenCalledWith(expect.objectContaining({ name }), "independent", { + changelogPreset: undefined, + rootPath: cwd, + tagPrefix: "v", + prereleaseId, + conventionalBumpPrerelease: true, + }); + expect(updateChangelog).toHaveBeenCalledWith( + expect.objectContaining({ name, version }), + "independent", + { changelogPreset: undefined, rootPath: cwd, tagPrefix: "v" } + ); + }); + }); + it("should graduate prerelease version bumps and generate CHANGELOG", async () => { versionBumps.forEach((bump) => recommendVersion.mockResolvedValueOnce(bump)); const cwd = await initFixture("prerelease-independent"); diff --git a/commands/version/command.js b/commands/version/command.js index d82bd24c85..80b9c6e727 100644 --- a/commands/version/command.js +++ b/commands/version/command.js @@ -32,6 +32,10 @@ exports.builder = (yargs, composed) => { describe: "Version changed packages as prereleases when using --conventional-commits.", // type must remain ambiguous because it is overloaded (boolean _or_ string _or_ array) }, + "conventional-bump-prerelease": { + describe: "Bumps prerelease versions if conventional commits requires it.", + type: "boolean", + }, "changelog-preset": { describe: "Custom conventional-changelog preset.", type: "string", diff --git a/commands/version/index.js b/commands/version/index.js index e4fbf24c87..a6bfa7d5d6 100644 --- a/commands/version/index.js +++ b/commands/version/index.js @@ -367,7 +367,7 @@ class VersionCommand extends Command { recommendVersions(resolvePrereleaseId) { const independentVersions = this.project.isIndependent(); - const { changelogPreset, conventionalGraduate } = this.options; + const { changelogPreset, conventionalGraduate, conventionalBumpPrerelease } = this.options; const rootPath = this.project.manifest.location; const type = independentVersions ? "independent" : "fixed"; const prereleasePackageNames = this.getPrereleasePackageNames(); @@ -394,6 +394,7 @@ class VersionCommand extends Command { rootPath, tagPrefix: this.tagPrefix, prereleaseId: getPrereleaseId(node), + conventionalBumpPrerelease, }) ) ); diff --git a/commands/version/package.json b/commands/version/package.json index 4515864ab5..e9f8d1176c 100644 --- a/commands/version/package.json +++ b/commands/version/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/version", - "version": "6.0.3", + "version": "6.1.0", "description": "Bump version of packages changed since the last release", "keywords": [ "lerna", diff --git a/core/child-process/CHANGELOG.md b/core/child-process/CHANGELOG.md index 18a822d2de..3da71e2a13 100644 --- a/core/child-process/CHANGELOG.md +++ b/core/child-process/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/child-process + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/child-process diff --git a/core/child-process/package.json b/core/child-process/package.json index 215a9f8f9d..db6b2f001d 100644 --- a/core/child-process/package.json +++ b/core/child-process/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/child-process", - "version": "6.0.3", + "version": "6.1.0", "description": "Lerna's internal child_process wrapper", "keywords": [ "lerna", diff --git a/core/cli/CHANGELOG.md b/core/cli/CHANGELOG.md index de554b5af2..c54c1c830e 100644 --- a/core/cli/CHANGELOG.md +++ b/core/cli/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/cli + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/cli diff --git a/core/cli/package.json b/core/cli/package.json index 77ba643631..35cd65beaf 100644 --- a/core/cli/package.json +++ b/core/cli/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/cli", - "version": "6.0.3", + "version": "6.1.0", "description": "Lerna's CLI", "keywords": [ "lerna", diff --git a/core/command/CHANGELOG.md b/core/command/CHANGELOG.md index eda45d2bda..86d45ec9ec 100644 --- a/core/command/CHANGELOG.md +++ b/core/command/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/command + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/command diff --git a/core/command/package.json b/core/command/package.json index 61c26c923d..a3b8e5e299 100644 --- a/core/command/package.json +++ b/core/command/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/command", - "version": "6.0.3", + "version": "6.1.0", "description": "Lerna's internal base class for commands", "keywords": [ "lerna", diff --git a/core/conventional-commits/CHANGELOG.md b/core/conventional-commits/CHANGELOG.md index f017f51950..365898ca07 100644 --- a/core/conventional-commits/CHANGELOG.md +++ b/core/conventional-commits/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +### Features + +- **version:** bump prerelease versions from conventional commits ([#3362](https://github.com/lerna/lerna/issues/3362)) ([2288b3a](https://github.com/lerna/lerna/commit/2288b3aca4753b3943ea845ef8785321e5f77610)) + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/conventional-commits diff --git a/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/lerna.json b/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/lerna.json new file mode 100644 index 0000000000..84e537a34e --- /dev/null +++ b/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/lerna.json @@ -0,0 +1,8 @@ +{ + "command": { + "publish": { + "conventionalCommits": true + } + }, + "version": "independent" +} diff --git a/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/package.json b/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/package.json new file mode 100644 index 0000000000..20bd4b1f45 --- /dev/null +++ b/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/package.json @@ -0,0 +1,5 @@ +{ + "name": "conventional-commits-independent", + "repository": "lerna/conventional-commits-independent", + "version": "0.0.0-root" +} diff --git a/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/packages/package-1/CHANGELOG.md b/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/packages/package-1/CHANGELOG.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/packages/package-1/package.json b/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/packages/package-1/package.json new file mode 100644 index 0000000000..319b58baf7 --- /dev/null +++ b/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/packages/package-1/package.json @@ -0,0 +1,5 @@ +{ + "name": "package-1", + "repository": "lerna/conventional-commits-independent", + "version": "1.0.0-alpha.0" +} diff --git a/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/packages/package-2/CHANGELOG.md b/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/packages/package-2/CHANGELOG.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/packages/package-2/package.json b/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/packages/package-2/package.json new file mode 100644 index 0000000000..ff6ac81d8f --- /dev/null +++ b/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/packages/package-2/package.json @@ -0,0 +1,8 @@ +{ + "name": "package-2", + "repository": "lerna/conventional-commits-independent", + "version": "1.0.0-beta.0", + "dependencies": { + "package-1": "^1.0.0" + } +} diff --git a/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/packages/package-3/CHANGELOG.md b/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/packages/package-3/CHANGELOG.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/packages/package-3/package.json b/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/packages/package-3/package.json new file mode 100644 index 0000000000..0abe2ab7f8 --- /dev/null +++ b/core/conventional-commits/__tests__/__fixtures__/prerelease-independent/packages/package-3/package.json @@ -0,0 +1,8 @@ +{ + "name": "package-3", + "repository": "lerna/conventional-commits-independent", + "version": "1.0.0-beta.0", + "dependencies": { + "package-1": "^1.0.0" + } +} diff --git a/core/conventional-commits/__tests__/conventional-commits.test.js b/core/conventional-commits/__tests__/conventional-commits.test.js index 51a96c381e..1cd8d88c39 100644 --- a/core/conventional-commits/__tests__/conventional-commits.test.js +++ b/core/conventional-commits/__tests__/conventional-commits.test.js @@ -95,6 +95,80 @@ describe("conventional-commits", () => { expect(bump2).toBe("1.1.0-beta.0"); }); + it("returns package-specific version bumps from prereleases with prereleaseId", async () => { + const cwd = await initFixture("prerelease-independent"); + const [pkg1, pkg2, pkg3] = await getPackages(cwd); + const opts = { changelogPreset: "angular" }; + + // make a change in package-1, package-2 and package-3 + await pkg1.set("changed", 1).serialize(); + await pkg2.set("changed", 2).serialize(); + await pkg3.set("changed", 3).serialize(); + + await gitAdd(cwd, pkg1.manifestLocation); + await gitCommit(cwd, "fix: changed 1"); + + await gitAdd(cwd, pkg2.manifestLocation); + await gitCommit(cwd, "feat: changed 2"); + + await gitAdd(cwd, pkg3.manifestLocation); + await gitCommit(cwd, "feat!: changed\n\nBREAKING CHANGE: changed"); + + const [bump1, bump2, bump3] = await Promise.all([ + recommendVersion( + pkg1, + "independent", + Object.assign(opts, { prereleaseId: "alpha", conventionalBumpPrerelease: true }) + ), + recommendVersion( + pkg2, + "independent", + Object.assign(opts, { prereleaseId: "beta", conventionalBumpPrerelease: true }) + ), + recommendVersion( + pkg3, + "independent", + Object.assign(opts, { prereleaseId: "beta", conventionalBumpPrerelease: true }) + ), + ]); + + // all versions should be bumped + expect(bump1).toBe("1.0.1-alpha.0"); + expect(bump2).toBe("1.1.0-beta.0"); + expect(bump3).toBe("2.0.0-beta.0"); + }); + + it("returns package-specific prerelease bumps from prereleases with prereleaseId", async () => { + const cwd = await initFixture("prerelease-independent"); + const [pkg1, pkg2, pkg3] = await getPackages(cwd); + const opts = { changelogPreset: "angular" }; + + // make a change in package-1, package-2 and package-3 + await pkg1.set("changed", 1).serialize(); + await pkg2.set("changed", 2).serialize(); + await pkg3.set("changed", 3).serialize(); + + await gitAdd(cwd, pkg1.manifestLocation); + await gitCommit(cwd, "fix: changed 1"); + + await gitAdd(cwd, pkg2.manifestLocation); + await gitCommit(cwd, "feat: changed 2"); + + await gitAdd(cwd, pkg3.manifestLocation); + await gitCommit(cwd, "feat!: changed\n\nBREAKING CHANGE: changed"); + + const [bump1, bump2, bump3] = await Promise.all([ + recommendVersion(pkg1, "independent", Object.assign(opts, { prereleaseId: "alpha" })), + recommendVersion(pkg2, "independent", Object.assign(opts, { prereleaseId: "beta" })), + recommendVersion(pkg3, "independent", Object.assign(opts, { prereleaseId: "beta" })), + ]); + + // we just have a bump in the prerelease + expect(bump1).toBe("1.0.0-alpha.1"); + expect(bump2).toBe("1.0.0-beta.1"); + expect(bump3).toBe("1.0.0-beta.1"); + }); + it("falls back to patch bumps for non-bumping commit types", async () => { const cwd = await initFixture("independent"); const [pkg1, pkg2] = await getPackages(cwd); diff --git a/core/conventional-commits/lib/recommend-version.js b/core/conventional-commits/lib/recommend-version.js index a982adfc92..81bd79df66 100644 --- a/core/conventional-commits/lib/recommend-version.js +++ b/core/conventional-commits/lib/recommend-version.js @@ -12,7 +12,11 @@ module.exports.recommendVersion = recommendVersion; * @param {import("..").VersioningStrategy} type * @param {import("..").BaseChangelogOptions & { prereleaseId?: string }} commandOptions */ -function recommendVersion(pkg, type, { changelogPreset, rootPath, tagPrefix, prereleaseId }) { +function recommendVersion( + pkg, + type, + { changelogPreset, rootPath, tagPrefix, prereleaseId, conventionalBumpPrerelease } +) { log.silly(type, "for %s at %s", pkg.name, pkg.location); const options = { @@ -59,7 +63,7 @@ function recommendVersion(pkg, type, { changelogPreset, rootPath, tagPrefix, pre let releaseType = data.releaseType || "patch"; if (prereleaseId) { - const shouldBump = shouldBumpPrerelease(releaseType, pkg.version); + const shouldBump = conventionalBumpPrerelease || shouldBumpPrerelease(releaseType, pkg.version); const prereleaseType = shouldBump ? `pre${releaseType}` : "prerelease"; log.verbose(type, "increment %s by %s", pkg.version, prereleaseType); resolve(semver.inc(pkg.version, prereleaseType, prereleaseId)); diff --git a/core/conventional-commits/package.json b/core/conventional-commits/package.json index 452234fc15..ca596915d9 100644 --- a/core/conventional-commits/package.json +++ b/core/conventional-commits/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/conventional-commits", - "version": "6.0.3", + "version": "6.1.0", "description": "Lerna's internal interface to conventional-changelog and friends", "keywords": [ "lerna", diff --git a/core/filter-options/CHANGELOG.md b/core/filter-options/CHANGELOG.md index e20399945c..19c5e9bcfa 100644 --- a/core/filter-options/CHANGELOG.md +++ b/core/filter-options/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/filter-options + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/filter-options diff --git a/core/filter-options/package.json b/core/filter-options/package.json index e587ed38ef..69c31392fa 100644 --- a/core/filter-options/package.json +++ b/core/filter-options/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/filter-options", - "version": "6.0.3", + "version": "6.1.0", "description": "Options for lerna sub-commands that need filtering", "keywords": [ "lerna", diff --git a/core/global-options/CHANGELOG.md b/core/global-options/CHANGELOG.md index a08a9dde6f..8bfa79c42c 100644 --- a/core/global-options/CHANGELOG.md +++ b/core/global-options/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/global-options + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/global-options diff --git a/core/global-options/package.json b/core/global-options/package.json index c3d69603d9..fad2ec6c2a 100644 --- a/core/global-options/package.json +++ b/core/global-options/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/global-options", - "version": "6.0.3", + "version": "6.1.0", "description": "Global options applicable to _every_ lerna sub-command", "keywords": [ "lerna", diff --git a/core/lerna/CHANGELOG.md b/core/lerna/CHANGELOG.md index c604aadb58..15f93f6162 100644 --- a/core/lerna/CHANGELOG.md +++ b/core/lerna/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +### Features + +- **version:** bump prerelease versions from conventional commits ([#3362](https://github.com/lerna/lerna/issues/3362)) ([2288b3a](https://github.com/lerna/lerna/commit/2288b3aca4753b3943ea845ef8785321e5f77610)) + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package lerna diff --git a/core/lerna/__tests__/cli.test.js b/core/lerna/__tests__/cli.test.js index 076e763e94..81f49f06a7 100644 --- a/core/lerna/__tests__/cli.test.js +++ b/core/lerna/__tests__/cli.test.js @@ -8,7 +8,10 @@ const tempy = require("tempy"); const { copyFixture } = require("@lerna-test/helpers"); const CLI = path.join(__dirname, "../cli.js"); -const bin = (cwd) => (...args) => execa(CLI, args, { cwd }); +const bin = + (cwd) => + (...args) => + execa(CLI, args, { cwd }); jest.setTimeout(30e3); diff --git a/core/lerna/commands/add-caching/README.md b/core/lerna/commands/add-caching/README.md index 2f66085e6f..1431e8b62e 100644 --- a/core/lerna/commands/add-caching/README.md +++ b/core/lerna/commands/add-caching/README.md @@ -14,7 +14,7 @@ $ lerna add-caching Each question the wizard asks will inform how the `nx.json` file is updated. -### Which of the following scripts need to be run in deterministic/topological order? +### Which scripts need to be run in order? Each script selected will be marked to run dependency scripts of the same name before running the script itself. @@ -32,7 +32,7 @@ If you mark `build` as needing topological order, the `nx.json` file will look l } ``` -### Which of the following scripts are cacheable? +### Which scripts are cacheable? Each script selected will be cached by Lerna. Only select scripts that do not depend on any external inputs (like network calls). `build` and `test` are usually cacheable. `start` and `serve` are usually not cacheable. Sometimes `e2e` is cacheable. diff --git a/core/lerna/commands/add-caching/index.js b/core/lerna/commands/add-caching/index.js index 22e0536ecb..fb5b78f711 100644 --- a/core/lerna/commands/add-caching/index.js +++ b/core/lerna/commands/add-caching/index.js @@ -51,7 +51,8 @@ class AddCachingCommand extends Command { { type: "checkbox", name: "targetDefaults", - message: "Which of the following scripts need to be run in deterministic/topological order?\n", + message: + "Which scripts need to be run in order? (e.g. before building a project, dependent projects must be built.)\n", choices: this.uniqueScriptNames, }, ]); @@ -61,7 +62,7 @@ class AddCachingCommand extends Command { type: "checkbox", name: "cacheableOperations", message: - "Which of the following scripts are cacheable? (Produce the same output given the same input, e.g. build, test and lint usually are, serve and start are not)\n", + "Which scripts are cacheable? (Produce the same output given the same input, e.g. build, test and lint usually are, serve and start are not.)\n", choices: this.uniqueScriptNames, }, ]); diff --git a/core/lerna/index.js b/core/lerna/index.js index ee3751d8b9..5d582c0eb8 100644 --- a/core/lerna/index.js +++ b/core/lerna/index.js @@ -32,6 +32,7 @@ function main(argv) { lernaVersion: pkg.version, }; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore return cli() .command(addCmd) diff --git a/core/lerna/package.json b/core/lerna/package.json index d83e7f9768..53e8c08f18 100644 --- a/core/lerna/package.json +++ b/core/lerna/package.json @@ -1,6 +1,6 @@ { "name": "lerna", - "version": "6.0.3", + "version": "6.1.0", "description": "A tool for managing JavaScript projects with multiple packages.", "keywords": [ "lerna", diff --git a/core/lerna/schemas/lerna-schema.json b/core/lerna/schemas/lerna-schema.json index 642a6435fc..f052890fe1 100644 --- a/core/lerna/schemas/lerna-schema.json +++ b/core/lerna/schemas/lerna-schema.json @@ -988,6 +988,9 @@ "conventionalPrerelease": { "$ref": "#/$defs/commandOptions/version/conventionalPrerelease" }, + "conventionalBumpPrerelease": { + "$ref": "#/$defs/commandOptions/version/conventionalBumpPrerelease" + }, "changelogPreset": { "$ref": "#/$defs/commandOptions/version/changelogPreset" }, @@ -1290,6 +1293,9 @@ "conventionalPrerelease": { "$ref": "#/$defs/commandOptions/version/conventionalPrerelease" }, + "conventionalBumpPrerelease": { + "$ref": "#/$defs/commandOptions/version/conventionalBumpPrerelease" + }, "changelogPreset": { "$ref": "#/$defs/commandOptions/version/changelogPreset" }, @@ -1680,6 +1686,10 @@ ], "description": "During `lerna version`, version changed packages as prereleases when using --conventional-commits." }, + "conventionalBumpPrerelease": { + "type": "boolean", + "description": "During `lerna version`, bumps version of changed prereleased packages when using --conventional-commits." + }, "changelogPreset": { "type": "string", "description": "For `lerna version`, the custom conventional-changelog preset." diff --git a/core/otplease/CHANGELOG.md b/core/otplease/CHANGELOG.md index 5d882a25cb..4e85d36f82 100644 --- a/core/otplease/CHANGELOG.md +++ b/core/otplease/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/otplease + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/otplease diff --git a/core/otplease/package.json b/core/otplease/package.json index 3251e03ff2..f534d6efb1 100644 --- a/core/otplease/package.json +++ b/core/otplease/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/otplease", - "version": "6.0.3", + "version": "6.1.0", "description": "Prompt for OTP when wrapped Promise fails", "keywords": [ "lerna", diff --git a/core/package-graph/CHANGELOG.md b/core/package-graph/CHANGELOG.md index dd71f88223..8b4f06cc38 100644 --- a/core/package-graph/CHANGELOG.md +++ b/core/package-graph/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/package-graph + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/package-graph diff --git a/core/package-graph/package.json b/core/package-graph/package.json index e49a7f7a31..8766033d0c 100644 --- a/core/package-graph/package.json +++ b/core/package-graph/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/package-graph", - "version": "6.0.3", + "version": "6.1.0", "description": "Lerna's internal representation of a package graph", "keywords": [ "lerna", diff --git a/core/package/CHANGELOG.md b/core/package/CHANGELOG.md index 2d9dd29805..a158bd0865 100644 --- a/core/package/CHANGELOG.md +++ b/core/package/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/package + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/package diff --git a/core/package/package.json b/core/package/package.json index 1ebcecc73a..8445e4bfee 100644 --- a/core/package/package.json +++ b/core/package/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/package", - "version": "6.0.3", + "version": "6.1.0", "description": "Lerna's internal representation of a package", "keywords": [ "lerna", diff --git a/core/project/CHANGELOG.md b/core/project/CHANGELOG.md index fe8b003419..6884e89138 100644 --- a/core/project/CHANGELOG.md +++ b/core/project/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/project + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/project diff --git a/core/project/lib/deprecate-config.js b/core/project/lib/deprecate-config.js index c325c494d5..521886fb8e 100644 --- a/core/project/lib/deprecate-config.js +++ b/core/project/lib/deprecate-config.js @@ -101,5 +101,9 @@ function stringify(obj) { } function compose(...funcs) { - return funcs.reduce((a, b) => (...args) => a(b(...args))); + return funcs.reduce( + (a, b) => + (...args) => + a(b(...args)) + ); } diff --git a/core/project/package.json b/core/project/package.json index fd5c831bbb..abab64da3e 100644 --- a/core/project/package.json +++ b/core/project/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/project", - "version": "6.0.3", + "version": "6.1.0", "description": "Lerna project configuration", "keywords": [ "lerna", diff --git a/core/prompt/CHANGELOG.md b/core/prompt/CHANGELOG.md index 2a31ffcc6f..1b816eec0a 100644 --- a/core/prompt/CHANGELOG.md +++ b/core/prompt/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/prompt + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/prompt diff --git a/core/prompt/package.json b/core/prompt/package.json index 7101c0aec8..44e7e6de25 100644 --- a/core/prompt/package.json +++ b/core/prompt/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/prompt", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/core/validation-error/CHANGELOG.md b/core/validation-error/CHANGELOG.md index 0a2f1deed5..581818b80a 100644 --- a/core/validation-error/CHANGELOG.md +++ b/core/validation-error/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/validation-error + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/validation-error diff --git a/core/validation-error/package.json b/core/validation-error/package.json index d0010b8e94..91e62166f1 100644 --- a/core/validation-error/package.json +++ b/core/validation-error/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/validation-error", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/e2e/.eslintrc.json b/e2e/.eslintrc.json deleted file mode 100644 index db9f3de4a6..0000000000 --- a/e2e/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": "../.eslintrc.json", - "parser": "@typescript-eslint/parser", - "rules": { - "import/extensions": "off", - "import/no-unresolved": "off", - "import/no-extraneous-dependencies": "off", - "import/prefer-default-export": "off", - "node/no-extraneous-import": "off", - "node/no-missing-import": "off", - "node/no-unpublished-import": "off", - "node/no-unsupported-features/es-syntax": "off", - "no-unused-vars": "off", - "lines-between-class-members": "off", - "no-useless-constructor": "off", - "no-empty-function": "off" - } -} diff --git a/e2e/changed/.eslintrc.json b/e2e/changed/.eslintrc.json new file mode 100644 index 0000000000..9d9c0db55b --- /dev/null +++ b/e2e/changed/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/e2e/changed/jest.config.ts b/e2e/changed/jest.config.ts new file mode 100644 index 0000000000..057f371348 --- /dev/null +++ b/e2e/changed/jest.config.ts @@ -0,0 +1,18 @@ +/* eslint-disable */ +export default { + displayName: "e2e-changed", + preset: "../../jest.preset.js", + globals: { + "ts-jest": { + tsconfig: "/tsconfig.spec.json", + }, + }, + transform: { + "^.+\\.[tj]s$": "ts-jest", + }, + moduleFileExtensions: ["ts", "js", "html"], + coverageDirectory: "../../coverage/e2e/changed", + maxWorkers: 1, + testTimeout: 60000, + setupFiles: ["/src/test-setup.ts"], +}; diff --git a/e2e/changed/project.json b/e2e/changed/project.json new file mode 100644 index 0000000000..d405b3396e --- /dev/null +++ b/e2e/changed/project.json @@ -0,0 +1,53 @@ +{ + "name": "e2e-changed", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "implicitDependencies": ["lerna", "changed"], + "tags": [], + "targets": { + "e2e": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "npm run e2e-start-local-registry" + }, + { + "command": "npm run e2e-build-package-publish" + }, + { + "command": "nx run-e2e-tests e2e-changed" + } + ], + "parallel": false + } + }, + "run-e2e-tests-process": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "nx run-e2e-tests e2e-changed", + "description": "This additional wrapper target exists so that we can ensure that the e2e tests run in a dedicated process with enough memory" + } + ], + "parallel": false + } + }, + "run-e2e-tests": { + "executor": "@nrwl/jest:jest", + "options": { + "jestConfig": "e2e/changed/jest.config.ts", + "passWithNoTests": true, + "runInBand": true + }, + "outputs": ["{workspaceRoot}/coverage/e2e/changed"] + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["e2e/changed/**/*.ts"] + } + } + } +} diff --git a/e2e/tests/lerna-changed/lerna-changed.spec.ts b/e2e/changed/src/changed.spec.ts similarity index 99% rename from e2e/tests/lerna-changed/lerna-changed.spec.ts rename to e2e/changed/src/changed.spec.ts index 6942aeebee..372228dbef 100644 --- a/e2e/tests/lerna-changed/lerna-changed.spec.ts +++ b/e2e/changed/src/changed.spec.ts @@ -1,5 +1,4 @@ -import { Fixture } from "../../utils/fixture"; -import { normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; +import { Fixture, normalizeEnvironment } from "@lerna/e2e-utils"; expect.addSnapshotSerializer({ serialize(str: string) { diff --git a/e2e/changed/src/test-setup.ts b/e2e/changed/src/test-setup.ts new file mode 100644 index 0000000000..bb0b4613b6 --- /dev/null +++ b/e2e/changed/src/test-setup.ts @@ -0,0 +1 @@ +jest.retryTimes(3); diff --git a/e2e/changed/tsconfig.json b/e2e/changed/tsconfig.json new file mode 100644 index 0000000000..19b9eece4d --- /dev/null +++ b/e2e/changed/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/e2e/changed/tsconfig.lib.json b/e2e/changed/tsconfig.lib.json new file mode 100644 index 0000000000..7bfc80f73e --- /dev/null +++ b/e2e/changed/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/e2e/changed/tsconfig.spec.json b/e2e/changed/tsconfig.spec.json new file mode 100644 index 0000000000..7b561216ea --- /dev/null +++ b/e2e/changed/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "src/test-setup.ts"] +} diff --git a/e2e/clean/.eslintrc.json b/e2e/clean/.eslintrc.json new file mode 100644 index 0000000000..9d9c0db55b --- /dev/null +++ b/e2e/clean/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/e2e/clean/jest.config.ts b/e2e/clean/jest.config.ts new file mode 100644 index 0000000000..9ec6ae0c2a --- /dev/null +++ b/e2e/clean/jest.config.ts @@ -0,0 +1,18 @@ +/* eslint-disable */ +export default { + displayName: "e2e-clean", + preset: "../../jest.preset.js", + globals: { + "ts-jest": { + tsconfig: "/tsconfig.spec.json", + }, + }, + transform: { + "^.+\\.[tj]s$": "ts-jest", + }, + moduleFileExtensions: ["ts", "js", "html"], + coverageDirectory: "../../coverage/e2e/clean", + maxWorkers: 1, + testTimeout: 60000, + setupFiles: ["/src/test-setup.ts"], +}; diff --git a/e2e/clean/project.json b/e2e/clean/project.json new file mode 100644 index 0000000000..045cb7f666 --- /dev/null +++ b/e2e/clean/project.json @@ -0,0 +1,53 @@ +{ + "name": "e2e-clean", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "implicitDependencies": ["lerna", "clean"], + "tags": [], + "targets": { + "e2e": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "npm run e2e-start-local-registry" + }, + { + "command": "npm run e2e-build-package-publish" + }, + { + "command": "nx run-e2e-tests e2e-clean" + } + ], + "parallel": false + } + }, + "run-e2e-tests-process": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "nx run-e2e-tests e2e-clean", + "description": "This additional wrapper target exists so that we can ensure that the e2e tests run in a dedicated process with enough memory" + } + ], + "parallel": false + } + }, + "run-e2e-tests": { + "executor": "@nrwl/jest:jest", + "options": { + "jestConfig": "e2e/clean/jest.config.ts", + "passWithNoTests": true, + "runInBand": true + }, + "outputs": ["{workspaceRoot}/coverage/e2e/clean"] + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["e2e/clean/**/*.ts"] + } + } + } +} diff --git a/e2e/tests/lerna-clean/lerna-clean.spec.ts b/e2e/clean/src/clean.spec.ts similarity index 96% rename from e2e/tests/lerna-clean/lerna-clean.spec.ts rename to e2e/clean/src/clean.spec.ts index ea1d6373cd..a8a1aee8c7 100644 --- a/e2e/tests/lerna-clean/lerna-clean.spec.ts +++ b/e2e/clean/src/clean.spec.ts @@ -1,6 +1,5 @@ +import { Fixture, normalizeEnvironment } from "@lerna/e2e-utils"; import { existsSync, readdir } from "fs-extra"; -import { Fixture } from "../../utils/fixture"; -import { normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; expect.addSnapshotSerializer({ serialize(str) { diff --git a/e2e/clean/src/test-setup.ts b/e2e/clean/src/test-setup.ts new file mode 100644 index 0000000000..bb0b4613b6 --- /dev/null +++ b/e2e/clean/src/test-setup.ts @@ -0,0 +1 @@ +jest.retryTimes(3); diff --git a/e2e/clean/tsconfig.json b/e2e/clean/tsconfig.json new file mode 100644 index 0000000000..19b9eece4d --- /dev/null +++ b/e2e/clean/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/e2e/clean/tsconfig.lib.json b/e2e/clean/tsconfig.lib.json new file mode 100644 index 0000000000..7bfc80f73e --- /dev/null +++ b/e2e/clean/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/e2e/clean/tsconfig.spec.json b/e2e/clean/tsconfig.spec.json new file mode 100644 index 0000000000..7b561216ea --- /dev/null +++ b/e2e/clean/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "src/test-setup.ts"] +} diff --git a/e2e/create/.eslintrc.json b/e2e/create/.eslintrc.json new file mode 100644 index 0000000000..9d9c0db55b --- /dev/null +++ b/e2e/create/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/e2e/create/jest.config.ts b/e2e/create/jest.config.ts new file mode 100644 index 0000000000..549c5123c1 --- /dev/null +++ b/e2e/create/jest.config.ts @@ -0,0 +1,17 @@ +/* eslint-disable */ +export default { + displayName: "e2e-create", + preset: "../../jest.preset.js", + globals: { + "ts-jest": { + tsconfig: "/tsconfig.spec.json", + }, + }, + transform: { + "^.+\\.[tj]s$": "ts-jest", + }, + moduleFileExtensions: ["ts", "js", "html"], + coverageDirectory: "../../coverage/e2e/create", + maxWorkers: 1, + testTimeout: 60000, +}; diff --git a/e2e/create/project.json b/e2e/create/project.json new file mode 100644 index 0000000000..7c8d08005f --- /dev/null +++ b/e2e/create/project.json @@ -0,0 +1,53 @@ +{ + "name": "e2e-create", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "implicitDependencies": ["lerna", "create"], + "tags": [], + "targets": { + "e2e": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "npm run e2e-start-local-registry" + }, + { + "command": "npm run e2e-build-package-publish" + }, + { + "command": "nx run-e2e-tests e2e-create" + } + ], + "parallel": false + } + }, + "run-e2e-tests-process": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "nx run-e2e-tests e2e-create", + "description": "This additional wrapper target exists so that we can ensure that the e2e tests run in a dedicated process with enough memory" + } + ], + "parallel": false + } + }, + "run-e2e-tests": { + "executor": "@nrwl/jest:jest", + "options": { + "jestConfig": "e2e/create/jest.config.ts", + "passWithNoTests": true, + "runInBand": true + }, + "outputs": ["{workspaceRoot}/coverage/e2e/create"] + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["e2e/create/**/*.ts"] + } + } + } +} diff --git a/e2e/tests/lerna-create/lerna-create.spec.ts b/e2e/create/src/create.spec.ts similarity index 99% rename from e2e/tests/lerna-create/lerna-create.spec.ts rename to e2e/create/src/create.spec.ts index af53be9427..0a3f0ea138 100644 --- a/e2e/tests/lerna-create/lerna-create.spec.ts +++ b/e2e/create/src/create.spec.ts @@ -1,5 +1,4 @@ -import { Fixture } from "../../utils/fixture"; -import { normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; +import { Fixture, normalizeEnvironment } from "@lerna/e2e-utils"; expect.addSnapshotSerializer({ serialize(str) { diff --git a/e2e/create/src/test-setup.ts b/e2e/create/src/test-setup.ts new file mode 100644 index 0000000000..bb0b4613b6 --- /dev/null +++ b/e2e/create/src/test-setup.ts @@ -0,0 +1 @@ +jest.retryTimes(3); diff --git a/e2e/create/tsconfig.json b/e2e/create/tsconfig.json new file mode 100644 index 0000000000..19b9eece4d --- /dev/null +++ b/e2e/create/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/e2e/create/tsconfig.lib.json b/e2e/create/tsconfig.lib.json new file mode 100644 index 0000000000..7bfc80f73e --- /dev/null +++ b/e2e/create/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/e2e/create/tsconfig.spec.json b/e2e/create/tsconfig.spec.json new file mode 100644 index 0000000000..546f12877f --- /dev/null +++ b/e2e/create/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] +} diff --git a/e2e/diff/.eslintrc.json b/e2e/diff/.eslintrc.json new file mode 100644 index 0000000000..9d9c0db55b --- /dev/null +++ b/e2e/diff/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/e2e/diff/jest.config.ts b/e2e/diff/jest.config.ts new file mode 100644 index 0000000000..001aa9a345 --- /dev/null +++ b/e2e/diff/jest.config.ts @@ -0,0 +1,18 @@ +/* eslint-disable */ +export default { + displayName: "e2e-diff", + preset: "../../jest.preset.js", + globals: { + "ts-jest": { + tsconfig: "/tsconfig.spec.json", + }, + }, + transform: { + "^.+\\.[tj]s$": "ts-jest", + }, + moduleFileExtensions: ["ts", "js", "html"], + coverageDirectory: "../../coverage/e2e/diff", + maxWorkers: 1, + testTimeout: 60000, + setupFiles: ["/src/test-setup.ts"], +}; diff --git a/e2e/diff/project.json b/e2e/diff/project.json new file mode 100644 index 0000000000..bd4d2ea937 --- /dev/null +++ b/e2e/diff/project.json @@ -0,0 +1,53 @@ +{ + "name": "e2e-diff", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "implicitDependencies": ["lerna", "diff"], + "tags": [], + "targets": { + "e2e": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "npm run e2e-start-local-registry" + }, + { + "command": "npm run e2e-build-package-publish" + }, + { + "command": "nx run-e2e-tests e2e-diff" + } + ], + "parallel": false + } + }, + "run-e2e-tests-process": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "nx run-e2e-tests e2e-diff", + "description": "This additional wrapper target exists so that we can ensure that the e2e tests run in a dedicated process with enough memory" + } + ], + "parallel": false + } + }, + "run-e2e-tests": { + "executor": "@nrwl/jest:jest", + "options": { + "jestConfig": "e2e/diff/jest.config.ts", + "passWithNoTests": true, + "runInBand": true + }, + "outputs": ["{workspaceRoot}/coverage/e2e/diff"] + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["e2e/diff/**/*.ts"] + } + } + } +} diff --git a/e2e/tests/lerna-diff/lerna-diff.spec.ts b/e2e/diff/src/diff.spec.ts similarity index 95% rename from e2e/tests/lerna-diff/lerna-diff.spec.ts rename to e2e/diff/src/diff.spec.ts index 685eb88199..e5f37ad9b7 100644 --- a/e2e/tests/lerna-diff/lerna-diff.spec.ts +++ b/e2e/diff/src/diff.spec.ts @@ -1,5 +1,4 @@ -import { Fixture } from "../../utils/fixture"; -import { normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; +import { Fixture, normalizeEnvironment } from "@lerna/e2e-utils"; expect.addSnapshotSerializer({ serialize(str) { diff --git a/e2e/diff/src/test-setup.ts b/e2e/diff/src/test-setup.ts new file mode 100644 index 0000000000..bb0b4613b6 --- /dev/null +++ b/e2e/diff/src/test-setup.ts @@ -0,0 +1 @@ +jest.retryTimes(3); diff --git a/e2e/diff/tsconfig.json b/e2e/diff/tsconfig.json new file mode 100644 index 0000000000..19b9eece4d --- /dev/null +++ b/e2e/diff/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/e2e/diff/tsconfig.lib.json b/e2e/diff/tsconfig.lib.json new file mode 100644 index 0000000000..7bfc80f73e --- /dev/null +++ b/e2e/diff/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/e2e/diff/tsconfig.spec.json b/e2e/diff/tsconfig.spec.json new file mode 100644 index 0000000000..7b561216ea --- /dev/null +++ b/e2e/diff/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "src/test-setup.ts"] +} diff --git a/e2e/exec/.eslintrc.json b/e2e/exec/.eslintrc.json new file mode 100644 index 0000000000..9d9c0db55b --- /dev/null +++ b/e2e/exec/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/e2e/exec/jest.config.ts b/e2e/exec/jest.config.ts new file mode 100644 index 0000000000..4bf7e74a48 --- /dev/null +++ b/e2e/exec/jest.config.ts @@ -0,0 +1,18 @@ +/* eslint-disable */ +export default { + displayName: "e2e-exec", + preset: "../../jest.preset.js", + globals: { + "ts-jest": { + tsconfig: "/tsconfig.spec.json", + }, + }, + transform: { + "^.+\\.[tj]s$": "ts-jest", + }, + moduleFileExtensions: ["ts", "js", "html"], + coverageDirectory: "../../coverage/e2e/exec", + maxWorkers: 1, + testTimeout: 60000, + setupFiles: ["/src/test-setup.ts"], +}; diff --git a/e2e/exec/project.json b/e2e/exec/project.json new file mode 100644 index 0000000000..f083ef6913 --- /dev/null +++ b/e2e/exec/project.json @@ -0,0 +1,53 @@ +{ + "name": "e2e-exec", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "implicitDependencies": ["lerna", "exec"], + "tags": [], + "targets": { + "e2e": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "npm run e2e-start-local-registry" + }, + { + "command": "npm run e2e-build-package-publish" + }, + { + "command": "nx run-e2e-tests e2e-exec" + } + ], + "parallel": false + } + }, + "run-e2e-tests-process": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "nx run-e2e-tests e2e-exec", + "description": "This additional wrapper target exists so that we can ensure that the e2e tests run in a dedicated process with enough memory" + } + ], + "parallel": false + } + }, + "run-e2e-tests": { + "executor": "@nrwl/jest:jest", + "options": { + "jestConfig": "e2e/exec/jest.config.ts", + "passWithNoTests": true, + "runInBand": true + }, + "outputs": ["{workspaceRoot}/coverage/e2e/exec"] + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["e2e/exec/**/*.ts"] + } + } + } +} diff --git a/e2e/tests/lerna-exec/lerna-exec.spec.ts b/e2e/exec/src/exec.spec.ts similarity index 98% rename from e2e/tests/lerna-exec/lerna-exec.spec.ts rename to e2e/exec/src/exec.spec.ts index 241c3e3535..b2132e8b49 100644 --- a/e2e/tests/lerna-exec/lerna-exec.spec.ts +++ b/e2e/exec/src/exec.spec.ts @@ -1,6 +1,5 @@ +import { Fixture, normalizeCommandOutput, normalizeEnvironment } from "@lerna/e2e-utils"; import { existsSync } from "fs-extra"; -import { Fixture } from "../../utils/fixture"; -import { normalizeCommandOutput, normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; expect.addSnapshotSerializer({ serialize(str: string) { diff --git a/e2e/exec/src/test-setup.ts b/e2e/exec/src/test-setup.ts new file mode 100644 index 0000000000..bb0b4613b6 --- /dev/null +++ b/e2e/exec/src/test-setup.ts @@ -0,0 +1 @@ +jest.retryTimes(3); diff --git a/e2e/exec/tsconfig.json b/e2e/exec/tsconfig.json new file mode 100644 index 0000000000..19b9eece4d --- /dev/null +++ b/e2e/exec/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/e2e/exec/tsconfig.lib.json b/e2e/exec/tsconfig.lib.json new file mode 100644 index 0000000000..7bfc80f73e --- /dev/null +++ b/e2e/exec/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/e2e/exec/tsconfig.spec.json b/e2e/exec/tsconfig.spec.json new file mode 100644 index 0000000000..7b561216ea --- /dev/null +++ b/e2e/exec/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "src/test-setup.ts"] +} diff --git a/e2e/info/.eslintrc.json b/e2e/info/.eslintrc.json new file mode 100644 index 0000000000..9d9c0db55b --- /dev/null +++ b/e2e/info/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/e2e/info/jest.config.ts b/e2e/info/jest.config.ts new file mode 100644 index 0000000000..ec73db558e --- /dev/null +++ b/e2e/info/jest.config.ts @@ -0,0 +1,18 @@ +/* eslint-disable */ +export default { + displayName: "e2e-info", + preset: "../../jest.preset.js", + globals: { + "ts-jest": { + tsconfig: "/tsconfig.spec.json", + }, + }, + transform: { + "^.+\\.[tj]s$": "ts-jest", + }, + moduleFileExtensions: ["ts", "js", "html"], + coverageDirectory: "../../coverage/e2e/info", + maxWorkers: 1, + testTimeout: 60000, + setupFiles: ["/src/test-setup.ts"], +}; diff --git a/e2e/info/project.json b/e2e/info/project.json new file mode 100644 index 0000000000..bc483c9aaa --- /dev/null +++ b/e2e/info/project.json @@ -0,0 +1,53 @@ +{ + "name": "e2e-info", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "implicitDependencies": ["lerna", "info"], + "tags": [], + "targets": { + "e2e": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "npm run e2e-start-local-registry" + }, + { + "command": "npm run e2e-build-package-publish" + }, + { + "command": "nx run-e2e-tests e2e-info" + } + ], + "parallel": false + } + }, + "run-e2e-tests-process": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "nx run-e2e-tests e2e-info", + "description": "This additional wrapper target exists so that we can ensure that the e2e tests run in a dedicated process with enough memory" + } + ], + "parallel": false + } + }, + "run-e2e-tests": { + "executor": "@nrwl/jest:jest", + "options": { + "jestConfig": "e2e/info/jest.config.ts", + "passWithNoTests": true, + "runInBand": true + }, + "outputs": ["{workspaceRoot}/coverage/e2e/info"] + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["e2e/info/**/*.ts"] + } + } + } +} diff --git a/e2e/tests/lerna-info/lerna-info.spec.ts b/e2e/info/src/info.spec.ts similarity index 92% rename from e2e/tests/lerna-info/lerna-info.spec.ts rename to e2e/info/src/info.spec.ts index f86ff82487..413fc7e965 100644 --- a/e2e/tests/lerna-info/lerna-info.spec.ts +++ b/e2e/info/src/info.spec.ts @@ -1,5 +1,4 @@ -import { Fixture } from "../../utils/fixture"; -import { normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; +import { Fixture, normalizeEnvironment } from "@lerna/e2e-utils"; expect.addSnapshotSerializer({ serialize(str) { diff --git a/e2e/info/src/test-setup.ts b/e2e/info/src/test-setup.ts new file mode 100644 index 0000000000..bb0b4613b6 --- /dev/null +++ b/e2e/info/src/test-setup.ts @@ -0,0 +1 @@ +jest.retryTimes(3); diff --git a/e2e/info/tsconfig.json b/e2e/info/tsconfig.json new file mode 100644 index 0000000000..19b9eece4d --- /dev/null +++ b/e2e/info/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/e2e/info/tsconfig.lib.json b/e2e/info/tsconfig.lib.json new file mode 100644 index 0000000000..7bfc80f73e --- /dev/null +++ b/e2e/info/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/e2e/info/tsconfig.spec.json b/e2e/info/tsconfig.spec.json new file mode 100644 index 0000000000..7b561216ea --- /dev/null +++ b/e2e/info/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "src/test-setup.ts"] +} diff --git a/e2e/init/.eslintrc.json b/e2e/init/.eslintrc.json new file mode 100644 index 0000000000..9d9c0db55b --- /dev/null +++ b/e2e/init/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/e2e/init/jest.config.ts b/e2e/init/jest.config.ts new file mode 100644 index 0000000000..616ea6b69f --- /dev/null +++ b/e2e/init/jest.config.ts @@ -0,0 +1,18 @@ +/* eslint-disable */ +export default { + displayName: "e2e-init", + preset: "../../jest.preset.js", + globals: { + "ts-jest": { + tsconfig: "/tsconfig.spec.json", + }, + }, + transform: { + "^.+\\.[tj]s$": "ts-jest", + }, + moduleFileExtensions: ["ts", "js", "html"], + coverageDirectory: "../../coverage/e2e/init", + maxWorkers: 1, + testTimeout: 60000, + setupFiles: ["/src/test-setup.ts"], +}; diff --git a/e2e/init/project.json b/e2e/init/project.json new file mode 100644 index 0000000000..8fa74d2a39 --- /dev/null +++ b/e2e/init/project.json @@ -0,0 +1,53 @@ +{ + "name": "e2e-init", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "implicitDependencies": ["lerna", "init"], + "tags": [], + "targets": { + "e2e": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "npm run e2e-start-local-registry" + }, + { + "command": "npm run e2e-build-package-publish" + }, + { + "command": "nx run-e2e-tests e2e-init" + } + ], + "parallel": false + } + }, + "run-e2e-tests-process": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "nx run-e2e-tests e2e-init", + "description": "This additional wrapper target exists so that we can ensure that the e2e tests run in a dedicated process with enough memory" + } + ], + "parallel": false + } + }, + "run-e2e-tests": { + "executor": "@nrwl/jest:jest", + "options": { + "jestConfig": "e2e/init/jest.config.ts", + "passWithNoTests": true, + "runInBand": true + }, + "outputs": ["{workspaceRoot}/coverage/e2e/init"] + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["e2e/init/**/*.ts"] + } + } + } +} diff --git a/e2e/tests/lerna-init/lerna-init.spec.ts b/e2e/init/src/init.spec.ts similarity index 99% rename from e2e/tests/lerna-init/lerna-init.spec.ts rename to e2e/init/src/init.spec.ts index 57cda3edac..0eff6543dd 100644 --- a/e2e/tests/lerna-init/lerna-init.spec.ts +++ b/e2e/init/src/init.spec.ts @@ -1,4 +1,4 @@ -import { Fixture } from "../../utils/fixture"; +import { Fixture } from "@lerna/e2e-utils"; describe("lerna-init", () => { let fixture: Fixture; diff --git a/e2e/init/src/test-setup.ts b/e2e/init/src/test-setup.ts new file mode 100644 index 0000000000..bb0b4613b6 --- /dev/null +++ b/e2e/init/src/test-setup.ts @@ -0,0 +1 @@ +jest.retryTimes(3); diff --git a/e2e/init/tsconfig.json b/e2e/init/tsconfig.json new file mode 100644 index 0000000000..19b9eece4d --- /dev/null +++ b/e2e/init/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/e2e/init/tsconfig.lib.json b/e2e/init/tsconfig.lib.json new file mode 100644 index 0000000000..7bfc80f73e --- /dev/null +++ b/e2e/init/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/e2e/init/tsconfig.spec.json b/e2e/init/tsconfig.spec.json new file mode 100644 index 0000000000..7b561216ea --- /dev/null +++ b/e2e/init/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "src/test-setup.ts"] +} diff --git a/e2e/jest.config.ts b/e2e/jest.config.ts deleted file mode 100644 index b3006a82ae..0000000000 --- a/e2e/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -export default { - transform: { - "^.+\\.[tj]sx?$": "ts-jest", - }, - moduleFileExtensions: ["ts", "tsx", "js", "jsx", "html"], - maxWorkers: "50%", - globals: { "ts-jest": { tsconfig: "/tsconfig.spec.json" } }, - displayName: "e2e", - testTimeout: 60000, - setupFiles: ["/utils/setup.ts"], -}; diff --git a/e2e/lerna.json.localpublish b/e2e/lerna.json.localpublish deleted file mode 100644 index 0c3581fdab..0000000000 --- a/e2e/lerna.json.localpublish +++ /dev/null @@ -1,10 +0,0 @@ -{ - "useWorkspaces": true, - "description": "This lerna.json exists to facilitate local registry (verdaccio) publishing for e2e tests and local testing", - "version": "0.0.0", - "ignoreChanges": [ - "**/__fixtures__/**", - "**/__tests__/**", - "**/*.md" - ] -} diff --git a/e2e/list/.eslintrc.json b/e2e/list/.eslintrc.json new file mode 100644 index 0000000000..9d9c0db55b --- /dev/null +++ b/e2e/list/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/e2e/list/jest.config.ts b/e2e/list/jest.config.ts new file mode 100644 index 0000000000..1db922e2bb --- /dev/null +++ b/e2e/list/jest.config.ts @@ -0,0 +1,18 @@ +/* eslint-disable */ +export default { + displayName: "e2e-list", + preset: "../../jest.preset.js", + globals: { + "ts-jest": { + tsconfig: "/tsconfig.spec.json", + }, + }, + transform: { + "^.+\\.[tj]s$": "ts-jest", + }, + moduleFileExtensions: ["ts", "js", "html"], + coverageDirectory: "../../coverage/e2e/list", + maxWorkers: 1, + testTimeout: 60000, + setupFiles: ["/src/test-setup.ts"], +}; diff --git a/e2e/list/project.json b/e2e/list/project.json new file mode 100644 index 0000000000..f59c804568 --- /dev/null +++ b/e2e/list/project.json @@ -0,0 +1,53 @@ +{ + "name": "e2e-list", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "implicitDependencies": ["lerna", "list"], + "tags": [], + "targets": { + "e2e": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "npm run e2e-start-local-registry" + }, + { + "command": "npm run e2e-build-package-publish" + }, + { + "command": "nx run-e2e-tests e2e-list" + } + ], + "parallel": false + } + }, + "run-e2e-tests-process": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "nx run-e2e-tests e2e-list", + "description": "This additional wrapper target exists so that we can ensure that the e2e tests run in a dedicated process with enough memory" + } + ], + "parallel": false + } + }, + "run-e2e-tests": { + "executor": "@nrwl/jest:jest", + "options": { + "jestConfig": "e2e/list/jest.config.ts", + "passWithNoTests": true, + "runInBand": true + }, + "outputs": ["{workspaceRoot}/coverage/e2e/list"] + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["e2e/list/**/*.ts"] + } + } + } +} diff --git a/e2e/tests/lerna-list/lerna-list-filter-options.spec.ts b/e2e/list/src/list-filter-options.spec.ts similarity index 98% rename from e2e/tests/lerna-list/lerna-list-filter-options.spec.ts rename to e2e/list/src/list-filter-options.spec.ts index 3de4ac366b..58ae3cd02d 100644 --- a/e2e/tests/lerna-list/lerna-list-filter-options.spec.ts +++ b/e2e/list/src/list-filter-options.spec.ts @@ -1,5 +1,4 @@ -import { Fixture } from "../../utils/fixture"; -import { normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; +import { Fixture, normalizeEnvironment } from "@lerna/e2e-utils"; expect.addSnapshotSerializer({ serialize(str: string) { diff --git a/e2e/tests/lerna-list/lerna-list.spec.ts b/e2e/list/src/list.spec.ts similarity index 98% rename from e2e/tests/lerna-list/lerna-list.spec.ts rename to e2e/list/src/list.spec.ts index 9e389b6760..54232bf6dc 100644 --- a/e2e/tests/lerna-list/lerna-list.spec.ts +++ b/e2e/list/src/list.spec.ts @@ -1,5 +1,4 @@ -import { Fixture } from "../../utils/fixture"; -import { normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; +import { Fixture, normalizeEnvironment } from "@lerna/e2e-utils"; expect.addSnapshotSerializer({ serialize(str: string) { diff --git a/e2e/list/src/test-setup.ts b/e2e/list/src/test-setup.ts new file mode 100644 index 0000000000..bb0b4613b6 --- /dev/null +++ b/e2e/list/src/test-setup.ts @@ -0,0 +1 @@ +jest.retryTimes(3); diff --git a/e2e/list/tsconfig.json b/e2e/list/tsconfig.json new file mode 100644 index 0000000000..19b9eece4d --- /dev/null +++ b/e2e/list/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/e2e/list/tsconfig.lib.json b/e2e/list/tsconfig.lib.json new file mode 100644 index 0000000000..7bfc80f73e --- /dev/null +++ b/e2e/list/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/e2e/list/tsconfig.spec.json b/e2e/list/tsconfig.spec.json new file mode 100644 index 0000000000..7b561216ea --- /dev/null +++ b/e2e/list/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "src/test-setup.ts"] +} diff --git a/e2e/local-registry/config.yml b/e2e/local-registry/config.yml deleted file mode 100644 index 568166a98a..0000000000 --- a/e2e/local-registry/config.yml +++ /dev/null @@ -1,55 +0,0 @@ -# path to a directory with all packages -storage: ../tmp/local-registry/storage -auth: - htpasswd: - file: ./htpasswd - -# a list of other known repositories we can talk to -uplinks: - npmjs: - url: https://registry.npmjs.org/ - max_fails: 30 - fail_timeout: 10m - timeout: 60s - cache: false - maxage: 30m - agent_options: - keepAlive: true - maxSockets: 40 - maxFreeSockets: 10 - yarn: - url: https://registry.yarnpkg.com - max_fails: 30 - fail_timeout: 10m - timeout: 60s - cache: false - maxage: 30m - agent_options: - keepAlive: true - maxSockets: 40 - maxFreeSockets: 10 - -packages: - "@*/*": - # scoped packages - access: $all - publish: $all - unpublish: $all - proxy: yarn - - "**": - # allow all users (including non-authenticated users) to read and - # publish all packages - access: $all - - # allow all users (including non-authenticated users) to publish/publish packages - publish: $all - unpublish: $all - - # if package is not available locally, proxy requests to 'npmjs' registry - proxy: yarn - -# log settings -logs: - # Change level to "http" to see all the logs for troubleshooting - - { type: stdout, format: pretty, level: warn } diff --git a/e2e/local-registry/htpassword b/e2e/local-registry/htpassword deleted file mode 100644 index d98da58b18..0000000000 --- a/e2e/local-registry/htpassword +++ /dev/null @@ -1 +0,0 @@ -test:$apr1$KWERYl6.$LIlfvzbEr9BqAAM6aPKU0. diff --git a/e2e/package.json b/e2e/package.json deleted file mode 100644 index 098dfbef54..0000000000 --- a/e2e/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "@lerna/e2e", - "private": true, - "description": "e2e tests for lerna packages", - "scripts": { - "start-verdaccio": "verdaccio --config ./local-registry/config.yml --listen 4872", - "kill-verdaccio": "kill $(lsof -t -i:4872) || true", - "prepare-local-publish": "./prepare-local-publish.sh", - "publish-to-verdaccio": "npm_config_registry=\"http://localhost:4872/\" ./publish-to-verdaccio.sh" - } -} diff --git a/e2e/package.json.localpublish b/e2e/package.json.localpublish deleted file mode 100644 index 02837c4604..0000000000 --- a/e2e/package.json.localpublish +++ /dev/null @@ -1,9 +0,0 @@ -{ - "private": true, - "description": "This package.json exists to facilitate local registry (verdaccio) publishing for e2e tests and local testing", - "workspaces": [ - "commands/*", - "core/*", - "utils/*" - ] -} diff --git a/e2e/prepare-local-publish.sh b/e2e/prepare-local-publish.sh deleted file mode 100755 index 5dd6ee6f30..0000000000 --- a/e2e/prepare-local-publish.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR=$(dirname "$0") - -# pwd when running the command should be the e2e directory -if [ $SCRIPT_DIR != "." ]; then - echo "Error: This script must be run from the e2e directory" - exit 1 -fi - -cp ./lerna.json.localpublish ../dist/lerna.json -cp ./package.json.localpublish ../dist/package.json diff --git a/e2e/project.json b/e2e/project.json deleted file mode 100644 index e58d04b313..0000000000 --- a/e2e/project.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "@lerna/e2e", - "$schema": "../node_modules/nx/schemas/project-schema.json", - "targets": { - "e2e": { - "executor": "nx:run-commands", - "options": { - "cwd": "e2e", - "parallel": false, - "commands": [ - { - "command": "npm run start-verdaccio &", - "description": "Serve verdaccio in the background", - "forwardAllArgs": false - }, - { - "command": "npm run prepare-local-publish", - "description": "Prepare the dist/ directory ready for publishing to verdaccio", - "forwardAllArgs": false - }, - { - "command": "npm run publish-to-verdaccio -- 999.9.9-e2e.0", - "description": "Publish all the lerna packages to the verdaccio instance", - "forwardAllArgs": false - }, - { - "command": "echo \"\n=> Running jest tests, this may take some time as real lerna workspaces are used...\n\"", - "forwardAllArgs": false - }, - { - "command": "PUBLISHED_VERSION=999.9.9-e2e.0 jest --config ./jest.config.ts", - "description": "Run the e2e tests and forward any arguments onto the jest process", - "forwardAllArgs": true - }, - { - "command": "npm run kill-verdaccio", - "description": "Clean up the verdaccio instance", - "forwardAllArgs": false - } - ] - } - } - } -} diff --git a/e2e/publish-to-verdaccio.sh b/e2e/publish-to-verdaccio.sh deleted file mode 100755 index 6ef08fd7e7..0000000000 --- a/e2e/publish-to-verdaccio.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env bash - -SCRIPT_DIR=$(dirname "$0") - -# pwd when running the command should be the e2e directory -if [ $SCRIPT_DIR != "." ]; then - echo "Error: This script must be run from the e2e directory" - exit 1 -fi - -VERSION=$1 -NPM_REGISTRY=`npm config get registry` - -if [ -z "$VERSION" ]; then - echo "Error: You must provide a version number to publish as the first positional argument" - exit 1 -fi - -if [[ ! $NPM_REGISTRY == http://localhost* ]]; then - echo "Error: $NPM_REGISTRY does not look like a local registry - exiting" - exit 1; -fi - -# Change to the prepared dist directory -cd ../dist - -echo "Updating the package versions in $(pwd) to use $VERSION" - -echo "" - -echo "Running npx lerna version $VERSION --exact --force-publish --no-git-tag-version --no-push --no-changelog --yes" - -echo "" - -npx lerna version $VERSION --exact --force-publish --no-git-tag-version --no-push --no-changelog --yes - -echo "" - -echo "Publishing all relevant packages to $NPM_REGISTRY" - -echo "" - -npx lerna publish from-package --registry="http://localhost:4872/" --yes - -echo "" - -echo "Publishing complete" diff --git a/e2e/publish/.eslintrc.json b/e2e/publish/.eslintrc.json new file mode 100644 index 0000000000..9d9c0db55b --- /dev/null +++ b/e2e/publish/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/e2e/publish/jest.config.ts b/e2e/publish/jest.config.ts new file mode 100644 index 0000000000..fdcafec3f4 --- /dev/null +++ b/e2e/publish/jest.config.ts @@ -0,0 +1,18 @@ +/* eslint-disable */ +export default { + displayName: "e2e-publish", + preset: "../../jest.preset.js", + globals: { + "ts-jest": { + tsconfig: "/tsconfig.spec.json", + }, + }, + transform: { + "^.+\\.[tj]s$": "ts-jest", + }, + moduleFileExtensions: ["ts", "js", "html"], + coverageDirectory: "../../coverage/e2e/publish", + maxWorkers: 1, + testTimeout: 60000, + setupFiles: ["/src/test-setup.ts"], +}; diff --git a/e2e/publish/project.json b/e2e/publish/project.json new file mode 100644 index 0000000000..565fdd549f --- /dev/null +++ b/e2e/publish/project.json @@ -0,0 +1,53 @@ +{ + "name": "e2e-publish", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "implicitDependencies": ["lerna", "publish"], + "tags": [], + "targets": { + "e2e": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "npm run e2e-start-local-registry" + }, + { + "command": "npm run e2e-build-package-publish" + }, + { + "command": "nx run-e2e-tests e2e-publish" + } + ], + "parallel": false + } + }, + "run-e2e-tests-process": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "nx run-e2e-tests e2e-publish", + "description": "This additional wrapper target exists so that we can ensure that the e2e tests run in a dedicated process with enough memory" + } + ], + "parallel": false + } + }, + "run-e2e-tests": { + "executor": "@nrwl/jest:jest", + "options": { + "jestConfig": "e2e/publish/jest.config.ts", + "passWithNoTests": true, + "runInBand": true + }, + "outputs": ["{workspaceRoot}/coverage/e2e/publish"] + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["e2e/publish/**/*.ts"] + } + } + } +} diff --git a/e2e/tests/lerna-publish/lerna-publish-npm-workspace-prefix.spec.ts b/e2e/publish/src/publish-npm-workspace-prefix.spec.ts similarity index 98% rename from e2e/tests/lerna-publish/lerna-publish-npm-workspace-prefix.spec.ts rename to e2e/publish/src/publish-npm-workspace-prefix.spec.ts index 5eab1730a6..b45faa03c1 100644 --- a/e2e/tests/lerna-publish/lerna-publish-npm-workspace-prefix.spec.ts +++ b/e2e/publish/src/publish-npm-workspace-prefix.spec.ts @@ -1,6 +1,5 @@ +import { Fixture, normalizeCommitSHAs, normalizeEnvironment } from "@lerna/e2e-utils"; import { writeJsonFile } from "@nrwl/devkit"; -import { Fixture } from "../../utils/fixture"; -import { normalizeCommitSHAs, normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; const randomInt = (min: number, max: number) => Math.floor(Math.random() * (max - min + 1)) + min; const randomVersion = () => `${randomInt(10, 89)}.${randomInt(10, 89)}.${randomInt(10, 89)}`; diff --git a/e2e/tests/lerna-publish/lerna-publish-npm.spec.ts b/e2e/publish/src/publish-npm.spec.ts similarity index 97% rename from e2e/tests/lerna-publish/lerna-publish-npm.spec.ts rename to e2e/publish/src/publish-npm.spec.ts index da78c5f52c..c5e8237c59 100644 --- a/e2e/tests/lerna-publish/lerna-publish-npm.spec.ts +++ b/e2e/publish/src/publish-npm.spec.ts @@ -1,5 +1,4 @@ -import { Fixture } from "../../utils/fixture"; -import { normalizeCommitSHAs, normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; +import { Fixture, normalizeCommitSHAs, normalizeEnvironment } from "@lerna/e2e-utils"; const randomInt = (min: number, max: number) => Math.floor(Math.random() * (max - min + 1)) + min; const randomVersion = () => `${randomInt(10, 89)}.${randomInt(10, 89)}.${randomInt(10, 89)}`; diff --git a/e2e/tests/lerna-publish/lerna-publish-pnpm.spec.ts b/e2e/publish/src/publish-pnpm.spec.ts similarity index 96% rename from e2e/tests/lerna-publish/lerna-publish-pnpm.spec.ts rename to e2e/publish/src/publish-pnpm.spec.ts index 398a763772..bd3c85f20d 100644 --- a/e2e/tests/lerna-publish/lerna-publish-pnpm.spec.ts +++ b/e2e/publish/src/publish-pnpm.spec.ts @@ -1,5 +1,4 @@ -import { Fixture } from "../../utils/fixture"; -import { normalizeCommitSHAs, normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; +import { Fixture, normalizeCommitSHAs, normalizeEnvironment } from "@lerna/e2e-utils"; const randomInt = (min: number, max: number) => Math.floor(Math.random() * (max - min + 1)) + min; const randomVersion = () => `${randomInt(10, 89)}.${randomInt(10, 89)}.${randomInt(10, 89)}`; diff --git a/e2e/tests/lerna-publish/lerna-publish-yarn.spec.ts b/e2e/publish/src/publish-yarn.spec.ts similarity index 97% rename from e2e/tests/lerna-publish/lerna-publish-yarn.spec.ts rename to e2e/publish/src/publish-yarn.spec.ts index 6444a99484..347b47a878 100644 --- a/e2e/tests/lerna-publish/lerna-publish-yarn.spec.ts +++ b/e2e/publish/src/publish-yarn.spec.ts @@ -1,5 +1,4 @@ -import { Fixture } from "../../utils/fixture"; -import { normalizeCommitSHAs, normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; +import { Fixture, normalizeCommitSHAs, normalizeEnvironment } from "@lerna/e2e-utils"; const randomInt = (min: number, max: number) => Math.floor(Math.random() * (max - min + 1)) + min; const randomVersion = () => `${randomInt(10, 89)}.${randomInt(10, 89)}.${randomInt(10, 89)}`; diff --git a/e2e/publish/src/test-setup.ts b/e2e/publish/src/test-setup.ts new file mode 100644 index 0000000000..bb0b4613b6 --- /dev/null +++ b/e2e/publish/src/test-setup.ts @@ -0,0 +1 @@ +jest.retryTimes(3); diff --git a/e2e/publish/tsconfig.json b/e2e/publish/tsconfig.json new file mode 100644 index 0000000000..19b9eece4d --- /dev/null +++ b/e2e/publish/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/e2e/publish/tsconfig.lib.json b/e2e/publish/tsconfig.lib.json new file mode 100644 index 0000000000..7bfc80f73e --- /dev/null +++ b/e2e/publish/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/e2e/publish/tsconfig.spec.json b/e2e/publish/tsconfig.spec.json new file mode 100644 index 0000000000..7b561216ea --- /dev/null +++ b/e2e/publish/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "src/test-setup.ts"] +} diff --git a/e2e/repair/.eslintrc.json b/e2e/repair/.eslintrc.json new file mode 100644 index 0000000000..9d9c0db55b --- /dev/null +++ b/e2e/repair/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/e2e/repair/jest.config.ts b/e2e/repair/jest.config.ts new file mode 100644 index 0000000000..3ab3e936cc --- /dev/null +++ b/e2e/repair/jest.config.ts @@ -0,0 +1,18 @@ +/* eslint-disable */ +export default { + displayName: "e2e-repair", + preset: "../../jest.preset.js", + globals: { + "ts-jest": { + tsconfig: "/tsconfig.spec.json", + }, + }, + transform: { + "^.+\\.[tj]s$": "ts-jest", + }, + moduleFileExtensions: ["ts", "js", "html"], + coverageDirectory: "../../coverage/e2e/repair", + maxWorkers: 1, + testTimeout: 60000, + setupFiles: ["/src/test-setup.ts"], +}; diff --git a/e2e/repair/project.json b/e2e/repair/project.json new file mode 100644 index 0000000000..54b0c92e95 --- /dev/null +++ b/e2e/repair/project.json @@ -0,0 +1,53 @@ +{ + "name": "e2e-repair", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "implicitDependencies": ["lerna"], + "tags": [], + "targets": { + "e2e": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "npm run e2e-start-local-registry" + }, + { + "command": "npm run e2e-build-package-publish" + }, + { + "command": "nx run-e2e-tests e2e-repair" + } + ], + "parallel": false + } + }, + "run-e2e-tests-process": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "nx run-e2e-tests e2e-repair", + "description": "This additional wrapper target exists so that we can ensure that the e2e tests run in a dedicated process with enough memory" + } + ], + "parallel": false + } + }, + "run-e2e-tests": { + "executor": "@nrwl/jest:jest", + "options": { + "jestConfig": "e2e/repair/jest.config.ts", + "passWithNoTests": true, + "runInBand": true + }, + "outputs": ["{workspaceRoot}/coverage/e2e/repair"] + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["e2e/repair/**/*.ts"] + } + } + } +} diff --git a/e2e/tests/lerna-repair/lerna-repair.spec.ts b/e2e/repair/src/repair.spec.ts similarity index 86% rename from e2e/tests/lerna-repair/lerna-repair.spec.ts rename to e2e/repair/src/repair.spec.ts index f64e414008..c18f1095e4 100644 --- a/e2e/tests/lerna-repair/lerna-repair.spec.ts +++ b/e2e/repair/src/repair.spec.ts @@ -1,5 +1,4 @@ -import { Fixture } from "../../utils/fixture"; -import { normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; +import { Fixture, normalizeEnvironment } from "@lerna/e2e-utils"; expect.addSnapshotSerializer({ serialize(str) { diff --git a/e2e/repair/src/test-setup.ts b/e2e/repair/src/test-setup.ts new file mode 100644 index 0000000000..bb0b4613b6 --- /dev/null +++ b/e2e/repair/src/test-setup.ts @@ -0,0 +1 @@ +jest.retryTimes(3); diff --git a/e2e/repair/tsconfig.json b/e2e/repair/tsconfig.json new file mode 100644 index 0000000000..19b9eece4d --- /dev/null +++ b/e2e/repair/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/e2e/repair/tsconfig.lib.json b/e2e/repair/tsconfig.lib.json new file mode 100644 index 0000000000..7bfc80f73e --- /dev/null +++ b/e2e/repair/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/e2e/repair/tsconfig.spec.json b/e2e/repair/tsconfig.spec.json new file mode 100644 index 0000000000..7b561216ea --- /dev/null +++ b/e2e/repair/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "src/test-setup.ts"] +} diff --git a/e2e/run/legacy-task-runner/.eslintrc.json b/e2e/run/legacy-task-runner/.eslintrc.json new file mode 100644 index 0000000000..3456be9b90 --- /dev/null +++ b/e2e/run/legacy-task-runner/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/e2e/run/legacy-task-runner/jest.config.ts b/e2e/run/legacy-task-runner/jest.config.ts new file mode 100644 index 0000000000..c893495353 --- /dev/null +++ b/e2e/run/legacy-task-runner/jest.config.ts @@ -0,0 +1,18 @@ +/* eslint-disable */ +export default { + displayName: "e2e-run-legacy-task-runner", + preset: "../../../jest.preset.js", + globals: { + "ts-jest": { + tsconfig: "/tsconfig.spec.json", + }, + }, + transform: { + "^.+\\.[tj]s$": "ts-jest", + }, + moduleFileExtensions: ["ts", "js", "html"], + coverageDirectory: "../../../coverage/e2e/run/legacy-task-runner", + maxWorkers: 1, + testTimeout: 60000, + setupFiles: ["/src/test-setup.ts"], +}; diff --git a/e2e/run/legacy-task-runner/project.json b/e2e/run/legacy-task-runner/project.json new file mode 100644 index 0000000000..e1f95705ce --- /dev/null +++ b/e2e/run/legacy-task-runner/project.json @@ -0,0 +1,53 @@ +{ + "name": "e2e-run-legacy-task-runner", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "implicitDependencies": ["lerna", "run"], + "tags": [], + "targets": { + "e2e": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "npm run e2e-start-local-registry" + }, + { + "command": "npm run e2e-build-package-publish" + }, + { + "command": "nx run-e2e-tests e2e-run-legacy-task-runner" + } + ], + "parallel": false + } + }, + "run-e2e-tests-process": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "nx run-e2e-tests e2e-run-legacy-task-runner", + "description": "This additional wrapper target exists so that we can ensure that the e2e tests run in a dedicated process with enough memory" + } + ], + "parallel": false + } + }, + "run-e2e-tests": { + "executor": "@nrwl/jest:jest", + "options": { + "jestConfig": "e2e/run/legacy-task-runner/jest.config.ts", + "passWithNoTests": true, + "runInBand": true + }, + "outputs": ["{workspaceRoot}/coverage/e2e/run/legacy-task-runner"] + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["e2e/run/legacy-task-runner/**/*.ts"] + } + } + } +} diff --git a/e2e/run/legacy-task-runner/src/env-files.spec.ts b/e2e/run/legacy-task-runner/src/env-files.spec.ts new file mode 100644 index 0000000000..ae894e1100 --- /dev/null +++ b/e2e/run/legacy-task-runner/src/env-files.spec.ts @@ -0,0 +1,67 @@ +import { Fixture, normalizeCommandOutput, normalizeEnvironment } from "@lerna/e2e-utils"; +import { writeFile } from "fs-extra"; + +expect.addSnapshotSerializer({ + serialize(str: string) { + return normalizeCommandOutput(normalizeEnvironment(str)); + }, + test(val: string) { + return val != null && typeof val === "string"; + }, +}); + +describe("lerna-run-legacy-task-runner-env-files", () => { + let fixture: Fixture; + + beforeEach(async () => { + fixture = await Fixture.create({ + name: "lerna-run-legacy-task-runner-env-files", + packageManager: "npm", + initializeGit: true, + runLernaInit: true, + installDependencies: true, + /** + * Because lerna run involves spawning further child processes, the tests would be too flaky + * if we didn't force deterministic terminal output by appending stderr to stdout instead + * of interleaving them. + */ + forceDeterministicTerminalOutput: true, + }); + + await writeFile(fixture.getWorkspacePath(".env"), `SOMETHING_IN_ENV_FILE=some_value_here`, "utf-8"); + + await fixture.lerna("create package-1 -y"); + await fixture.addScriptsToPackage({ + packagePath: "packages/package-1", + scripts: { + "log-env-var": "echo $SOMETHING_IN_ENV_FILE", + }, + }); + + /** + * We have to reset this environment variable for these specs because of the fact that we are executing the tests themselves using Nx, + * and by default it will have already been initialized to true. + */ + delete process.env.NX_LOAD_DOT_ENV_FILES; + }); + afterEach(() => fixture.destroy()); + + it("should log an empty value", async () => { + // Enable legacy task runner + await fixture.overrideLernaConfig({ + useNx: false, + }); + + const output = await fixture.lerna("run log-env-var -- --silent"); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + lerna notice cli v999.9.9-e2e.0 + lerna info Executing command in 1 package: "npm run log-env-var --silent" + lerna info run Ran npm script 'log-env-var' in 'package-X' in X.Xs: + lerna success run Ran npm script 'log-env-var' in 1 package in X.Xs: + lerna success - package-X + + `); + }); +}); diff --git a/e2e/tests/lerna-run/lerna-run-legacy-task-runner.spec.ts b/e2e/run/legacy-task-runner/src/run-legacy-task-runner.spec.ts similarity index 98% rename from e2e/tests/lerna-run/lerna-run-legacy-task-runner.spec.ts rename to e2e/run/legacy-task-runner/src/run-legacy-task-runner.spec.ts index 25a09f2f07..fe3d03741e 100644 --- a/e2e/tests/lerna-run/lerna-run-legacy-task-runner.spec.ts +++ b/e2e/run/legacy-task-runner/src/run-legacy-task-runner.spec.ts @@ -1,6 +1,5 @@ +import { Fixture, normalizeCommandOutput, normalizeEnvironment } from "@lerna/e2e-utils"; import { existsSync } from "fs-extra"; -import { Fixture } from "../../utils/fixture"; -import { normalizeCommandOutput, normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; expect.addSnapshotSerializer({ serialize(str: string) { diff --git a/e2e/run/legacy-task-runner/src/test-setup.ts b/e2e/run/legacy-task-runner/src/test-setup.ts new file mode 100644 index 0000000000..bb0b4613b6 --- /dev/null +++ b/e2e/run/legacy-task-runner/src/test-setup.ts @@ -0,0 +1 @@ +jest.retryTimes(3); diff --git a/e2e/run/legacy-task-runner/tsconfig.json b/e2e/run/legacy-task-runner/tsconfig.json new file mode 100644 index 0000000000..25f7201d87 --- /dev/null +++ b/e2e/run/legacy-task-runner/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/e2e/run/legacy-task-runner/tsconfig.lib.json b/e2e/run/legacy-task-runner/tsconfig.lib.json new file mode 100644 index 0000000000..c262ec67bf --- /dev/null +++ b/e2e/run/legacy-task-runner/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/e2e/run/legacy-task-runner/tsconfig.spec.json b/e2e/run/legacy-task-runner/tsconfig.spec.json new file mode 100644 index 0000000000..6c9a985d81 --- /dev/null +++ b/e2e/run/legacy-task-runner/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "src/test-setup.ts"] +} diff --git a/e2e/run/modern-task-runner/.eslintrc.json b/e2e/run/modern-task-runner/.eslintrc.json new file mode 100644 index 0000000000..3456be9b90 --- /dev/null +++ b/e2e/run/modern-task-runner/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/e2e/run/modern-task-runner/jest.config.ts b/e2e/run/modern-task-runner/jest.config.ts new file mode 100644 index 0000000000..a28e568ce8 --- /dev/null +++ b/e2e/run/modern-task-runner/jest.config.ts @@ -0,0 +1,18 @@ +/* eslint-disable */ +export default { + displayName: "e2e-run-modern-task-runner", + preset: "../../../jest.preset.js", + globals: { + "ts-jest": { + tsconfig: "/tsconfig.spec.json", + }, + }, + transform: { + "^.+\\.[tj]s$": "ts-jest", + }, + moduleFileExtensions: ["ts", "js", "html"], + coverageDirectory: "../../../coverage/e2e/run/modern-task-runner", + maxWorkers: 1, + testTimeout: 60000, + setupFiles: ["/src/test-setup.ts"], +}; diff --git a/e2e/run/modern-task-runner/project.json b/e2e/run/modern-task-runner/project.json new file mode 100644 index 0000000000..e3c37b327e --- /dev/null +++ b/e2e/run/modern-task-runner/project.json @@ -0,0 +1,53 @@ +{ + "name": "e2e-run-modern-task-runner", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "implicitDependencies": ["lerna", "run"], + "tags": [], + "targets": { + "e2e": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "npm run e2e-start-local-registry" + }, + { + "command": "npm run e2e-build-package-publish" + }, + { + "command": "nx run-e2e-tests e2e-run-modern-task-runner" + } + ], + "parallel": false + } + }, + "run-e2e-tests-process": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "nx run-e2e-tests e2e-run-modern-task-runner", + "description": "This additional wrapper target exists so that we can ensure that the e2e tests run in a dedicated process with enough memory" + } + ], + "parallel": false + } + }, + "run-e2e-tests": { + "executor": "@nrwl/jest:jest", + "options": { + "jestConfig": "e2e/run/modern-task-runner/jest.config.ts", + "passWithNoTests": true, + "runInBand": true + }, + "outputs": ["{workspaceRoot}/coverage/e2e/run/modern-task-runner"] + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["e2e/run/modern-task-runner/**/*.ts"] + } + } + } +} diff --git a/e2e/run/modern-task-runner/src/env-files.spec.ts b/e2e/run/modern-task-runner/src/env-files.spec.ts new file mode 100644 index 0000000000..6b7ba13446 --- /dev/null +++ b/e2e/run/modern-task-runner/src/env-files.spec.ts @@ -0,0 +1,94 @@ +import { Fixture, normalizeCommandOutput, normalizeEnvironment } from "@lerna/e2e-utils"; +import { writeFile } from "fs-extra"; + +expect.addSnapshotSerializer({ + serialize(str: string) { + return normalizeCommandOutput(normalizeEnvironment(str)); + }, + test(val: string) { + return val != null && typeof val === "string"; + }, +}); + +describe("lerna-run-nx-env-files", () => { + let fixture: Fixture; + + beforeEach(async () => { + fixture = await Fixture.create({ + name: "lerna-run-nx-env-files", + packageManager: "npm", + initializeGit: true, + runLernaInit: true, + installDependencies: true, + /** + * Because lerna run involves spawning further child processes, the tests would be too flaky + * if we didn't force deterministic terminal output by appending stderr to stdout instead + * of interleaving them. + */ + forceDeterministicTerminalOutput: true, + }); + + await writeFile(fixture.getWorkspacePath(".env"), `SOMETHING_IN_ENV_FILE=some_value_here`, "utf-8"); + + await fixture.lerna("create package-1 -y"); + await fixture.addScriptsToPackage({ + packagePath: "packages/package-1", + scripts: { + "log-env-var": "echo $SOMETHING_IN_ENV_FILE", + }, + }); + + /** + * We have to reset this environment variable for these specs because of the fact that we are executing the tests themselves using Nx, + * and by default it will have already been initialized to true. + */ + delete process.env.NX_LOAD_DOT_ENV_FILES; + }); + afterEach(() => fixture.destroy()); + + it("should log a value by default", async () => { + await fixture.addNxJsonToWorkspace(); + + const output = await fixture.lerna("run log-env-var -- --silent"); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > package-X:log-env-var --silent + + > package-X@0.0.0 log-env-var + > echo $SOMETHING_IN_ENV_FILE "--silent" + some_value_here --silent + + + + > Lerna (powered by Nx) Successfully ran target log-env-var for project package-X + + + lerna notice cli v999.9.9-e2e.0 + + `); + }); + + it("should log an empty value when --load-env-files=false", async () => { + await fixture.addNxJsonToWorkspace(); + + const output = await fixture.lerna("run log-env-var --load-env-files=false -- --silent"); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > package-X:log-env-var --silent + + > package-X@0.0.0 log-env-var + > echo $SOMETHING_IN_ENV_FILE "--silent" + --silent + + + + > Lerna (powered by Nx) Successfully ran target log-env-var for project package-X + + + lerna notice cli v999.9.9-e2e.0 + + `); + }); +}); diff --git a/e2e/tests/lerna-run/lerna-run-nx-include-dependencies.spec.ts b/e2e/run/modern-task-runner/src/include-dependencies.spec.ts similarity index 69% rename from e2e/tests/lerna-run/lerna-run-nx-include-dependencies.spec.ts rename to e2e/run/modern-task-runner/src/include-dependencies.spec.ts index d1023ca948..de2b4e6785 100644 --- a/e2e/tests/lerna-run/lerna-run-nx-include-dependencies.spec.ts +++ b/e2e/run/modern-task-runner/src/include-dependencies.spec.ts @@ -1,6 +1,5 @@ +import { Fixture, normalizeCommandOutput, normalizeEnvironment } from "@lerna/e2e-utils"; import { remove } from "fs-extra"; -import { Fixture } from "../../utils/fixture"; -import { normalizeCommandOutput, normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; expect.addSnapshotSerializer({ serialize(str: string) { @@ -11,7 +10,7 @@ expect.addSnapshotSerializer({ }, }); -describe("lerna-run-nx-include-dependencies", () => { +describe.skip("lerna-run-nx-include-dependencies", () => { let fixture: Fixture; beforeEach(async () => { @@ -92,24 +91,24 @@ describe("lerna-run-nx-include-dependencies", () => { expect(output.combinedOutput).toMatchInlineSnapshot(` - > package-X:print-name --silent + > package-X:print-name --silent - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - test-package-X --silent + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + test-package-X --silent - > Lerna (powered by Nx) Successfully ran target print-name for project package-X + > Lerna (powered by Nx) Successfully ran target print-name for project package-X - lerna notice cli v999.9.9-e2e.0 - lerna verb rootPath /tmp/lerna-e2e/lerna-run-nx-include-dependencies/lerna-workspace - lerna notice filter including "package-X" - lerna info filter [ 'package-X' ] - lerna verb run nx.json was not found or is missing targetDefaults. Task dependencies will not be automatically included. + lerna notice cli v999.9.9-e2e.0 + lerna verb rootPath /tmp/lerna-e2e/lerna-run-nx-include-dependencies/lerna-workspace + lerna notice filter including "package-X" + lerna info filter [ 'package-X' ] + lerna verb run Nx target configuration was not found. Task dependencies will not be automatically included. - `); + `); }); }); @@ -121,28 +120,28 @@ describe("lerna-run-nx-include-dependencies", () => { expect(output.combinedOutput).toMatchInlineSnapshot(` - > package-X:print-name --silent + > package-X:print-name --silent - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - test-package-X --silent + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + test-package-X --silent - > Lerna (powered by Nx) Successfully ran target print-name for project package-X + > Lerna (powered by Nx) Successfully ran target print-name for project package-X - lerna notice cli v999.9.9-e2e.0 - lerna verb rootPath /tmp/lerna-e2e/lerna-run-nx-include-dependencies/lerna-workspace - lerna notice filter including "package-X" - lerna info filter [ 'package-X' ] - lerna verb run nx.json was not found or is missing targetDefaults. Task dependencies will not be automatically included. + lerna notice cli v999.9.9-e2e.0 + lerna verb rootPath /tmp/lerna-e2e/lerna-run-nx-include-dependencies/lerna-workspace + lerna notice filter including "package-X" + lerna info filter [ 'package-X' ] + lerna verb run Nx target configuration was not found. Task dependencies will not be automatically included. - `); + `); }); }); - describe("with nx enabled and with nx.json with targetDefaults", () => { + describe("with nx enabled and with Nx target configuration", () => { it("should include package dependencies by default", async () => { await fixture.addNxJsonToWorkspace(); await fixture.updateJson("nx.json", (json) => ({ @@ -164,17 +163,13 @@ describe("lerna-run-nx-include-dependencies", () => { > package-X:print-name - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - > package-X:print-name - > package-X@0.0.0 print-name > echo test-package-X - + > package-X@0.0.0 print-name + > echo test-package-X + test-package-X test-package-X > package-X:print-name @@ -192,7 +187,7 @@ describe("lerna-run-nx-include-dependencies", () => { lerna verb rootPath /tmp/lerna-e2e/lerna-run-nx-include-dependencies/lerna-workspace lerna notice filter including "package-X" lerna info filter [ 'package-X' ] - lerna verb run nx.json with targetDefaults was found. Task dependencies will be automatically included. + lerna verb run Nx target configuration was found. Task dependencies will be automatically included. `); }); @@ -223,25 +218,19 @@ describe("lerna-run-nx-include-dependencies", () => { > package-X:print-name - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - > package-X:print-name - > package-X@0.0.0 print-name > echo test-package-X - + > package-X@0.0.0 print-name + > echo test-package-X + test-package-X test-package-X > package-X:print-name - > package-X@0.0.0 print-name > echo test-package-X - test-package-X @@ -254,8 +243,8 @@ describe("lerna-run-nx-include-dependencies", () => { lerna notice filter including "package-X" lerna notice filter including dependencies lerna info filter [ 'package-X' ] - lerna verb run nx.json with targetDefaults was found. Task dependencies will be automatically included. - lerna info run Using the "include-dependencies" option when nx.json has targetDefaults defined will include both task dependencies detected by Nx and project dependencies detected by Lerna. See https://lerna.js.org/docs/lerna6-obsolete-options#--include-dependencies for details. + lerna verb run Nx target configuration was found. Task dependencies will be automatically included. + lerna info run Using the "include-dependencies" option when Nx targets are configured will include both task dependencies detected by Nx and project dependencies detected by Lerna. See https://lerna.js.org/docs/lerna6-obsolete-options#--include-dependencies for details. `); }); @@ -279,6 +268,61 @@ describe("lerna-run-nx-include-dependencies", () => { + > package-X:print-name + + + > package-X:print-name + + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + test-package-X + test-package-X + + > package-X:print-name + + > package-X@0.0.0 print-name + > echo test-package-X + test-package-X + + + + > Lerna (powered by Nx) Successfully ran target print-name for project package-X + + + lerna notice cli v999.9.9-e2e.0 + lerna verb rootPath /tmp/lerna-e2e/lerna-run-nx-include-dependencies/lerna-workspace + lerna notice filter including "package-X" + lerna notice filter excluding "package-X" + lerna info filter [ 'package-X', '!package-X' ] + lerna verb run Nx target configuration was found. Task dependencies will be automatically included. + lerna info run Using the "ignore" option when Nx targets are configured will exclude only tasks that are not determined to be required by Nx. See https://lerna.js.org/docs/lerna6-obsolete-options#--ignore for details. + + `); + }); + }); + + describe("with nx enabled and with targets in a library's package.json", () => { + it("should include dependencies by default", async () => { + await fixture.addNxJsonToWorkspace(); + await fixture.updateJson("packages/package-3/package.json", (json) => ({ + ...json, + nx: { + targets: { + "print-name": { + dependsOn: ["^print-name"], + }, + }, + }, + })); + const output = await fixture.lerna("run print-name --scope package-3"); + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for project package-X and 2 task(s) it depends on + + + > package-X:print-name @@ -309,10 +353,8 @@ describe("lerna-run-nx-include-dependencies", () => { lerna notice cli v999.9.9-e2e.0 lerna verb rootPath /tmp/lerna-e2e/lerna-run-nx-include-dependencies/lerna-workspace lerna notice filter including "package-X" - lerna notice filter excluding "package-X" - lerna info filter [ 'package-X', '!package-X' ] - lerna verb run nx.json with targetDefaults was found. Task dependencies will be automatically included. - lerna info run Using the "ignore" option when nx.json has targetDefaults defined will exclude only tasks that are not determined to be required by Nx. See https://lerna.js.org/docs/lerna6-obsolete-options#--ignore for details. + lerna info filter [ 'package-X' ] + lerna verb run Nx target configuration was found. Task dependencies will be automatically included. `); }); diff --git a/e2e/run/modern-task-runner/src/incompatible-options.spec.ts b/e2e/run/modern-task-runner/src/incompatible-options.spec.ts new file mode 100644 index 0000000000..7ef1342c11 --- /dev/null +++ b/e2e/run/modern-task-runner/src/incompatible-options.spec.ts @@ -0,0 +1,526 @@ +import { Fixture, normalizeCommandOutput, normalizeEnvironment } from "@lerna/e2e-utils"; +import { remove } from "fs-extra"; + +expect.addSnapshotSerializer({ + serialize(str: string) { + return normalizeCommandOutput(normalizeEnvironment(str)); + }, + test(val: string) { + return val != null && typeof val === "string"; + }, +}); + +describe.skip("lerna-run-nx-incompatible-options", () => { + let fixture: Fixture; + + beforeAll(async () => { + fixture = await Fixture.create({ + name: "lerna-run-nx-incompatible-options", + packageManager: "npm", + initializeGit: true, + runLernaInit: true, + installDependencies: true, + /** + * Because lerna run involves spawning further child processes, the tests would be too flaky + * if we didn't force deterministic terminal output by appending stderr to stdout instead + * of interleaving them. + */ + forceDeterministicTerminalOutput: true, + }); + + await fixture.addNxJsonToWorkspace(); + await fixture.updateJson("nx.json", (json) => ({ + ...json, + targetDefaults: { + "print-name": { + dependsOn: ["^print-name"], + }, + }, + })); + + await fixture.lerna("create package-1 -y"); + await fixture.addScriptsToPackage({ + packagePath: "packages/package-1", + scripts: { + "print-name": "echo test-package-1", + }, + }); + await fixture.lerna("create package-2 -y"); + await fixture.addScriptsToPackage({ + packagePath: "packages/package-2", + scripts: { + "print-name": "echo test-package-2", + }, + }); + await fixture.lerna("create package-3 -y"); + await fixture.addScriptsToPackage({ + packagePath: "packages/package-3", + scripts: { + "print-name": "echo test-package-3", + }, + }); + }); + afterAll(() => fixture.destroy()); + + it("should run script on all child packages using nx", async () => { + const output = await fixture.lerna(`run print-name`); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + + + > package-X:print-name + + + > package-X:print-name + + + > package-X:print-name + + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + test-package-X + test-package-X + test-package-X + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + lerna notice cli v999.9.9-e2e.0 + + `); + }); + + it("--parallel should warn", async () => { + const output = await fixture.lerna(`run print-name --parallel`); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + + + > package-X:print-name + + + > package-X:print-name + + + > package-X:print-name + + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + test-package-X + test-package-X + test-package-X + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + lerna notice cli v999.9.9-e2e.0 + lerna WARN run "parallel", "sort", and "no-sort" are ignored when Nx targets are configured. See https://lerna.js.org/docs/lerna6-obsolete-options for details. + + `); + }); + + it("--sort should warn", async () => { + const output = await fixture.lerna(`run print-name --sort`); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + + + > package-X:print-name + + + > package-X:print-name + + + > package-X:print-name + + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + test-package-X + test-package-X + test-package-X + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + lerna notice cli v999.9.9-e2e.0 + lerna WARN run "parallel", "sort", and "no-sort" are ignored when Nx targets are configured. See https://lerna.js.org/docs/lerna6-obsolete-options for details. + + `); + }); + + it("--no-sort should warn", async () => { + const output = await fixture.lerna(`run print-name --no-sort`); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + + + > package-X:print-name + + + > package-X:print-name + + + > package-X:print-name + + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + test-package-X + test-package-X + test-package-X + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + lerna notice cli v999.9.9-e2e.0 + lerna WARN run "parallel", "sort", and "no-sort" are ignored when Nx targets are configured. See https://lerna.js.org/docs/lerna6-obsolete-options for details. + + `); + }); + + it("--include-dependencies should warn", async () => { + const output = await fixture.lerna(`run print-name --include-dependencies`); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + + + > package-X:print-name + + + > package-X:print-name + + + > package-X:print-name + + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + test-package-X + test-package-X + test-package-X + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + lerna notice cli v999.9.9-e2e.0 + lerna notice filter including dependencies + lerna info run Using the "include-dependencies" option when Nx targets are configured will include both task dependencies detected by Nx and project dependencies detected by Lerna. See https://lerna.js.org/docs/lerna6-obsolete-options#--include-dependencies for details. + + `); + }); +}); + +describe.skip("lerna-run-nx-incompatible-options without nx.json", () => { + let fixture: Fixture; + + beforeAll(async () => { + fixture = await Fixture.create({ + name: "lerna-run-nx-incompatible-options", + packageManager: "npm", + initializeGit: true, + runLernaInit: true, + installDependencies: true, + /** + * Because lerna run involves spawning further child processes, the tests would be too flaky + * if we didn't force deterministic terminal output by appending stderr to stdout instead + * of interleaving them. + */ + forceDeterministicTerminalOutput: true, + }); + + await fixture.addNxJsonToWorkspace(); + await remove(fixture.getWorkspacePath("nx.json")); + + await fixture.lerna("create package-1 -y"); + await fixture.addScriptsToPackage({ + packagePath: "packages/package-1", + scripts: { + "print-name": "echo test-package-1", + }, + }); + await fixture.lerna("create package-2 -y"); + await fixture.addScriptsToPackage({ + packagePath: "packages/package-2", + scripts: { + "print-name": "echo test-package-2", + }, + }); + await fixture.lerna("create package-3 -y"); + await fixture.addScriptsToPackage({ + packagePath: "packages/package-3", + scripts: { + "print-name": "echo test-package-3", + }, + }); + }); + afterAll(() => fixture.destroy()); + + it("should run script on all child packages using nx", async () => { + const output = await fixture.lerna(`run print-name`); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + + + > package-X:print-name + + + > package-X:print-name + + + > package-X:print-name + + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + test-package-X + test-package-X + test-package-X + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + lerna notice cli v999.9.9-e2e.0 + + `); + }); + + it("--parallel should not warn", async () => { + const output = await fixture.lerna(`run print-name --parallel`); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + + + > package-X:print-name + + + > package-X:print-name + + + > package-X:print-name + + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + test-package-X + test-package-X + test-package-X + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + lerna notice cli v999.9.9-e2e.0 + + `); + }); + + it("--sort should not warn", async () => { + const output = await fixture.lerna(`run print-name --sort`); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + + + > package-X:print-name + + + > package-X:print-name + + + > package-X:print-name + + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + test-package-X + test-package-X + test-package-X + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + lerna notice cli v999.9.9-e2e.0 + + `); + }); + + it("--no-sort should not warn", async () => { + const output = await fixture.lerna(`run print-name --no-sort`); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + + + > package-X:print-name + + + > package-X:print-name + + + > package-X:print-name + + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + test-package-X + test-package-X + test-package-X + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + lerna notice cli v999.9.9-e2e.0 + + `); + }); + + it("--include-dependencies should not warn", async () => { + const output = await fixture.lerna(`run print-name --include-dependencies`); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + + + > package-X:print-name + + + > package-X:print-name + + + > package-X:print-name + + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + test-package-X + test-package-X + test-package-X + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + lerna notice cli v999.9.9-e2e.0 + lerna notice filter including dependencies + + `); + }); +}); diff --git a/e2e/tests/lerna-run/lerna-run-nx-pnpm.spec.ts b/e2e/run/modern-task-runner/src/pnpm.spec.ts similarity index 97% rename from e2e/tests/lerna-run/lerna-run-nx-pnpm.spec.ts rename to e2e/run/modern-task-runner/src/pnpm.spec.ts index 99fa4e903d..34590fecee 100644 --- a/e2e/tests/lerna-run/lerna-run-nx-pnpm.spec.ts +++ b/e2e/run/modern-task-runner/src/pnpm.spec.ts @@ -1,5 +1,4 @@ -import { Fixture } from "../../utils/fixture"; -import { normalizeCommandOutput, normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; +import { Fixture, normalizeCommandOutput, normalizeEnvironment } from "@lerna/e2e-utils"; expect.addSnapshotSerializer({ serialize(str: string) { @@ -12,12 +11,12 @@ expect.addSnapshotSerializer({ }, }); -describe("lerna-run-nx", () => { +describe.skip("lerna-run-nx-pnpm", () => { let fixture: Fixture; beforeAll(async () => { fixture = await Fixture.create({ - name: "lerna-run", + name: "lerna-run-nx-pnpm", packageManager: "pnpm", initializeGit: true, runLernaInit: true, diff --git a/e2e/run/modern-task-runner/src/run-modern-task-runner.spec.ts b/e2e/run/modern-task-runner/src/run-modern-task-runner.spec.ts new file mode 100644 index 0000000000..85ced66e78 --- /dev/null +++ b/e2e/run/modern-task-runner/src/run-modern-task-runner.spec.ts @@ -0,0 +1,410 @@ +import { Fixture, normalizeCommandOutput, normalizeEnvironment } from "@lerna/e2e-utils"; +import { existsSync } from "fs-extra"; + +expect.addSnapshotSerializer({ + serialize(str: string) { + return normalizeCommandOutput(normalizeEnvironment(str)); + }, + test(val: string) { + return val != null && typeof val === "string"; + }, +}); + +describe.skip("lerna-run-nx", () => { + let fixture: Fixture; + + beforeAll(async () => { + fixture = await Fixture.create({ + name: "lerna-run-nx", + packageManager: "npm", + initializeGit: true, + runLernaInit: true, + installDependencies: true, + /** + * Because lerna run involves spawning further child processes, the tests would be too flaky + * if we didn't force deterministic terminal output by appending stderr to stdout instead + * of interleaving them. + */ + forceDeterministicTerminalOutput: true, + }); + + await fixture.lerna("create package-1 -y"); + await fixture.addScriptsToPackage({ + packagePath: "packages/package-1", + scripts: { + "print-name": "echo test-package-1", + }, + }); + await fixture.lerna("create package-2 -y"); + await fixture.addScriptsToPackage({ + packagePath: "packages/package-2", + scripts: { + "print-name": "echo test-package-2", + }, + }); + await fixture.lerna("create package-3 -y"); + await fixture.addScriptsToPackage({ + packagePath: "packages/package-3", + scripts: { + "print-name": "echo test-package-3", + }, + }); + }); + afterAll(() => fixture.destroy()); + + it("should run script on all child packages", async () => { + const output = await fixture.lerna("run print-name -- --silent"); + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + With additional flags: + --silent=true + + + + > package-X:print-name --silent + + + > package-X:print-name --silent + + + > package-X:print-name --silent + + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + test-package-X --silent + test-package-X --silent + test-package-X --silent + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + lerna notice cli v999.9.9-e2e.0 + + `); + }); + + describe("--stream", () => { + it("should run script on all child packages with package name prefixes", async () => { + const output = await fixture.lerna("run print-name --stream --concurrency=1 -- --silent"); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + With additional flags: + --silent=true + + + + > package-X:print-name --silent + + package-X: > package-X@0.0.0 print-name + package-X: > echo test-package-X "--silent" + package-X: test-package-X --silent + + > package-X:print-name --silent + + package-X: > package-X@0.0.0 print-name + package-X: > echo test-package-X "--silent" + package-X: test-package-X --silent + + > package-X:print-name --silent + + package-X: > package-X@0.0.0 print-name + package-X: > echo test-package-X "--silent" + package-X: test-package-X --silent + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + lerna notice cli v999.9.9-e2e.0 + + `); + }); + }); + + describe("--parallel", () => { + it("should run script on all child packages with package name prefixes", async () => { + const output = await fixture.lerna("run print-name --parallel -- --silent"); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + With additional flags: + --silent=true + + + + > package-X:print-name --silent + + + > package-X:print-name --silent + + + > package-X:print-name --silent + + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + test-package-X --silent + test-package-X --silent + test-package-X --silent + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + lerna notice cli v999.9.9-e2e.0 + + `); + }); + }); + + describe("--no-prefix", () => { + describe("--parallel", () => { + it("should run script on all child packages and suppress package name prefixes", async () => { + const output = await fixture.lerna("run print-name --no-prefix --parallel -- --silent"); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + With additional flags: + --silent=true + + + + > package-X:print-name --silent + + + > package-X:print-name --silent + + + > package-X:print-name --silent + + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + test-package-X --silent + test-package-X --silent + test-package-X --silent + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + lerna notice cli v999.9.9-e2e.0 + lerna WARN run "no-prefix" is ignored when not using streaming output. + + `); + }); + }); + + describe("--stream", () => { + it("should run script on all child packages and suppress package name prefixes", async () => { + const output = await fixture.lerna("run print-name --no-prefix --concurrency=1 --stream -- --silent"); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + With additional flags: + --silent=true + + + + > package-X:print-name --silent + + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + test-package-X --silent + + > package-X:print-name --silent + + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + test-package-X --silent + + > package-X:print-name --silent + + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + test-package-X --silent + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + lerna notice cli v999.9.9-e2e.0 + + `); + }); + }); + }); + + describe("--profile", () => { + it("should run script on all child packages and create a performance profile", async () => { + const output = await fixture.lerna("run print-name --profile -- --silent"); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + With additional flags: + --silent=true + + + + > package-X:print-name --silent + + + > package-X:print-name --silent + + + > package-X:print-name --silent + + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + test-package-X --silent + test-package-X --silent + test-package-X --silent + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + Performance Profile: /tmp/lerna-e2e/lerna-run-nx/lerna-workspace/Lerna-Profile-XXXXXXXXTXXXXXX.json + lerna notice cli v999.9.9-e2e.0 + + `); + + const lernaProfileSavedOutputLine = output.combinedOutput.split("\n")[8]; + + const lernaProfileFileName = lernaProfileSavedOutputLine.split("lerna-run/lerna-workspace/")[1]; + + expect(existsSync(fixture.getWorkspacePath(lernaProfileFileName))).toBe(true); + }); + }); + + describe("--profile --profile-location", () => { + it("should run script on all child packages and create a performance profile at provided location", async () => { + const output = await fixture.lerna(`run print-name --profile --profile-location=profiles -- --silent`); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + With additional flags: + --silent=true + + + + > package-X:print-name --silent + + + > package-X:print-name --silent + + + > package-X:print-name --silent + + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + > package-X@0.0.0 print-name + > echo test-package-X "--silent" + test-package-X --silent + test-package-X --silent + test-package-X --silent + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + Performance Profile: /tmp/lerna-e2e/lerna-run-nx/lerna-workspace/profiles/Lerna-Profile-XXXXXXXXTXXXXXX.json + lerna notice cli v999.9.9-e2e.0 + + `); + + const lernaProfileSavedOutputLine = output.combinedOutput.split("\n")[8]; + + const lernaProfileFileName = lernaProfileSavedOutputLine.split("lerna-run/lerna-workspace/")[1]; + + expect(existsSync(fixture.getWorkspacePath(lernaProfileFileName))).toBe(true); + }); + }); + + describe("--npm-client", () => { + it("should error when attempting to use the legacy option", async () => { + const output = await fixture.lerna(`run print-name --npm-client=yarn`, { silenceError: true }); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + lerna notice cli v999.9.9-e2e.0 + lerna ERR! run The legacy task runner option \`--npm-client\` is not currently supported. Please open an issue on https://github.com/lerna/lerna if you require this feature. + + `); + }); + }); + + describe("--ci", () => { + it("should log that ci is enabled", async () => { + const output = await fixture.lerna(`run print-name --ci`); + + expect(output.combinedOutput).toContain("lerna info ci enabled"); + }); + }); +}); diff --git a/e2e/utils/setup.ts b/e2e/run/modern-task-runner/src/test-setup.ts similarity index 58% rename from e2e/utils/setup.ts rename to e2e/run/modern-task-runner/src/test-setup.ts index 7b3c2e18bf..85ddf574ed 100644 --- a/e2e/utils/setup.ts +++ b/e2e/run/modern-task-runner/src/test-setup.ts @@ -1,2 +1 @@ -// @ts-ignore jest.retryTimes(5); diff --git a/e2e/run/modern-task-runner/src/with-nx-config.spec.ts b/e2e/run/modern-task-runner/src/with-nx-config.spec.ts new file mode 100644 index 0000000000..004fe383fd --- /dev/null +++ b/e2e/run/modern-task-runner/src/with-nx-config.spec.ts @@ -0,0 +1,190 @@ +import { Fixture, normalizeCommandOutput, normalizeEnvironment } from "@lerna/e2e-utils"; + +expect.addSnapshotSerializer({ + serialize(str: string) { + return normalizeCommandOutput(normalizeEnvironment(str)); + }, + test(val: string) { + return val != null && typeof val === "string"; + }, +}); + +describe.skip("lerna run with nx config", () => { + let fixture: Fixture; + + beforeAll(async () => { + fixture = await Fixture.create({ + name: "lerna-run-with-nx", + packageManager: "npm", + initializeGit: true, + runLernaInit: true, + installDependencies: true, + /** + * Because lerna run involves spawning further child processes, the tests would be too flaky + * if we didn't force deterministic terminal output by appending stderr to stdout instead + * of interleaving them. + */ + forceDeterministicTerminalOutput: true, + }); + + await fixture.addNxJsonToWorkspace(); + + await fixture.lerna("create package-1 -y"); + await fixture.addScriptsToPackage({ + packagePath: "packages/package-1", + scripts: { + "print-name": "echo test-package-1", + }, + }); + await fixture.lerna("create package-2 -y"); + await fixture.addScriptsToPackage({ + packagePath: "packages/package-2", + scripts: { + "print-name": "echo test-package-2", + }, + }); + await fixture.lerna("create package-3 -y"); + await fixture.addScriptsToPackage({ + packagePath: "packages/package-3", + scripts: { + "print-name": "echo test-package-3", + }, + }); + await fixture.lerna("create package-4 -y"); + await fixture.addScriptsToPackage({ + packagePath: "packages/package-4", + scripts: { + "print:name": "echo test-package-4", + "print-name-run-one-only": "echo test-package-4-run-one-only", + "print:name:run-one-only": "echo test-package-4-run-one-only-with-colon", + }, + }); + await fixture.lerna("create package-5 -y"); + await fixture.addScriptsToPackage({ + packagePath: "packages/package-5", + scripts: { + "print:name": "echo test-package-5", + }, + }); + }); + afterAll(() => fixture.destroy()); + + it("should run script on all child packages using nx", async () => { + const output = await fixture.lerna(`run print-name`); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print-name for 3 project(s): + + - package-X + - package-X + - package-X + + + + > package-X:print-name + + + > package-X:print-name + + + > package-X:print-name + + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + > package-X@0.0.0 print-name + > echo test-package-X + test-package-X + test-package-X + test-package-X + + + + > Lerna (powered by Nx) Successfully ran target print-name for 3 projects + + + lerna notice cli v999.9.9-e2e.0 + + `); + }); + + describe("run one", () => { + it("should run script on single child package using nx", async () => { + const output = await fixture.lerna(`run print-name-run-one-only`); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > package-X:print-name-run-one-only + + > package-X@0.0.0 print-name-run-one-only + > echo test-package-X-run-one-only + test-package-X-run-one-only + + + + > Lerna (powered by Nx) Successfully ran target print-name-run-one-only for project package-X + + + lerna notice cli v999.9.9-e2e.0 + + `); + }); + + it("should run script with colon on single child package using nx", async () => { + const output = await fixture.lerna(`run print:name:run-one-only`); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > package-X:"print:name:run-one-only" + + > package-X@0.0.0 print:name:run-one-only + > echo test-package-X-run-one-only-with-colon + test-package-X-run-one-only-with-colon + + + + > Lerna (powered by Nx) Successfully ran target print:name:run-one-only for project package-X + + + lerna notice cli v999.9.9-e2e.0 + + `); + }); + }); + + it("should run script with colon on all child package using nx", async () => { + const output = await fixture.lerna(`run print:name`); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + + > Lerna (powered by Nx) Running target print:name for 2 project(s): + + - package-X + - package-X + + + + > package-X:"print:name" + + + > package-X:"print:name" + + > package-X@0.0.0 print:name + > echo test-package-X + > package-X@0.0.0 print:name + > echo test-package-X + test-package-X + test-package-X + + + + > Lerna (powered by Nx) Successfully ran target print:name for 2 projects + + + lerna notice cli v999.9.9-e2e.0 + + `); + }); +}); diff --git a/e2e/run/modern-task-runner/tsconfig.json b/e2e/run/modern-task-runner/tsconfig.json new file mode 100644 index 0000000000..25f7201d87 --- /dev/null +++ b/e2e/run/modern-task-runner/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/e2e/run/modern-task-runner/tsconfig.lib.json b/e2e/run/modern-task-runner/tsconfig.lib.json new file mode 100644 index 0000000000..c262ec67bf --- /dev/null +++ b/e2e/run/modern-task-runner/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/e2e/run/modern-task-runner/tsconfig.spec.json b/e2e/run/modern-task-runner/tsconfig.spec.json new file mode 100644 index 0000000000..6c9a985d81 --- /dev/null +++ b/e2e/run/modern-task-runner/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "src/test-setup.ts"] +} diff --git a/e2e/tests/lerna-run/lerna-run-nx-env-files.ts b/e2e/tests/lerna-run/lerna-run-nx-env-files.ts deleted file mode 100644 index 909e25c771..0000000000 --- a/e2e/tests/lerna-run/lerna-run-nx-env-files.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { remove, writeFile } from "fs-extra"; -import { Fixture } from "../../utils/fixture"; -import { normalizeCommandOutput, normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; - -expect.addSnapshotSerializer({ - serialize(str: string) { - return normalizeCommandOutput(normalizeEnvironment(str)); - }, - test(val: string) { - return val != null && typeof val === "string"; - }, -}); - -describe("lerna-run-nx-env-files", () => { - let fixture: Fixture; - - beforeEach(async () => { - fixture = await Fixture.create({ - name: "lerna-run-nx-env-files", - packageManager: "npm", - initializeGit: true, - runLernaInit: true, - installDependencies: true, - /** - * Because lerna run involves spawning further child processes, the tests would be too flaky - * if we didn't force deterministic terminal output by appending stderr to stdout instead - * of interleaving them. - */ - forceDeterministicTerminalOutput: true, - }); - - await writeFile(fixture.getWorkspacePath(".env"), `SOMETHING_IN_ENV_FILE=some_value_here`, "utf-8"); - - await fixture.lerna("create package-1 -y"); - await fixture.addScriptsToPackage({ - packagePath: "packages/package-1", - scripts: { - "log-env-var": "echo $SOMETHING_IN_ENV_FILE", - }, - }); - }); - afterEach(() => fixture.destroy()); - - describe("without nx enabled", () => { - it("should log an empty value", async () => { - // Enable legacy task runner - await fixture.overrideLernaConfig({ - useNx: false, - }); - - const output = await fixture.lerna("run log-env-var -- --silent"); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - lerna notice cli v999.9.9-e2e.0 - lerna info Executing command in 1 package: "npm run log-env-var --silent" - lerna info run Ran npm script 'log-env-var' in 'package-X' in X.Xs: - lerna success run Ran npm script 'log-env-var' in 1 package in X.Xs: - lerna success - package-X - - `); - }); - }); - - describe("with nx enabled", () => { - it("should log a value by default", async () => { - await fixture.addNxJsonToWorkspace(); - - const output = await fixture.lerna("run log-env-var -- --silent"); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Nx didn't recognize the following args: loadDotEnvFiles - - When using '--' all executor args have to be defined after '--'. - - - > package-X:log-env-var --silent - - > package-X@0.0.0 log-env-var - > echo $SOMETHING_IN_ENV_FILE "--silent" - some_value_here --silent - - - - > Lerna (powered by Nx) Successfully ran target log-env-var for project package-X - - - lerna notice cli v999.9.9-e2e.0 - - `); - }); - - it("should log an empty value when --load-env-files=false", async () => { - await fixture.addNxJsonToWorkspace(); - - const output = await fixture.lerna("run log-env-var --load-env-files=false -- --silent"); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Nx didn't recognize the following args: loadDotEnvFiles - - When using '--' all executor args have to be defined after '--'. - - - > package-X:log-env-var --silent - - > package-X@0.0.0 log-env-var - > echo $SOMETHING_IN_ENV_FILE "--silent" - --silent - - - - > Lerna (powered by Nx) Successfully ran target log-env-var for project package-X - - - lerna notice cli v999.9.9-e2e.0 - - `); - }); - }); -}); diff --git a/e2e/tests/lerna-run/lerna-run-nx-incompatible-options.spec.ts b/e2e/tests/lerna-run/lerna-run-nx-incompatible-options.spec.ts deleted file mode 100644 index 2ea07cb28b..0000000000 --- a/e2e/tests/lerna-run/lerna-run-nx-incompatible-options.spec.ts +++ /dev/null @@ -1,587 +0,0 @@ -import { remove } from "fs-extra"; -import { Fixture } from "../../utils/fixture"; -import { normalizeCommandOutput, normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; - -expect.addSnapshotSerializer({ - serialize(str: string) { - return normalizeCommandOutput(normalizeEnvironment(str)); - }, - test(val: string) { - return val != null && typeof val === "string"; - }, -}); - -describe("lerna-run-nx-incompatible-options", () => { - let fixture: Fixture; - - beforeAll(async () => { - fixture = await Fixture.create({ - name: "lerna-run-nx-incompatible-options", - packageManager: "npm", - initializeGit: true, - runLernaInit: true, - installDependencies: true, - /** - * Because lerna run involves spawning further child processes, the tests would be too flaky - * if we didn't force deterministic terminal output by appending stderr to stdout instead - * of interleaving them. - */ - forceDeterministicTerminalOutput: true, - }); - - await fixture.addNxJsonToWorkspace(); - await fixture.updateJson("nx.json", (json) => ({ - ...json, - targetDefaults: { - "print-name": { - dependsOn: ["^print-name"], - }, - }, - })); - - await fixture.lerna("create package-1 -y"); - await fixture.addScriptsToPackage({ - packagePath: "packages/package-1", - scripts: { - "print-name": "echo test-package-1", - }, - }); - await fixture.lerna("create package-2 -y"); - await fixture.addScriptsToPackage({ - packagePath: "packages/package-2", - scripts: { - "print-name": "echo test-package-2", - }, - }); - await fixture.lerna("create package-3 -y"); - await fixture.addScriptsToPackage({ - packagePath: "packages/package-3", - scripts: { - "print-name": "echo test-package-3", - }, - }); - }); - afterAll(() => fixture.destroy()); - - it("should run script on all child packages using nx", async () => { - const output = await fixture.lerna(`run print-name`); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - lerna notice cli v999.9.9-e2e.0 - - `); - }); - - it("--parallel should warn", async () => { - const output = await fixture.lerna(`run print-name --parallel`); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - lerna notice cli v999.9.9-e2e.0 - lerna WARN run "parallel", "sort", and "no-sort" are ignored when nx.json has targetDefaults defined. See https://lerna.js.org/docs/lerna6-obsolete-options for details. - - `); - }); - - it("--sort should warn", async () => { - const output = await fixture.lerna(`run print-name --sort`); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - lerna notice cli v999.9.9-e2e.0 - lerna WARN run "parallel", "sort", and "no-sort" are ignored when nx.json has targetDefaults defined. See https://lerna.js.org/docs/lerna6-obsolete-options for details. - - `); - }); - - it("--no-sort should warn", async () => { - const output = await fixture.lerna(`run print-name --no-sort`); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - lerna notice cli v999.9.9-e2e.0 - lerna WARN run "parallel", "sort", and "no-sort" are ignored when nx.json has targetDefaults defined. See https://lerna.js.org/docs/lerna6-obsolete-options for details. - - `); - }); - - it("--include-dependencies should warn", async () => { - const output = await fixture.lerna(`run print-name --include-dependencies`); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - lerna notice cli v999.9.9-e2e.0 - lerna notice filter including dependencies - lerna info run Using the "include-dependencies" option when nx.json has targetDefaults defined will include both task dependencies detected by Nx and project dependencies detected by Lerna. See https://lerna.js.org/docs/lerna6-obsolete-options#--include-dependencies for details. - - `); - }); -}); - -describe("lerna-run-nx-incompatible-options without nx.json", () => { - let fixture: Fixture; - - beforeAll(async () => { - fixture = await Fixture.create({ - name: "lerna-run-nx-incompatible-options", - packageManager: "npm", - initializeGit: true, - runLernaInit: true, - installDependencies: true, - /** - * Because lerna run involves spawning further child processes, the tests would be too flaky - * if we didn't force deterministic terminal output by appending stderr to stdout instead - * of interleaving them. - */ - forceDeterministicTerminalOutput: true, - }); - - await fixture.addNxJsonToWorkspace(); - await remove(fixture.getWorkspacePath("nx.json")); - - await fixture.lerna("create package-1 -y"); - await fixture.addScriptsToPackage({ - packagePath: "packages/package-1", - scripts: { - "print-name": "echo test-package-1", - }, - }); - await fixture.lerna("create package-2 -y"); - await fixture.addScriptsToPackage({ - packagePath: "packages/package-2", - scripts: { - "print-name": "echo test-package-2", - }, - }); - await fixture.lerna("create package-3 -y"); - await fixture.addScriptsToPackage({ - packagePath: "packages/package-3", - scripts: { - "print-name": "echo test-package-3", - }, - }); - }); - afterAll(() => fixture.destroy()); - - it("should run script on all child packages using nx", async () => { - const output = await fixture.lerna(`run print-name`); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - lerna notice cli v999.9.9-e2e.0 - - `); - }); - - it("--parallel should not warn", async () => { - const output = await fixture.lerna(`run print-name --parallel`); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - lerna notice cli v999.9.9-e2e.0 - - `); - }); - - it("--sort should not warn", async () => { - const output = await fixture.lerna(`run print-name --sort`); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - lerna notice cli v999.9.9-e2e.0 - - `); - }); - - it("--no-sort should not warn", async () => { - const output = await fixture.lerna(`run print-name --no-sort`); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - lerna notice cli v999.9.9-e2e.0 - - `); - }); - - it("--include-dependencies should not warn", async () => { - const output = await fixture.lerna(`run print-name --include-dependencies`); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - lerna notice cli v999.9.9-e2e.0 - lerna notice filter including dependencies - - `); - }); -}); diff --git a/e2e/tests/lerna-run/lerna-run.spec.ts b/e2e/tests/lerna-run/lerna-run.spec.ts deleted file mode 100644 index d44d325cf0..0000000000 --- a/e2e/tests/lerna-run/lerna-run.spec.ts +++ /dev/null @@ -1,631 +0,0 @@ -import { existsSync } from "fs-extra"; -import { Fixture } from "../../utils/fixture"; -import { normalizeCommandOutput, normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; - -expect.addSnapshotSerializer({ - serialize(str: string) { - return normalizeCommandOutput(normalizeEnvironment(str)); - }, - test(val: string) { - return val != null && typeof val === "string"; - }, -}); - -describe("lerna-run", () => { - let fixture: Fixture; - - beforeAll(async () => { - fixture = await Fixture.create({ - name: "lerna-run", - packageManager: "npm", - initializeGit: true, - runLernaInit: true, - installDependencies: true, - /** - * Because lerna run involves spawning further child processes, the tests would be too flaky - * if we didn't force deterministic terminal output by appending stderr to stdout instead - * of interleaving them. - */ - forceDeterministicTerminalOutput: true, - }); - - await fixture.lerna("create package-1 -y"); - await fixture.addScriptsToPackage({ - packagePath: "packages/package-1", - scripts: { - "print-name": "echo test-package-1", - }, - }); - await fixture.lerna("create package-2 -y"); - await fixture.addScriptsToPackage({ - packagePath: "packages/package-2", - scripts: { - "print-name": "echo test-package-2", - }, - }); - await fixture.lerna("create package-3 -y"); - await fixture.addScriptsToPackage({ - packagePath: "packages/package-3", - scripts: { - "print-name": "echo test-package-3", - }, - }); - }); - afterAll(() => fixture.destroy()); - - it("should run script on all child packages", async () => { - const output = await fixture.lerna("run print-name -- --silent"); - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - With additional flags: - --silent=true - - - - > package-X:print-name --silent - - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - - test-package-X --silent - - > package-X:print-name --silent - - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - - test-package-X --silent - - > package-X:print-name --silent - - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - - test-package-X --silent - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - lerna notice cli v999.9.9-e2e.0 - - `); - }); - - describe("--stream", () => { - it("should run script on all child packages with package name prefixes", async () => { - const output = await fixture.lerna("run print-name --stream --concurrency=1 -- --silent"); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - With additional flags: - --silent=true - - - - > package-X:print-name --silent - - package-X: > package-X@0.0.0 print-name - package-X: > echo test-package-X "--silent" - package-X: test-package-X --silent - - > package-X:print-name --silent - - package-X: > package-X@0.0.0 print-name - package-X: > echo test-package-X "--silent" - package-X: test-package-X --silent - - > package-X:print-name --silent - - package-X: > package-X@0.0.0 print-name - package-X: > echo test-package-X "--silent" - package-X: test-package-X --silent - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - lerna notice cli v999.9.9-e2e.0 - - `); - }); - }); - - describe("--parallel", () => { - it("should run script on all child packages with package name prefixes", async () => { - const output = await fixture.lerna("run print-name --parallel -- --silent"); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - With additional flags: - --silent=true - - - - > package-X:print-name --silent - - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - - test-package-X --silent - - > package-X:print-name --silent - - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - - test-package-X --silent - - > package-X:print-name --silent - - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - - test-package-X --silent - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - lerna notice cli v999.9.9-e2e.0 - - `); - }); - }); - - describe("--no-prefix", () => { - describe("--parallel", () => { - it("should run script on all child packages and suppress package name prefixes", async () => { - const output = await fixture.lerna("run print-name --no-prefix --parallel -- --silent"); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - With additional flags: - --silent=true - - - - > package-X:print-name --silent - - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - - test-package-X --silent - - > package-X:print-name --silent - - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - - test-package-X --silent - - > package-X:print-name --silent - - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - - test-package-X --silent - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - lerna notice cli v999.9.9-e2e.0 - lerna WARN run "no-prefix" is ignored when not using streaming output. - - `); - }); - }); - - describe("--stream", () => { - it("should run script on all child packages and suppress package name prefixes", async () => { - const output = await fixture.lerna("run print-name --no-prefix --concurrency=1 --stream -- --silent"); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - With additional flags: - --silent=true - - - - > package-X:print-name --silent - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - test-package-X --silent - - > package-X:print-name --silent - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - test-package-X --silent - - > package-X:print-name --silent - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - test-package-X --silent - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - lerna notice cli v999.9.9-e2e.0 - - `); - }); - }); - }); - - describe("--profile", () => { - it("should run script on all child packages and create a performance profile", async () => { - const output = await fixture.lerna("run print-name --profile -- --silent"); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - With additional flags: - --silent=true - - - - > package-X:print-name --silent - - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - - test-package-X --silent - - > package-X:print-name --silent - - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - - test-package-X --silent - - > package-X:print-name --silent - - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - - test-package-X --silent - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - Performance Profile: /tmp/lerna-e2e/lerna-run/lerna-workspace/Lerna-Profile-XXXXXXXXTXXXXXX.json - lerna notice cli v999.9.9-e2e.0 - - `); - - const lernaProfileSavedOutputLine = output.combinedOutput.split("\n")[8]; - - const lernaProfileFileName = lernaProfileSavedOutputLine.split("lerna-run/lerna-workspace/")[1]; - - expect(existsSync(fixture.getWorkspacePath(lernaProfileFileName))).toBe(true); - }); - }); - - describe("--profile --profile-location", () => { - it("should run script on all child packages and create a performance profile at provided location", async () => { - const output = await fixture.lerna(`run print-name --profile --profile-location=profiles -- --silent`); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - With additional flags: - --silent=true - - - - > package-X:print-name --silent - - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - - test-package-X --silent - - > package-X:print-name --silent - - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - - test-package-X --silent - - > package-X:print-name --silent - - - > package-X@0.0.0 print-name - > echo test-package-X "--silent" - - test-package-X --silent - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - Performance Profile: /tmp/lerna-e2e/lerna-run/lerna-workspace/profiles/Lerna-Profile-XXXXXXXXTXXXXXX.json - lerna notice cli v999.9.9-e2e.0 - - `); - - const lernaProfileSavedOutputLine = output.combinedOutput.split("\n")[8]; - - const lernaProfileFileName = lernaProfileSavedOutputLine.split("lerna-run/lerna-workspace/")[1]; - - expect(existsSync(fixture.getWorkspacePath(lernaProfileFileName))).toBe(true); - }); - }); - - describe("--npm-client", () => { - it("should error when attempting to use the legacy option", async () => { - const output = await fixture.lerna(`run print-name --npm-client=yarn`, { silenceError: true }); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - lerna notice cli v999.9.9-e2e.0 - lerna ERR! run The legacy task runner option \`--npm-client\` is not currently supported. Please open an issue on https://github.com/lerna/lerna if you require this feature. - - `); - }); - }); - - describe("--ci", () => { - it("should log that ci is enabled", async () => { - const output = await fixture.lerna(`run print-name --ci`); - - expect(output.combinedOutput).toContain("lerna info ci enabled"); - }); - }); -}); - -describe("lerna run with nx config", () => { - let fixture: Fixture; - - beforeAll(async () => { - fixture = await Fixture.create({ - name: "lerna-run-with-nx", - packageManager: "npm", - initializeGit: true, - runLernaInit: true, - installDependencies: true, - /** - * Because lerna run involves spawning further child processes, the tests would be too flaky - * if we didn't force deterministic terminal output by appending stderr to stdout instead - * of interleaving them. - */ - forceDeterministicTerminalOutput: true, - }); - - await fixture.addNxJsonToWorkspace(); - - await fixture.lerna("create package-1 -y"); - await fixture.addScriptsToPackage({ - packagePath: "packages/package-1", - scripts: { - "print-name": "echo test-package-1", - }, - }); - await fixture.lerna("create package-2 -y"); - await fixture.addScriptsToPackage({ - packagePath: "packages/package-2", - scripts: { - "print-name": "echo test-package-2", - }, - }); - await fixture.lerna("create package-3 -y"); - await fixture.addScriptsToPackage({ - packagePath: "packages/package-3", - scripts: { - "print-name": "echo test-package-3", - }, - }); - await fixture.lerna("create package-4 -y"); - await fixture.addScriptsToPackage({ - packagePath: "packages/package-4", - scripts: { - "print:name": "echo test-package-4", - "print-name-run-one-only": "echo test-package-4-run-one-only", - "print:name:run-one-only": "echo test-package-4-run-one-only-with-colon", - }, - }); - await fixture.lerna("create package-5 -y"); - await fixture.addScriptsToPackage({ - packagePath: "packages/package-5", - scripts: { - "print:name": "echo test-package-5", - }, - }); - }); - afterAll(() => fixture.destroy()); - - it("should run script on all child packages using nx", async () => { - const output = await fixture.lerna(`run print-name`); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print-name for 3 project(s): - - - package-X - - package-X - - package-X - - - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - > package-X:print-name - - - > package-X@0.0.0 print-name - > echo test-package-X - - test-package-X - - - - > Lerna (powered by Nx) Successfully ran target print-name for 3 projects - - - lerna notice cli v999.9.9-e2e.0 - - `); - }); - - describe("run one", () => { - it("should run script on single child package using nx", async () => { - const output = await fixture.lerna(`run print-name-run-one-only`); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > package-X:print-name-run-one-only - - > package-X@0.0.0 print-name-run-one-only - > echo test-package-X-run-one-only - test-package-X-run-one-only - - - - > Lerna (powered by Nx) Successfully ran target print-name-run-one-only for project package-X - - - lerna notice cli v999.9.9-e2e.0 - - `); - }); - - it("should run script with colon on single child package using nx", async () => { - const output = await fixture.lerna(`run print:name:run-one-only`); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > package-X:"print:name:run-one-only" - - > package-X@0.0.0 print:name:run-one-only - > echo test-package-X-run-one-only-with-colon - test-package-X-run-one-only-with-colon - - - - > Lerna (powered by Nx) Successfully ran target print:name:run-one-only for project package-X - - - lerna notice cli v999.9.9-e2e.0 - - `); - }); - }); - - it("should run script with colon on all child package using nx", async () => { - const output = await fixture.lerna(`run print:name`); - - expect(output.combinedOutput).toMatchInlineSnapshot(` - - > Lerna (powered by Nx) Running target print:name for 2 project(s): - - - package-X - - package-X - - - - > package-X:"print:name" - - - > package-X@0.0.0 print:name - > echo test-package-X - - test-package-X - - > package-X:"print:name" - - - > package-X@0.0.0 print:name - > echo test-package-X - - test-package-X - - - - > Lerna (powered by Nx) Successfully ran target print:name for 2 projects - - - lerna notice cli v999.9.9-e2e.0 - - `); - }); -}); diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json deleted file mode 100644 index 41d92816b6..0000000000 --- a/e2e/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "compilerOptions": { - "strict": true, - "module": "esnext", - "moduleResolution": "node", - "target": "es2021", - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "types": ["node", "jest"] - }, - "include": [], - "files": [], - "references": [ - { - "path": "./tsconfig.spec.json" - } - ] -} diff --git a/e2e/version/.eslintrc.json b/e2e/version/.eslintrc.json new file mode 100644 index 0000000000..9d9c0db55b --- /dev/null +++ b/e2e/version/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/e2e/version/jest.config.ts b/e2e/version/jest.config.ts new file mode 100644 index 0000000000..2d48e57f16 --- /dev/null +++ b/e2e/version/jest.config.ts @@ -0,0 +1,18 @@ +/* eslint-disable */ +export default { + displayName: "e2e-version", + preset: "../../jest.preset.js", + globals: { + "ts-jest": { + tsconfig: "/tsconfig.spec.json", + }, + }, + transform: { + "^.+\\.[tj]s$": "ts-jest", + }, + moduleFileExtensions: ["ts", "js", "html"], + coverageDirectory: "../../coverage/e2e/version", + maxWorkers: 1, + testTimeout: 60000, + setupFiles: ["/src/test-setup.ts"], +}; diff --git a/e2e/version/project.json b/e2e/version/project.json new file mode 100644 index 0000000000..a8d3db0d33 --- /dev/null +++ b/e2e/version/project.json @@ -0,0 +1,52 @@ +{ + "name": "e2e-version", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "implicitDependencies": ["lerna", "version"], + "tags": [], + "targets": { + "e2e": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "npm run e2e-start-local-registry" + }, + { + "command": "npm run e2e-build-package-publish" + }, + { + "command": "nx run-e2e-tests e2e-version" + } + ], + "parallel": false + } + }, + "run-e2e-tests-process": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "nx run-e2e-tests e2e-version" + } + ], + "parallel": false + } + }, + "run-e2e-tests": { + "executor": "@nrwl/jest:jest", + "options": { + "jestConfig": "e2e/version/jest.config.ts", + "passWithNoTests": true, + "runInBand": true + }, + "outputs": ["{workspaceRoot}/coverage/e2e/version"] + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["e2e/version/**/*.ts"] + } + } + } +} diff --git a/e2e/tests/lerna-version/conventional-commits.spec.ts b/e2e/version/src/conventional-commits.spec.ts similarity index 90% rename from e2e/tests/lerna-version/conventional-commits.spec.ts rename to e2e/version/src/conventional-commits.spec.ts index b4a818f657..e052f7b6f6 100644 --- a/e2e/tests/lerna-version/conventional-commits.spec.ts +++ b/e2e/version/src/conventional-commits.spec.ts @@ -1,5 +1,4 @@ -import { Fixture } from "../../utils/fixture"; -import { normalizeCommitSHAs, normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; +import { Fixture, normalizeCommitSHAs, normalizeEnvironment } from "@lerna/e2e-utils"; expect.addSnapshotSerializer({ serialize(str: string) { @@ -288,6 +287,51 @@ describe("lerna-version-conventional-commits", () => { `); }); + it("should correctly generate and bump prerelease versions when using --conventional-prerelease and --conventional-bump-prerelease", async () => { + await fixture.createInitialGitCommit(); + + await fixture.lerna("create package-a -y"); + await fixture.exec("git add --all"); + await fixture.exec("git commit -m 'feat: add package-a'"); + + await fixture.lerna("create package-b -y"); + await fixture.exec("git add --all"); + await fixture.exec("git commit -m 'feat: add package-b'"); + + await fixture.exec("git push origin test-main"); + + // Initial versioning with two packages created + await fixture.lerna("version --conventional-commits --conventional-prerelease -y", { + silenceError: true, + }); + + // Update and version just package-a + await fixture.exec("echo update_package_a > packages/package-a/new_file.txt"); + await fixture.exec("git add --all"); + await fixture.exec("git commit -m 'fix: update package-a'"); + + // Bump a prerelease version + const output = await fixture.lerna("version --conventional-commits --conventional-bump-prerelease -y", { + silenceError: true, + }); + + expect(output.combinedOutput).toMatchInlineSnapshot(` + lerna notice cli v999.9.9-e2e.0 + lerna info current version 0.1.0-alpha.0 + lerna info Looking for changed packages since v0.1.0-alpha.0 + lerna info getChangelogConfig Successfully resolved preset "conventional-changelog-angular" + + Changes: + - package-a: 0.1.0-alpha.0 => 0.1.1-alpha.0 + + lerna info auto-confirmed + lerna info execute Skipping releases + lerna info git Pushing tags... + lerna success version finished + + `); + }); + describe("independent packages", () => { it("should correctly generate changelog and version information when releasing packages independently", async () => { await fixture.createInitialGitCommit(); diff --git a/e2e/tests/lerna-version/errors.spec.ts b/e2e/version/src/errors.spec.ts similarity index 92% rename from e2e/tests/lerna-version/errors.spec.ts rename to e2e/version/src/errors.spec.ts index df7677bf5b..15a6d866f5 100644 --- a/e2e/tests/lerna-version/errors.spec.ts +++ b/e2e/version/src/errors.spec.ts @@ -1,5 +1,4 @@ -import { Fixture } from "../../utils/fixture"; -import { normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; +import { Fixture, normalizeEnvironment } from "@lerna/e2e-utils"; expect.addSnapshotSerializer({ serialize(str: string) { diff --git a/e2e/tests/lerna-version/independent-pnpm.spec.ts b/e2e/version/src/independent-pnpm.spec.ts similarity index 95% rename from e2e/tests/lerna-version/independent-pnpm.spec.ts rename to e2e/version/src/independent-pnpm.spec.ts index 1f6795d300..e0ecb39229 100644 --- a/e2e/tests/lerna-version/independent-pnpm.spec.ts +++ b/e2e/version/src/independent-pnpm.spec.ts @@ -1,5 +1,4 @@ -import { Fixture } from "../../utils/fixture"; -import { normalizeCommitSHAs, normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; +import { Fixture, normalizeCommitSHAs, normalizeEnvironment } from "@lerna/e2e-utils"; expect.addSnapshotSerializer({ serialize(str: string) { diff --git a/e2e/tests/lerna-version/npm-workspaces.spec.ts b/e2e/version/src/npm-workspaces.spec.ts similarity index 96% rename from e2e/tests/lerna-version/npm-workspaces.spec.ts rename to e2e/version/src/npm-workspaces.spec.ts index ffd2815a1c..656352db3f 100644 --- a/e2e/tests/lerna-version/npm-workspaces.spec.ts +++ b/e2e/version/src/npm-workspaces.spec.ts @@ -1,5 +1,4 @@ -import { Fixture } from "../../utils/fixture"; -import { normalizeCommitSHAs, normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; +import { Fixture, normalizeCommitSHAs, normalizeEnvironment } from "@lerna/e2e-utils"; expect.addSnapshotSerializer({ serialize(str: string) { diff --git a/e2e/tests/lerna-version/positional-arguments-pnpm.spec.ts b/e2e/version/src/positional-arguments-pnpm.spec.ts similarity index 97% rename from e2e/tests/lerna-version/positional-arguments-pnpm.spec.ts rename to e2e/version/src/positional-arguments-pnpm.spec.ts index e770176a5b..5461d85a43 100644 --- a/e2e/tests/lerna-version/positional-arguments-pnpm.spec.ts +++ b/e2e/version/src/positional-arguments-pnpm.spec.ts @@ -1,6 +1,5 @@ +import { Fixture, normalizeCommitSHAs, normalizeEnvironment } from "@lerna/e2e-utils"; import { load } from "js-yaml"; -import { Fixture } from "../../utils/fixture"; -import { normalizeCommitSHAs, normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; interface PnpmLockfile { importers: { diff --git a/e2e/tests/lerna-version/positional-arguments.spec.ts b/e2e/version/src/positional-arguments.spec.ts similarity index 98% rename from e2e/tests/lerna-version/positional-arguments.spec.ts rename to e2e/version/src/positional-arguments.spec.ts index c4b607e40c..4700fcd0cd 100644 --- a/e2e/tests/lerna-version/positional-arguments.spec.ts +++ b/e2e/version/src/positional-arguments.spec.ts @@ -1,5 +1,4 @@ -import { Fixture } from "../../utils/fixture"; -import { normalizeCommitSHAs, normalizeEnvironment } from "../../utils/snapshot-serializer-utils"; +import { Fixture, normalizeCommitSHAs, normalizeEnvironment } from "@lerna/e2e-utils"; expect.addSnapshotSerializer({ serialize(str: string) { diff --git a/e2e/version/src/test-setup.ts b/e2e/version/src/test-setup.ts new file mode 100644 index 0000000000..bb0b4613b6 --- /dev/null +++ b/e2e/version/src/test-setup.ts @@ -0,0 +1 @@ +jest.retryTimes(3); diff --git a/e2e/version/tsconfig.json b/e2e/version/tsconfig.json new file mode 100644 index 0000000000..19b9eece4d --- /dev/null +++ b/e2e/version/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/e2e/version/tsconfig.lib.json b/e2e/version/tsconfig.lib.json new file mode 100644 index 0000000000..7bfc80f73e --- /dev/null +++ b/e2e/version/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/e2e/version/tsconfig.spec.json b/e2e/version/tsconfig.spec.json new file mode 100644 index 0000000000..7b561216ea --- /dev/null +++ b/e2e/version/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "src/test-setup.ts"] +} diff --git a/integration/lerna-publish-conventional-fixed-prerelease.test.js b/integration/lerna-publish-conventional-fixed-prerelease.test.js index ac0a478ebc..2659acba04 100644 --- a/integration/lerna-publish-conventional-fixed-prerelease.test.js +++ b/integration/lerna-publish-conventional-fixed-prerelease.test.js @@ -136,14 +136,8 @@ Successfully published: absolute: true, followSymbolicLinks: false, }); - const [ - rootChangelog, - pkg1Changelog, - pkg2Changelog, - pkg3Changelog, - pkg4Changelog, - pkg5Changelog, - ] = await Promise.all(changelogFilePaths.sort().map((fp) => fs.readFile(fp, "utf8"))); + const [rootChangelog, pkg1Changelog, pkg2Changelog, pkg3Changelog, pkg4Changelog, pkg5Changelog] = + await Promise.all(changelogFilePaths.sort().map((fp) => fs.readFile(fp, "utf8"))); /** * ./CHANGELOG.md diff --git a/integration/lerna-publish-conventional-fixed.test.js b/integration/lerna-publish-conventional-fixed.test.js index 10ee7e9797..67b8c66fdf 100644 --- a/integration/lerna-publish-conventional-fixed.test.js +++ b/integration/lerna-publish-conventional-fixed.test.js @@ -61,14 +61,8 @@ Successfully published: absolute: true, followSymbolicLinks: false, }); - const [ - rootChangelog, - pkg1Changelog, - pkg2Changelog, - pkg3Changelog, - pkg4Changelog, - pkg5Changelog, - ] = await Promise.all(changelogFilePaths.sort().map((fp) => fs.readFile(fp, "utf8"))); + const [rootChangelog, pkg1Changelog, pkg2Changelog, pkg3Changelog, pkg4Changelog, pkg5Changelog] = + await Promise.all(changelogFilePaths.sort().map((fp) => fs.readFile(fp, "utf8"))); /** * ./CHANGELOG.md diff --git a/jest.config.js b/jest.config.js index 8204ab1bd8..d613615817 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,5 +1,8 @@ "use strict"; +// eslint-disable-next-line node/no-unpublished-require +// const { getJestProjects } = require("@nrwl/jest"); + module.exports = { // ensure `npm cit` uses clean cache cacheDirectory: "./node_modules/.cache/jest", @@ -17,6 +20,7 @@ module.exports = { setupFilesAfterEnv: ["@lerna-test/helpers/setup-unit-test-timeout.js"], testEnvironment: "node", verbose: !!process.env.CI, + // projects: getJestProjects(), }; // split tests into smaller chunks because windows is agonizingly slow diff --git a/jest.preset.js b/jest.preset.js new file mode 100644 index 0000000000..ff2ea00a78 --- /dev/null +++ b/jest.preset.js @@ -0,0 +1,4 @@ +// eslint-disable-next-line import/no-extraneous-dependencies, node/no-unpublished-require +const nxPreset = require("@nrwl/jest/preset").default; + +module.exports = { ...nxPreset }; diff --git a/lerna.json b/lerna.json index c61e6b4a36..2ef4e1c0ae 100644 --- a/lerna.json +++ b/lerna.json @@ -17,5 +17,5 @@ }, "ignoreChanges": ["**/__fixtures__/**", "**/__tests__/**", "**/*.md"], "useWorkspaces": true, - "version": "6.0.3" + "version": "6.1.0" } diff --git a/libs/e2e-utils/.babelrc b/libs/e2e-utils/.babelrc new file mode 100644 index 0000000000..cf7ddd99c6 --- /dev/null +++ b/libs/e2e-utils/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": [["@nrwl/web/babel", { "useBuiltIns": "usage" }]] +} diff --git a/libs/e2e-utils/.eslintrc.json b/libs/e2e-utils/.eslintrc.json new file mode 100644 index 0000000000..9d9c0db55b --- /dev/null +++ b/libs/e2e-utils/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/libs/e2e-utils/README.md b/libs/e2e-utils/README.md new file mode 100644 index 0000000000..ed4177b5ef --- /dev/null +++ b/libs/e2e-utils/README.md @@ -0,0 +1,11 @@ +# libs-e2e-utils + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test libs-e2e-utils` to execute the unit tests via [Jest](https://jestjs.io). + +## Running lint + +Run `nx lint libs-e2e-utils` to execute the lint via [ESLint](https://eslint.org/). diff --git a/libs/e2e-utils/jest.config.ts b/libs/e2e-utils/jest.config.ts new file mode 100644 index 0000000000..b602a5325e --- /dev/null +++ b/libs/e2e-utils/jest.config.ts @@ -0,0 +1,16 @@ +/* eslint-disable */ +export default { + displayName: "libs-e2e-utils", + preset: "../../jest.preset.js", + globals: { + "ts-jest": { + tsconfig: "/tsconfig.spec.json", + }, + }, + testEnvironment: "node", + transform: { + "^.+\\.[tj]sx?$": "ts-jest", + }, + moduleFileExtensions: ["ts", "tsx", "js", "jsx"], + coverageDirectory: "../../coverage/libs/e2e-utils", +}; diff --git a/libs/e2e-utils/project.json b/libs/e2e-utils/project.json new file mode 100644 index 0000000000..5a7df692b1 --- /dev/null +++ b/libs/e2e-utils/project.json @@ -0,0 +1,24 @@ +{ + "name": "libs-e2e-utils", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/e2e-utils/src", + "projectType": "library", + "targets": { + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["libs/e2e-utils/**/*.ts"] + } + }, + "test": { + "executor": "@nrwl/jest:jest", + "outputs": ["{workspaceRoot}/coverage/libs/e2e-utils"], + "options": { + "jestConfig": "libs/e2e-utils/jest.config.ts", + "passWithNoTests": true + } + } + }, + "tags": [] +} diff --git a/libs/e2e-utils/src/index.ts b/libs/e2e-utils/src/index.ts new file mode 100644 index 0000000000..5fa3d0ab32 --- /dev/null +++ b/libs/e2e-utils/src/index.ts @@ -0,0 +1,2 @@ +export * from "./lib/fixture"; +export * from "./lib/snapshot-serializer-utils"; diff --git a/e2e/utils/fixture.ts b/libs/e2e-utils/src/lib/fixture.ts similarity index 98% rename from e2e/utils/fixture.ts rename to libs/e2e-utils/src/lib/fixture.ts index a6679a97ea..e73fdd0642 100644 --- a/e2e/utils/fixture.ts +++ b/libs/e2e-utils/src/lib/fixture.ts @@ -97,7 +97,9 @@ export class Fixture { private async setNpmRegistry(): Promise { if (this.packageManager === "pnpm") { await this.exec(`mkdir ${PNPM_STORE}`); - await this.exec(`echo "registry=${REGISTRY}\nstore-dir = ${PNPM_STORE}" > .npmrc`); + await this.exec( + `echo "registry=${REGISTRY}\nstore-dir = ${PNPM_STORE}\nverify-store-integrity=false" > .npmrc` + ); } } @@ -456,8 +458,8 @@ function stripConsoleColors(log: string): string { function getPublishedVersion(): string { process.env.PUBLISHED_VERSION = process.env.PUBLISHED_VERSION || - // fallback to latest if built package is missing - "latest"; + // fallback to known e2e version + "999.9.9-e2e.0"; return process.env.PUBLISHED_VERSION; } diff --git a/e2e/utils/snapshot-serializer-utils.ts b/libs/e2e-utils/src/lib/snapshot-serializer-utils.ts similarity index 100% rename from e2e/utils/snapshot-serializer-utils.ts rename to libs/e2e-utils/src/lib/snapshot-serializer-utils.ts diff --git a/libs/e2e-utils/tsconfig.json b/libs/e2e-utils/tsconfig.json new file mode 100644 index 0000000000..e258886ffc --- /dev/null +++ b/libs/e2e-utils/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + } +} diff --git a/libs/e2e-utils/tsconfig.lib.json b/libs/e2e-utils/tsconfig.lib.json new file mode 100644 index 0000000000..b3f90c22fe --- /dev/null +++ b/libs/e2e-utils/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": [] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts"] +} diff --git a/e2e/tsconfig.spec.json b/libs/e2e-utils/tsconfig.spec.json similarity index 89% rename from e2e/tsconfig.spec.json rename to libs/e2e-utils/tsconfig.spec.json index 1a24bfb0a1..ff08addd60 100644 --- a/e2e/tsconfig.spec.json +++ b/libs/e2e-utils/tsconfig.spec.json @@ -6,15 +6,15 @@ "types": ["jest", "node"] }, "include": [ + "jest.config.ts", "**/*.test.ts", "**/*.spec.ts", - "**/*.spec.tsx", "**/*.test.tsx", - "**/*.spec.js", + "**/*.spec.tsx", "**/*.test.js", - "**/*.spec.jsx", + "**/*.spec.js", "**/*.test.jsx", - "**/*.d.ts", - "jest.config.ts" + "**/*.spec.jsx", + "**/*.d.ts" ] } diff --git a/libs/nx-plugin/.eslintrc.json b/libs/nx-plugin/.eslintrc.json new file mode 100644 index 0000000000..556554a795 --- /dev/null +++ b/libs/nx-plugin/.eslintrc.json @@ -0,0 +1,25 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["./package.json", "./generators.json", "./executors.json"], + "parser": "jsonc-eslint-parser", + "rules": { + "@nrwl/nx/nx-plugin-checks": "error" + } + } + ] +} diff --git a/libs/nx-plugin/README.md b/libs/nx-plugin/README.md new file mode 100644 index 0000000000..a996a682fd --- /dev/null +++ b/libs/nx-plugin/README.md @@ -0,0 +1,11 @@ +# packages-nx-plugin + +This library was generated with [Nx](https://nx.dev). + +## Building + +Run `nx build packages-nx-plugin` to build the library. + +## Running unit tests + +Run `nx test packages-nx-plugin` to execute the unit tests via [Jest](https://jestjs.io). diff --git a/libs/nx-plugin/executors.json b/libs/nx-plugin/executors.json new file mode 100644 index 0000000000..b64f99d988 --- /dev/null +++ b/libs/nx-plugin/executors.json @@ -0,0 +1,4 @@ +{ + "$schema": "http://json-schema.org/schema", + "executors": {} +} diff --git a/libs/nx-plugin/generators.json b/libs/nx-plugin/generators.json new file mode 100644 index 0000000000..b7d4af7624 --- /dev/null +++ b/libs/nx-plugin/generators.json @@ -0,0 +1,12 @@ +{ + "$schema": "http://json-schema.org/schema", + "name": "packages-nx-plugin", + "version": "0.0.1", + "generators": { + "e2e-project": { + "factory": "./src/generators/e2e-project/generator", + "schema": "./src/generators/e2e-project/schema.json", + "description": "Create a new lerna e2e project" + } + } +} diff --git a/libs/nx-plugin/jest.config.ts b/libs/nx-plugin/jest.config.ts new file mode 100644 index 0000000000..629ac0c0e5 --- /dev/null +++ b/libs/nx-plugin/jest.config.ts @@ -0,0 +1,15 @@ +/* eslint-disable */ +export default { + displayName: "packages-nx-plugin", + preset: "../../jest.preset.js", + globals: { + "ts-jest": { + tsconfig: "/tsconfig.spec.json", + }, + }, + transform: { + "^.+\\.[tj]s$": "ts-jest", + }, + moduleFileExtensions: ["ts", "js", "html"], + coverageDirectory: "../../coverage/libs/nx-plugin", +}; diff --git a/libs/nx-plugin/package.json b/libs/nx-plugin/package.json new file mode 100644 index 0000000000..73b8abbb1b --- /dev/null +++ b/libs/nx-plugin/package.json @@ -0,0 +1,6 @@ +{ + "private": true, + "name": "@lerna/nx-plugin", + "generators": "./generators.json", + "executors": "./executors.json" +} diff --git a/libs/nx-plugin/project.json b/libs/nx-plugin/project.json new file mode 100644 index 0000000000..f912ce7718 --- /dev/null +++ b/libs/nx-plugin/project.json @@ -0,0 +1,61 @@ +{ + "name": "nx-plugin", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/nx-plugin/src", + "projectType": "library", + "targets": { + "build": { + "executor": "@nrwl/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist//libs/nx-plugin", + "main": "libs/nx-plugin/src/index.ts", + "tsConfig": "libs/nx-plugin/tsconfig.lib.json", + "assets": [ + "libs/nx-plugin/*.md", + { + "input": "./libs/nx-plugin/src", + "glob": "**/!(*.ts)", + "output": "./src" + }, + { + "input": "./libs/nx-plugin/src", + "glob": "**/*.d.ts", + "output": "./src" + }, + { + "input": "./libs/nx-plugin", + "glob": "generators.json", + "output": "." + }, + { + "input": "./libs/nx-plugin", + "glob": "executors.json", + "output": "." + } + ] + } + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": [ + "libs/nx-plugin/**/*.ts", + "libs/nx-plugin/generators.json", + "libs/nx-plugin/executors.json", + "libs/nx-plugin/package.json" + ] + } + }, + "test": { + "executor": "@nrwl/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "libs/nx-plugin/jest.config.ts", + "passWithNoTests": true + } + } + }, + "tags": [] +} diff --git a/libs/nx-plugin/src/generators/e2e-project/generator.spec.ts b/libs/nx-plugin/src/generators/e2e-project/generator.spec.ts new file mode 100644 index 0000000000..2008bb3347 --- /dev/null +++ b/libs/nx-plugin/src/generators/e2e-project/generator.spec.ts @@ -0,0 +1,125 @@ +import { createTreeWithEmptyWorkspace } from "@nrwl/devkit/testing"; +import { Tree, readProjectConfiguration, readJson } from "@nrwl/devkit"; + +import generator from "./generator"; +import { E2eProjectGeneratorSchema } from "./schema"; + +describe("e2e-project generator", () => { + let appTree: Tree; + const options: E2eProjectGeneratorSchema = { name: "test" }; + + beforeEach(() => { + appTree = createTreeWithEmptyWorkspace(); + }); + + it("should generate a new e2e project with appropriate config", async () => { + await generator(appTree, options); + const config = readProjectConfiguration(appTree, "e2e-test"); + expect(config).toMatchInlineSnapshot(` + Object { + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "name": "e2e-test", + "root": "e2e/test", + "tags": Array [], + "targets": Object { + "e2e": Object { + "executor": "nx:run-commands", + "options": Object { + "commands": Array [ + Object { + "command": "npm run e2e-start-local-registry", + }, + Object { + "command": "npm run e2e-build-package-publish", + }, + Object { + "command": "nx run-e2e-tests e2e-test", + }, + ], + "parallel": false, + }, + }, + "lint": Object { + "executor": "@nrwl/linter:eslint", + "options": Object { + "lintFilePatterns": Array [ + "e2e/test/**/*.ts", + ], + }, + "outputs": Array [ + "{options.outputFile}", + ], + }, + "run-e2e-tests": Object { + "executor": "@nrwl/jest:jest", + "options": Object { + "jestConfig": "e2e/test/jest.config.ts", + "passWithNoTests": true, + "runInBand": true, + }, + "outputs": Array [ + "{workspaceRoot}/coverage/e2e/test", + ], + }, + "run-e2e-tests-process": Object { + "executor": "nx:run-commands", + "options": Object { + "commands": Array [ + Object { + "command": "nx run-e2e-tests e2e-test", + "description": "This additional wrapper target exists so that we can ensure that the e2e tests run in a dedicated process with enough memory", + }, + ], + "parallel": false, + }, + }, + }, + } + `); + + expect(readJson(appTree, "e2e/test/tsconfig.spec.json")).toMatchInlineSnapshot(` + Object { + "compilerOptions": Object { + "module": "commonjs", + "outDir": "../../dist/out-tsc", + "types": Array [ + "jest", + "node", + ], + }, + "extends": "./tsconfig.json", + "include": Array [ + "jest.config.ts", + "**/*.test.ts", + "**/*.spec.ts", + "**/*.d.ts", + "src/test-setup.ts", + ], + } + `); + + expect(appTree.read("e2e/test/jest.config.ts").toString()).toMatchInlineSnapshot(` + "/* eslint-disable */ + export default { + displayName: 'e2e-test', + preset: '../../jest.preset.js', + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + } + }, + transform: { + '^.+\\\\\\\\.[tj]s$': 'ts-jest' + }, + moduleFileExtensions: ['ts', 'js', 'html'], + coverageDirectory: '../../coverage/e2e/test',\\"maxWorkers\\": 1,\\"testTimeout\\": 60000,\\"setupFiles\\": [\\"/src/test-setup.ts\\"] + }; + " + `); + + expect(appTree.read("e2e/test/src/test-setup.ts").toString()).toMatchInlineSnapshot(` + "jest.retryTimes(3); + " + `); + }); +}); diff --git a/libs/nx-plugin/src/generators/e2e-project/generator.ts b/libs/nx-plugin/src/generators/e2e-project/generator.ts new file mode 100644 index 0000000000..86c1065f1a --- /dev/null +++ b/libs/nx-plugin/src/generators/e2e-project/generator.ts @@ -0,0 +1,145 @@ +import { + formatFiles, + names, + readProjectConfiguration, + Tree, + updateJson, + updateProjectConfiguration, +} from "@nrwl/devkit"; +import { addPropertyToJestConfig } from "@nrwl/jest/src/utils/config/update-config"; +import { projectGenerator } from "@nrwl/js/src/generators/library/library"; +import { resolve } from "path"; +import { E2eProjectGeneratorSchema } from "./schema"; + +interface NormalizedSchema extends E2eProjectGeneratorSchema { + projectName: string; + projectRoot: string; + projectDirectory: string; +} + +function normalizeOptions(_tree: Tree, options: E2eProjectGeneratorSchema): NormalizedSchema { + const e2eRoot = "e2e"; + const projectDirectory = options.directory ? `${e2eRoot}/${names(options.directory).fileName}` : e2eRoot; + const projectRoot = `${projectDirectory}/${names(options.name).fileName}`; + const projectName = `${e2eRoot}${options.directory ? `-${options.directory}` : ""}-${ + names(options.name).fileName + }`; + + return { + ...options, + projectName, + projectRoot, + projectDirectory, + }; +} + +export default async function (tree: Tree, options: E2eProjectGeneratorSchema) { + const normalizedOptions = normalizeOptions(tree, options); + + await projectGenerator( + tree, + { + name: normalizedOptions.name, + directory: normalizedOptions.projectDirectory, + skipTsConfig: true, + }, + "./", + resolve("node_modules/@nrwl/js/src/generators/library/files") + ); + + tree.delete(`${normalizedOptions.projectRoot}/README.md`); + + tree.children(`${normalizedOptions.projectRoot}/src/lib`).forEach((file) => { + tree.delete(`${normalizedOptions.projectRoot}/src/lib/${file}`); + }); + + addPropertyToJestConfig(tree, `${normalizedOptions.projectRoot}/jest.config.ts`, "maxWorkers", 1, { + valueAsString: false, + }); + addPropertyToJestConfig(tree, `${normalizedOptions.projectRoot}/jest.config.ts`, "testTimeout", 60000, { + valueAsString: false, + }); + addPropertyToJestConfig( + tree, + `${normalizedOptions.projectRoot}/jest.config.ts`, + "setupFiles", + ["/src/test-setup.ts"], + { + valueAsString: false, + } + ); + + const projectConfig = readProjectConfiguration(tree, normalizedOptions.projectName); + + updateProjectConfiguration(tree, normalizedOptions.projectName, { + ...projectConfig, + targets: { + e2e: { + executor: "nx:run-commands", + options: { + commands: [ + { + command: "npm run e2e-start-local-registry", + }, + { + command: "npm run e2e-build-package-publish", + }, + { + command: `nx run-e2e-tests ${normalizedOptions.projectName}`, + }, + ], + parallel: false, + }, + }, + "run-e2e-tests-process": { + executor: "nx:run-commands", + options: { + commands: [ + { + command: `nx run-e2e-tests ${normalizedOptions.projectName}`, + description: + "This additional wrapper target exists so that we can ensure that the e2e tests run in a dedicated process with enough memory", + }, + ], + parallel: false, + }, + }, + "run-e2e-tests": { + executor: "@nrwl/jest:jest", + options: { + jestConfig: `${normalizedOptions.projectRoot}/jest.config.ts`, + passWithNoTests: true, + runInBand: true, + }, + outputs: [`{workspaceRoot}/coverage/${normalizedOptions.projectRoot}`], + }, + lint: projectConfig.targets.lint, + // Don't keep the original unit test target + }, + }); + + tree.write( + `${normalizedOptions.projectRoot}/src/index.ts`, + `// Add e2e tests for ${options.name} in this file +` + ); + + tree.rename( + `${normalizedOptions.projectRoot}/src/index.ts`, + `${normalizedOptions.projectRoot}/src/${options.name}.spec.ts` + ); + + tree.write( + `${normalizedOptions.projectRoot}/src/test-setup.ts`, + `jest.retryTimes(3); +` + ); + + updateJson(tree, `${normalizedOptions.projectRoot}/tsconfig.spec.json`, (json) => { + json.include = json.include ?? []; + json.include.push("src/test-setup.ts"); + return json; + }); + + await formatFiles(tree); +} diff --git a/libs/nx-plugin/src/generators/e2e-project/schema.d.ts b/libs/nx-plugin/src/generators/e2e-project/schema.d.ts new file mode 100644 index 0000000000..e4feac1f28 --- /dev/null +++ b/libs/nx-plugin/src/generators/e2e-project/schema.d.ts @@ -0,0 +1,4 @@ +export interface E2eProjectGeneratorSchema { + name: string; + directory?: string; +} diff --git a/libs/nx-plugin/src/generators/e2e-project/schema.json b/libs/nx-plugin/src/generators/e2e-project/schema.json new file mode 100644 index 0000000000..c42afeac2d --- /dev/null +++ b/libs/nx-plugin/src/generators/e2e-project/schema.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/schema", + "cli": "nx", + "$id": "e2e-project", + "title": "e2e project", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "", + "$default": { + "$source": "argv", + "index": 0 + }, + "x-prompt": "What name would you like to use?" + }, + "directory": { + "type": "string", + "description": "A directory within the e2e directory where the project is placed", + "alias": "d" + } + }, + "required": ["name"] +} diff --git a/libs/nx-plugin/src/index.ts b/libs/nx-plugin/src/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/libs/nx-plugin/tsconfig.json b/libs/nx-plugin/tsconfig.json new file mode 100644 index 0000000000..19b9eece4d --- /dev/null +++ b/libs/nx-plugin/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/libs/nx-plugin/tsconfig.lib.json b/libs/nx-plugin/tsconfig.lib.json new file mode 100644 index 0000000000..7bfc80f73e --- /dev/null +++ b/libs/nx-plugin/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/libs/nx-plugin/tsconfig.spec.json b/libs/nx-plugin/tsconfig.spec.json new file mode 100644 index 0000000000..546f12877f --- /dev/null +++ b/libs/nx-plugin/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] +} diff --git a/nx.json b/nx.json index 493d4997ce..b5c884719e 100644 --- a/nx.json +++ b/nx.json @@ -1,11 +1,38 @@ { "$schema": "./node_modules/nx/schemas/nx-schema.json", + "npmScope": "lerna", "tasksRunnerOptions": { "default": { "runner": "@nrwl/nx-cloud", "options": { - "accessToken": "MGQ4ZjkyMWYtYTVhNi00ZWQ4LWE0OTctNTkxM2U0ZDUzYWQ1fHJlYWQ=" + "accessToken": "MGQ4ZjkyMWYtYTVhNi00ZWQ4LWE0OTctNTkxM2U0ZDUzYWQ1fHJlYWQ=", + "cacheableOperations": ["build", "lint", "e2e", "test", "run-e2e-tests-process", "run-e2e-tests"] } } + }, + "namedInputs": { + "default": ["{projectRoot}/**/*", "sharedGlobals"], + "sharedGlobals": [], + "production": [ + "default", + "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)", + "!{projectRoot}/tsconfig.spec.json", + "!{projectRoot}/jest.config.[jt]s" + ] + }, + "workspaceLayout": { + "libsDir": "libs", + "appsDir": "packages" + }, + "targetDefaults": { + "test": { + "inputs": ["default", "^production", "{workspaceRoot}/jest.preset.js"] + }, + "build": { + "inputs": ["production", "^production"] + }, + "run-e2e-tests": { + "inputs": ["default", "^production", "{workspaceRoot}/jest.preset.js"] + } } } diff --git a/package-lock.json b/package-lock.json index 2ed8efcdea..53ff882b3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "@npmcli/run-script": "^4.1.7", "@octokit/plugin-enterprise-rest": "^6.0.1", "@octokit/rest": "^19.0.3", + "@swc/helpers": "~0.4.11", "byte-size": "^7.0.0", "chalk": "^4.1.0", "clone-deep": "^4.0.1", @@ -72,6 +73,7 @@ "ssri": "^9.0.1", "strong-log-transformer": "^2.1.0", "tar": "^6.1.0", + "tslib": "^2.3.0", "upath": "^2.0.1", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "^4.0.0", @@ -81,16 +83,23 @@ "yargs": "^16.2.0" }, "devDependencies": { - "@actions/core": "^1.8.2", - "@actions/github": "^5.0.3", "@lerna-test/helpers": "file:helpers", - "@nrwl/devkit": "14.8.6", - "@nrwl/nx-cloud": "14.7.0", + "@nrwl/devkit": "15.2.1", + "@nrwl/eslint-plugin-nx": "15.2.1", + "@nrwl/jest": "15.2.1", + "@nrwl/js": "15.2.1", + "@nrwl/nx-cloud": "15.0.2", + "@nrwl/nx-plugin": "15.2.1", + "@swc-node/register": "^1.4.2", + "@swc/cli": "~0.1.55", + "@swc/core": "^1.2.173", "@types/fs-extra": "^9.0.13", "@types/is-ci": "^2.0.0", - "@types/jest": "^28.1.4", + "@types/jest": "28.1.1", "@types/js-yaml": "^4.0.5", + "@types/node": "16.11.7", "@types/tmp": "^0.2.3", + "@typescript-eslint/eslint-plugin": "^5.28.0", "@typescript-eslint/parser": "^5.28.0", "all-contributors-cli": "^6.20.0", "debug": "^4.3.1", @@ -104,23 +113,25 @@ "expect": "^26.6.2", "file-url": "^3.0.0", "find-up": "^5.0.0", - "jest": "^28.1.2", + "jest": "28.1.1", "jest-diff": "^28.1.1", + "jest-environment-jsdom": "28.1.1", "jest-matcher-utils": "^28.1.1", "js-yaml": "^4.1.0", + "jsonc-eslint-parser": "^2.1.0", "node-jq": "^2.3.3", "normalize-newline": "^3.0.0", "normalize-path": "^3.0.0", - "nx": "14.8.6", + "nx": "15.2.1", "path-key": "^3.1.1", "prettier": "^2.2.1", "tacks": "1.2.6", "tempy": "^1.0.0", "tmp": "^0.2.1", "touch": "^3.1.0", - "ts-jest": "^28.0.5", - "ts-node": "^10.8.1", - "typescript": "^4.7.3", + "ts-jest": "28.0.5", + "ts-node": "10.9.1", + "typescript": "~4.8.2", "verdaccio": "^5.13.3" }, "engines": { @@ -129,7 +140,7 @@ }, "commands/add": { "name": "@lerna/add", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/bootstrap": "file:../bootstrap", @@ -149,7 +160,7 @@ }, "commands/bootstrap": { "name": "@lerna/bootstrap", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/command": "file:../../core/command", @@ -181,7 +192,7 @@ }, "commands/changed": { "name": "@lerna/changed", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/collect-updates": "file:../../utils/collect-updates", @@ -195,7 +206,7 @@ }, "commands/clean": { "name": "@lerna/clean", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/command": "file:../../core/command", @@ -213,7 +224,7 @@ }, "commands/create": { "name": "@lerna/create", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/child-process": "file:../../core/child-process", @@ -239,7 +250,7 @@ }, "commands/diff": { "name": "@lerna/diff", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/child-process": "file:../../core/child-process", @@ -253,7 +264,7 @@ }, "commands/exec": { "name": "@lerna/exec", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/child-process": "file:../../core/child-process", @@ -270,7 +281,7 @@ }, "commands/import": { "name": "@lerna/import", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/child-process": "file:../../core/child-process", @@ -288,7 +299,7 @@ }, "commands/info": { "name": "@lerna/info", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/command": "file:../../core/command", @@ -301,7 +312,7 @@ }, "commands/init": { "name": "@lerna/init", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/child-process": "file:../../core/child-process", @@ -317,7 +328,7 @@ }, "commands/link": { "name": "@lerna/link", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/command": "file:../../core/command", @@ -333,7 +344,7 @@ }, "commands/list": { "name": "@lerna/list", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/command": "file:../../core/command", @@ -347,7 +358,7 @@ }, "commands/publish": { "name": "@lerna/publish", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/check-working-tree": "file:../../utils/check-working-tree", @@ -385,7 +396,7 @@ }, "commands/run": { "name": "@lerna/run", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/command": "file:../../core/command", @@ -405,7 +416,7 @@ }, "commands/version": { "name": "@lerna/version", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/check-working-tree": "file:../../utils/check-working-tree", @@ -442,7 +453,7 @@ }, "core/child-process": { "name": "@lerna/child-process", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "chalk": "^4.1.0", @@ -455,7 +466,7 @@ }, "core/cli": { "name": "@lerna/cli", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/global-options": "file:../global-options", @@ -469,7 +480,7 @@ }, "core/command": { "name": "@lerna/command", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/child-process": "file:../child-process", @@ -489,7 +500,7 @@ }, "core/conventional-commits": { "name": "@lerna/conventional-commits", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/validation-error": "file:../validation-error", @@ -509,7 +520,7 @@ }, "core/filter-options": { "name": "@lerna/filter-options", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/collect-updates": "file:../../utils/collect-updates", @@ -523,14 +534,14 @@ }, "core/global-options": { "name": "@lerna/global-options", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "engines": { "node": "^14.15.0 || >=16.0.0" } }, "core/lerna": { - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/add": "file:../../commands/add", @@ -566,7 +577,7 @@ }, "core/otplease": { "name": "@lerna/otplease", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/prompt": "file:../prompt" @@ -577,7 +588,7 @@ }, "core/package": { "name": "@lerna/package", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "load-json-file": "^6.2.0", @@ -590,7 +601,7 @@ }, "core/package-graph": { "name": "@lerna/package-graph", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/prerelease-id-from-version": "file:../../utils/prerelease-id-from-version", @@ -605,7 +616,7 @@ }, "core/project": { "name": "@lerna/project", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/package": "file:../package", @@ -628,7 +639,7 @@ }, "core/prompt": { "name": "@lerna/prompt", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "inquirer": "^8.2.4", @@ -640,7 +651,7 @@ }, "core/validation-error": { "name": "@lerna/validation-error", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "npmlog": "^6.0.2" @@ -650,7 +661,8 @@ } }, "e2e": { - "name": "@lerna/e2e" + "name": "@lerna/e2e", + "extraneous": true }, "helpers": { "name": "@lerna-test/helpers", @@ -663,50 +675,6 @@ "@lerna/temp-write": "file:../utils/temp-write" } }, - "node_modules/@actions/core": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.9.1.tgz", - "integrity": "sha512-5ad+U2YGrmmiw6du20AQW5XuWo7UKN2052FjSV7MX+Wfjf8sCqcsZe62NfgHys4QI4/Y+vQvLKYL8jWtA1ZBTA==", - "dev": true, - "dependencies": { - "@actions/http-client": "^2.0.1", - "uuid": "^8.3.2" - } - }, - "node_modules/@actions/github": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@actions/github/-/github-5.0.3.tgz", - "integrity": "sha512-myjA/pdLQfhUGLtRZC/J4L1RXOG4o6aYdiEq+zr5wVVKljzbFld+xv10k1FX6IkIJtNxbAq44BdwSNpQ015P0A==", - "dev": true, - "dependencies": { - "@actions/http-client": "^2.0.1", - "@octokit/core": "^3.6.0", - "@octokit/plugin-paginate-rest": "^2.17.0", - "@octokit/plugin-rest-endpoint-methods": "^5.13.0" - } - }, - "node_modules/@actions/github/node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", - "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.34.0", - "deprecation": "^2.3.1" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@actions/http-client": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz", - "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==", - "dev": true, - "dependencies": { - "tunnel": "^0.0.6" - } - }, "node_modules/@babel/code-frame": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", @@ -2169,12 +2137,12 @@ } }, "node_modules/@jest/schemas": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", - "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", "dev": true, "dependencies": { - "@sinclair/typebox": "^0.23.3" + "@sinclair/typebox": "^0.24.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" @@ -2436,10 +2404,6 @@ "resolved": "commands/diff", "link": true }, - "node_modules/@lerna/e2e": { - "resolved": "e2e", - "link": true - }, "node_modules/@lerna/exec": { "resolved": "commands/exec", "link": true @@ -2985,230 +2949,504 @@ } }, "node_modules/@nrwl/cli": { - "version": "14.8.6", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.8.6.tgz", - "integrity": "sha512-R4udxekMd4jhoRPEksJu+224DocOIrAqenFo0D2R36epE5FaCnZQX7xg+b3TjRbdS10e426i4D9LuXdQmP5jJg==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-15.2.1.tgz", + "integrity": "sha512-ufBJ5o3WCixdp6/TPkpn4rH3QBFJcqCMG1d14A/SvAkEnXu3vWlj3E+4GXf3CK+sGNjjf3ZGoNm7OFV+/Ml4GA==", "dependencies": { - "nx": "14.8.6" + "nx": "15.2.1" } }, "node_modules/@nrwl/devkit": { - "version": "14.8.6", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-14.8.6.tgz", - "integrity": "sha512-+3KqohOKeUuyS176jrwY0yeB3E2IFQ3jMkS0KizzsHGsZWdZbQ2WQ46hZ0/bvRh9Efl8CAg6n4fUWR0BXUePMA==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.2.1.tgz", + "integrity": "sha512-si6DK0sjtr6Ln+7hh9QD50KqxnOxuP20xJ0fxMVafT/Lz/qtxuCPw9lwJWVagMHWw3pQAtN6lbkWiLOwj8+YPA==", "dependencies": { "@phenomnomnominal/tsquery": "4.1.1", "ejs": "^3.1.7", "ignore": "^5.0.4", + "semver": "7.3.4", "tslib": "^2.3.0" }, "peerDependencies": { - "nx": ">= 13.10 <= 15" + "nx": ">= 14 <= 16" } }, - "node_modules/@nrwl/devkit/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "node_modules/@nrwl/nx-cloud": { - "version": "14.7.0", - "resolved": "https://registry.npmjs.org/@nrwl/nx-cloud/-/nx-cloud-14.7.0.tgz", - "integrity": "sha512-sEGK5Ire5DC2liIsT89qR6SzZa46uinmWEAMz8ocMuu7nIMnwV9m15qajxhmYKasYsq9vTeT+x7BlZ4fnxPrNg==", + "node_modules/@nrwl/eslint-plugin-nx": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-15.2.1.tgz", + "integrity": "sha512-l3CQzhB+cDwZKMdWmaAexmgfTbKjVL6dIm4ZGx/iSMisaI5tCBcPpxiag/bocaMExkrPGh0e5xD78hD9EO+A4A==", "dev": true, "dependencies": { - "axios": "^0.21.1", + "@nrwl/devkit": "15.2.1", + "@nrwl/workspace": "15.2.1", + "@typescript-eslint/utils": "^5.36.1", "chalk": "4.1.0", - "dotenv": "~10.0.0", - "fs-extra": "^10.1.0", - "node-machine-id": "^1.1.12", - "strip-json-comments": "^3.1.1", - "tar": "6.1.11", - "yargs-parser": ">=21.0.1" + "confusing-browser-globals": "^1.0.9", + "semver": "7.3.4" }, - "bin": { - "nx-cloud": "bin/nx-cloud.js" + "peerDependencies": { + "@typescript-eslint/parser": "^5.29.0", + "eslint-config-prettier": "^8.1.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/@nrwl/nx-cloud/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/@nrwl/jest": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/jest/-/jest-15.2.1.tgz", + "integrity": "sha512-/lyqCeNmYmSoHDDnADuuTuooljnfxlJ8uviXUPodLGy3LaQBbxNy1vlxcg7mZqEOe1smH91TFxKq/7xDIZU9cA==", "dev": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" + "@jest/reporters": "28.1.1", + "@jest/test-result": "28.1.1", + "@nrwl/devkit": "15.2.1", + "@phenomnomnominal/tsquery": "4.1.1", + "chalk": "4.1.0", + "dotenv": "~10.0.0", + "identity-obj-proxy": "3.0.0", + "jest-config": "28.1.1", + "jest-resolve": "28.1.1", + "jest-util": "28.1.1", + "resolve.exports": "1.1.0", + "tslib": "^2.3.0" } }, - "node_modules/@nrwl/nx-cloud/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "node_modules/@nrwl/jest/node_modules/@jest/reporters": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.1.tgz", + "integrity": "sha512-597Zj4D4d88sZrzM4atEGLuO7SdA/YrOv9SRXHXRNC+/FwPCWxZhBAEzhXoiJzfRwn8zes/EjS8Lo6DouGN5Gg==", "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^28.1.1", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.1", + "@jest/types": "^28.1.1", + "@jridgewell/trace-mapping": "^0.3.7", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1", + "jest-worker": "^28.1.1", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^9.0.0" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@nrwl/tao": { - "version": "14.8.6", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.8.6.tgz", - "integrity": "sha512-CByqrsfSJeonOd7TLAHP8bRYNWgDksxA7j+yncSzgQnFLEbZdJGG/AqqIovx8g6g2v0JS+nRgGC+w5UPf04UrQ==", + "node_modules/@nrwl/jest/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, "dependencies": { - "nx": "14.8.6" + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, - "bin": { - "tao": "index.js" + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@octokit/auth-token": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz", - "integrity": "sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==", + "node_modules/@nrwl/jest/node_modules/@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "dev": true, "dependencies": { - "@octokit/types": "^6.0.3" + "@types/yargs-parser": "*" } }, - "node_modules/@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", - "dependencies": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" + "node_modules/@nrwl/jest/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@octokit/endpoint": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.11.tgz", - "integrity": "sha512-fUIPpx+pZyoLW4GCs3yMnlj2LfoXTWDUVPTC4V3MUEKZm48W+XYpeWSZCv+vYF1ZABUm2CqnDVf1sFtIYrj7KQ==", + "node_modules/@nrwl/jest/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, "dependencies": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@octokit/graphql": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.6.0.tgz", - "integrity": "sha512-CJ6n7izLFXLvPZaWzCQDjU/RP+vHiZmWdOunaCS87v+2jxMsW9FB5ktfIxybRBxZjxuJGRnxk7xJecWTVxFUYQ==", + "node_modules/@nrwl/jest/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, "dependencies": { - "@octokit/request": "^5.3.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@octokit/openapi-types": { - "version": "12.8.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.8.0.tgz", - "integrity": "sha512-ydcKLs2KKcxlhpdWLzJxEBDEk/U5MUeqtqkXlrtAUXXFPs6vLl1PEGghFC/BbpleosB7iXs0Z4P2DGe7ZT5ZNg==" + "node_modules/@nrwl/jest/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true }, - "node_modules/@octokit/plugin-enterprise-rest": { + "node_modules/@nrwl/jest/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", - "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "@octokit/types": "^6.34.0" + "ansi-regex": "^5.0.1" }, - "peerDependencies": { - "@octokit/core": ">=2" + "engines": { + "node": ">=8" } }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "peerDependencies": { - "@octokit/core": ">=3" + "node_modules/@nrwl/js": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-15.2.1.tgz", + "integrity": "sha512-d/pItGaHFFYSrHjMXndzuSJWRPLNLCGHQ6E54NHtcIvVf0t+ZJ3Bz7yb7ybKYV+PhUVd6gfg7LByjzQNqHSlLg==", + "dev": true, + "dependencies": { + "@nrwl/devkit": "15.2.1", + "@nrwl/jest": "15.2.1", + "@nrwl/linter": "15.2.1", + "@nrwl/workspace": "15.2.1", + "@parcel/watcher": "2.0.4", + "chalk": "4.1.0", + "fast-glob": "3.2.7", + "fs-extra": "^10.1.0", + "ignore": "^5.0.4", + "js-tokens": "^4.0.0", + "minimatch": "3.0.5", + "source-map-support": "0.5.19", + "tree-kill": "1.2.2" } }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.0.0.tgz", - "integrity": "sha512-9LkEvZB3WDuayEI381O5A/eM3QQioBZrwymQp5CUCNz9UMP/yZAIqBjcPhVJJFA3IRkKO1EARo98OePt9i0rkQ==", + "node_modules/@nrwl/js/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, "dependencies": { - "@octokit/types": "^6.39.0", - "deprecation": "^2.3.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=3" + "node": ">=12" } }, - "node_modules/@octokit/request": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "node_modules/@nrwl/linter": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/linter/-/linter-15.2.1.tgz", + "integrity": "sha512-b1+xoi6MhLdPD44rplmNbon5OyCuMpKzst50S4Xiyxdhf0fzu/w/cQDBv7zdRshE5+UMQAlDIVXF0zgEnBTQAQ==", + "dev": true, "dependencies": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" + "@nrwl/devkit": "15.2.1", + "@nrwl/jest": "15.2.1", + "@phenomnomnominal/tsquery": "4.1.1", + "nx": "15.2.1", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "node_modules/@nrwl/nx-cloud": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@nrwl/nx-cloud/-/nx-cloud-15.0.2.tgz", + "integrity": "sha512-DaTASuXmGyQHMxJuK6y3f7fs+Q0qQCfYDIDVGK9muNwN/QItLeWdRNltLQxbrBeS112kQTu2FPsr0DmRD60+0A==", + "dev": true, "dependencies": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" + "axios": "^0.21.2", + "chalk": "4.1.0", + "dotenv": "~10.0.0", + "fs-extra": "^10.1.0", + "node-machine-id": "^1.1.12", + "strip-json-comments": "^3.1.1", + "tar": "6.1.11", + "yargs-parser": ">=21.0.1" + }, + "bin": { + "nx-cloud": "bin/nx-cloud.js" } }, - "node_modules/@octokit/rest": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.3.tgz", - "integrity": "sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ==", + "node_modules/@nrwl/nx-cloud/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, "dependencies": { - "@octokit/core": "^4.0.0", - "@octokit/plugin-paginate-rest": "^3.0.0", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^6.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 14" + "node": ">=12" } }, - "node_modules/@octokit/rest/node_modules/@octokit/auth-token": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz", - "integrity": "sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==", + "node_modules/@nrwl/nx-cloud/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@nrwl/nx-plugin": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/nx-plugin/-/nx-plugin-15.2.1.tgz", + "integrity": "sha512-el4NGsEBRbGY50Oy1Nyg2HOXmPz4oudkf3uMmis3ewfK39l0RKJxllD/XSa+xmxDokQ4TgKmjdVqNg/iGM9RCQ==", + "dev": true, "dependencies": { - "@octokit/types": "^6.0.3" + "@nrwl/devkit": "15.2.1", + "@nrwl/jest": "15.2.1", + "@nrwl/js": "15.2.1", + "@nrwl/linter": "15.2.1", + "dotenv": "~10.0.0", + "fs-extra": "^10.1.0", + "tslib": "^2.3.0" + } + }, + "node_modules/@nrwl/nx-plugin/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@nrwl/tao": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-15.2.1.tgz", + "integrity": "sha512-6ApglWKORasLhtjlJmqo2co/UexSSiD7mWVxT2886oKG2Y/T/5RnPFNhJgGnKJIURCNMxiSKhq7GAA+CE9zRZg==", + "dependencies": { + "nx": "15.2.1" + }, + "bin": { + "tao": "index.js" + } + }, + "node_modules/@nrwl/workspace": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-15.2.1.tgz", + "integrity": "sha512-nqF1gP2KuVmQCjgyrX6TECAGFldJ55KEQs6WJIBsjYvmrWvAv341VVb565IEWpPGglb2/8NhJLBMdQ0ZpLG+tg==", + "dev": true, + "dependencies": { + "@nrwl/devkit": "15.2.1", + "@nrwl/jest": "15.2.1", + "@nrwl/linter": "15.2.1", + "@parcel/watcher": "2.0.4", + "chalk": "4.1.0", + "chokidar": "^3.5.1", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "dotenv": "~10.0.0", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^10.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "minimatch": "3.0.5", + "npm-run-path": "^4.0.1", + "nx": "15.2.1", + "open": "^8.4.0", + "rxjs": "^6.5.4", + "semver": "7.3.4", + "tmp": "~0.2.1", + "tslib": "^2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "peerDependencies": { + "prettier": "^2.6.2" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } + } + }, + "node_modules/@nrwl/workspace/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@nrwl/workspace/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@nrwl/workspace/node_modules/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@nrwl/workspace/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nrwl/workspace/node_modules/yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@nrwl/workspace/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@octokit/auth-token": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz", + "integrity": "sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q==", + "dependencies": { + "@octokit/types": "^8.0.0" }, "engines": { "node": ">= 14" } }, - "node_modules/@octokit/rest/node_modules/@octokit/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.4.tgz", - "integrity": "sha512-sUpR/hc4Gc7K34o60bWC7WUH6Q7T6ftZ2dUmepSyJr9PRF76/qqkWjE2SOEzCqLA5W83SaISymwKtxks+96hPQ==", + "node_modules/@octokit/auth-token/node_modules/@octokit/openapi-types": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", + "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" + }, + "node_modules/@octokit/auth-token/node_modules/@octokit/types": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz", + "integrity": "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==", + "dependencies": { + "@octokit/openapi-types": "^14.0.0" + } + }, + "node_modules/@octokit/core": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.1.0.tgz", + "integrity": "sha512-Czz/59VefU+kKDy+ZfDwtOIYIkFjExOKf+HA92aiTZJ6EfWpFzYQWw0l54ji8bVmyhc+mGaLUbSUmXazG7z5OQ==", "dependencies": { "@octokit/auth-token": "^3.0.0", "@octokit/graphql": "^5.0.0", "@octokit/request": "^6.0.0", "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.0.3", + "@octokit/types": "^8.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" }, @@ -3216,12 +3454,25 @@ "node": ">= 14" } }, - "node_modules/@octokit/rest/node_modules/@octokit/endpoint": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz", - "integrity": "sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==", + "node_modules/@octokit/core/node_modules/@octokit/openapi-types": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", + "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" + }, + "node_modules/@octokit/core/node_modules/@octokit/types": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz", + "integrity": "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==", + "dependencies": { + "@octokit/openapi-types": "^14.0.0" + } + }, + "node_modules/@octokit/endpoint": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.3.tgz", + "integrity": "sha512-57gRlb28bwTsdNXq+O3JTQ7ERmBTuik9+LelgcLIVfYwf235VHbN9QNo4kXExtp/h8T423cR5iJThKtFYxC7Lw==", "dependencies": { - "@octokit/types": "^6.0.3", + "@octokit/types": "^8.0.0", "is-plain-object": "^5.0.0", "universal-user-agent": "^6.0.0" }, @@ -3229,41 +3480,86 @@ "node": ">= 14" } }, - "node_modules/@octokit/rest/node_modules/@octokit/graphql": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.0.tgz", - "integrity": "sha512-1ZZ8tX4lUEcLPvHagfIVu5S2xpHYXAmgN0+95eAOPoaVPzCfUXJtA5vASafcpWcO86ze0Pzn30TAx72aB2aguQ==", + "node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", + "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" + }, + "node_modules/@octokit/endpoint/node_modules/@octokit/types": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz", + "integrity": "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==", + "dependencies": { + "@octokit/openapi-types": "^14.0.0" + } + }, + "node_modules/@octokit/graphql": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.4.tgz", + "integrity": "sha512-amO1M5QUQgYQo09aStR/XO7KAl13xpigcy/kI8/N1PnZYSS69fgte+xA4+c2DISKqUZfsh0wwjc2FaCt99L41A==", "dependencies": { "@octokit/request": "^6.0.0", - "@octokit/types": "^6.0.3", + "@octokit/types": "^8.0.0", "universal-user-agent": "^6.0.0" }, "engines": { "node": ">= 14" } }, - "node_modules/@octokit/rest/node_modules/@octokit/plugin-paginate-rest": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.0.0.tgz", - "integrity": "sha512-fvw0Q5IXnn60D32sKeLIxgXCEZ7BTSAjJd8cFAE6QU5qUp0xo7LjFUjjX1J5D7HgN355CN4EXE4+Q1/96JaNUA==", + "node_modules/@octokit/graphql/node_modules/@octokit/openapi-types": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", + "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" + }, + "node_modules/@octokit/graphql/node_modules/@octokit/types": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz", + "integrity": "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==", "dependencies": { - "@octokit/types": "^6.39.0" + "@octokit/openapi-types": "^14.0.0" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "12.8.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.8.0.tgz", + "integrity": "sha512-ydcKLs2KKcxlhpdWLzJxEBDEk/U5MUeqtqkXlrtAUXXFPs6vLl1PEGghFC/BbpleosB7iXs0Z4P2DGe7ZT5ZNg==" + }, + "node_modules/@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==" + }, + "node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.0.0.tgz", + "integrity": "sha512-9LkEvZB3WDuayEI381O5A/eM3QQioBZrwymQp5CUCNz9UMP/yZAIqBjcPhVJJFA3IRkKO1EARo98OePt9i0rkQ==", + "dependencies": { + "@octokit/types": "^6.39.0", + "deprecation": "^2.3.1" }, "engines": { "node": ">= 14" }, "peerDependencies": { - "@octokit/core": ">=4" + "@octokit/core": ">=3" } }, - "node_modules/@octokit/rest/node_modules/@octokit/request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.0.2.tgz", - "integrity": "sha512-WPMcm8nUET2v6P5AbTIhNzEorMLFPbFnzfP/VMAaRFwNzaqHmVvS+YLvqtWyKq0vnZ6a9ImQuCHNb3L4oNovRw==", + "node_modules/@octokit/request": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.2.tgz", + "integrity": "sha512-6VDqgj0HMc2FUX2awIs+sM6OwLgwHvAi4KCK3mT2H2IKRt6oH9d0fej5LluF5mck1lRR/rFWN0YIDSYXYSylbw==", "dependencies": { "@octokit/endpoint": "^7.0.0", "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.16.1", + "@octokit/types": "^8.0.0", "is-plain-object": "^5.0.0", "node-fetch": "^2.6.7", "universal-user-agent": "^6.0.0" @@ -3272,12 +3568,12 @@ "node": ">= 14" } }, - "node_modules/@octokit/rest/node_modules/@octokit/request-error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.0.tgz", - "integrity": "sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w==", + "node_modules/@octokit/request-error": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.2.tgz", + "integrity": "sha512-WMNOFYrSaX8zXWoJg9u/pKgWPo94JXilMLb2VManNOby9EZxrQaBe/QSC4a1TzpAlpxofg2X/jMnCyZgL6y7eg==", "dependencies": { - "@octokit/types": "^6.0.3", + "@octokit/types": "^8.0.0", "deprecation": "^2.0.0", "once": "^1.4.0" }, @@ -3285,6 +3581,60 @@ "node": ">= 14" } }, + "node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", + "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" + }, + "node_modules/@octokit/request-error/node_modules/@octokit/types": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz", + "integrity": "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==", + "dependencies": { + "@octokit/openapi-types": "^14.0.0" + } + }, + "node_modules/@octokit/request/node_modules/@octokit/openapi-types": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", + "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" + }, + "node_modules/@octokit/request/node_modules/@octokit/types": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz", + "integrity": "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==", + "dependencies": { + "@octokit/openapi-types": "^14.0.0" + } + }, + "node_modules/@octokit/rest": { + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.3.tgz", + "integrity": "sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ==", + "dependencies": { + "@octokit/core": "^4.0.0", + "@octokit/plugin-paginate-rest": "^3.0.0", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/rest/node_modules/@octokit/plugin-paginate-rest": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.0.0.tgz", + "integrity": "sha512-fvw0Q5IXnn60D32sKeLIxgXCEZ7BTSAjJd8cFAE6QU5qUp0xo7LjFUjjX1J5D7HgN355CN4EXE4+Q1/96JaNUA==", + "dependencies": { + "@octokit/types": "^6.39.0" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=4" + } + }, "node_modules/@octokit/types": { "version": "6.39.0", "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.39.0.tgz", @@ -3343,9 +3693,9 @@ "dev": true }, "node_modules/@sinclair/typebox": { - "version": "0.23.5", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", - "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==", + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", "dev": true }, "node_modules/@sindresorhus/is": { @@ -3375,6 +3725,307 @@ "@sinonjs/commons": "^1.7.0" } }, + "node_modules/@swc-node/core": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@swc-node/core/-/core-1.9.1.tgz", + "integrity": "sha512-Mh4T/PmQOpPtqw1BNvU38uWzsXbd5RJji17YBXnj7JDDE5KlTR9sSo2RKxWKDVtHbdcD1S+CtyZXA93aEWlfGQ==", + "devOptional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@swc/core": ">= 1.3" + } + }, + "node_modules/@swc-node/register": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@swc-node/register/-/register-1.5.4.tgz", + "integrity": "sha512-cM5/A63bO6qLUFC4gcBnOlQO5yd8ObSdFUIp7sXf11Oq5mPVAnJy2DqjbWMUsqUaHuNk+lOIt76ie4DEseUIyA==", + "devOptional": true, + "dependencies": { + "@swc-node/core": "^1.9.1", + "@swc-node/sourcemap-support": "^0.2.2", + "colorette": "^2.0.19", + "debug": "^4.3.4", + "pirates": "^4.0.5", + "tslib": "^2.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@swc/core": ">= 1.3", + "typescript": ">= 4.3" + } + }, + "node_modules/@swc-node/sourcemap-support": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@swc-node/sourcemap-support/-/sourcemap-support-0.2.2.tgz", + "integrity": "sha512-PA4p7nC5LwPdEVcQXFxMTpfvizYPeMoB55nIIx+yC3FiLnyPgC2hcpUitPy5h8RRGdCZ/Mvb2ryEcVYS8nI6YA==", + "devOptional": true, + "dependencies": { + "source-map-support": "^0.5.21", + "tslib": "^2.4.0" + } + }, + "node_modules/@swc-node/sourcemap-support/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "devOptional": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@swc/cli": { + "version": "0.1.57", + "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.57.tgz", + "integrity": "sha512-HxM8TqYHhAg+zp7+RdTU69bnkl4MWdt1ygyp6BDIPjTiaJVH6Dizn2ezbgDS8mnFZI1FyhKvxU/bbaUs8XhzQg==", + "dev": true, + "dependencies": { + "commander": "^7.1.0", + "fast-glob": "^3.2.5", + "slash": "3.0.0", + "source-map": "^0.7.3" + }, + "bin": { + "spack": "bin/spack.js", + "swc": "bin/swc.js" + }, + "engines": { + "node": ">= 12.13" + }, + "peerDependencies": { + "@swc/core": "^1.2.66", + "chokidar": "^3.5.1" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@swc/cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@swc/cli/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@swc/core": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.14.tgz", + "integrity": "sha512-LpTTrXOGS7vnbR/rHrAux7GykUWbyVmI5NbICl9iF9yeqFdGm6JjaGBhbanmG8zrQL5aFx2kMxxb92V9D1KUiw==", + "devOptional": true, + "hasInstallScript": true, + "bin": { + "swcx": "run_swcx.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.3.14", + "@swc/core-darwin-x64": "1.3.14", + "@swc/core-linux-arm-gnueabihf": "1.3.14", + "@swc/core-linux-arm64-gnu": "1.3.14", + "@swc/core-linux-arm64-musl": "1.3.14", + "@swc/core-linux-x64-gnu": "1.3.14", + "@swc/core-linux-x64-musl": "1.3.14", + "@swc/core-win32-arm64-msvc": "1.3.14", + "@swc/core-win32-ia32-msvc": "1.3.14", + "@swc/core-win32-x64-msvc": "1.3.14" + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.14.tgz", + "integrity": "sha512-QFuUq3341uOCrJMIWGuo+CmRC5qZoM2lUo7o2lmv1FO1Dh9njTG85pLD83vz6y4j/F034DBGzvRgSti/Bsoccw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.14.tgz", + "integrity": "sha512-fpAjbjXimJBmxCumRB8zjEtPc0lGUi9Uvu92XH6ww6AyXvg7KQmua5P2R9tnzAm6NwTCXKkgS86cgKysAbbObw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.14.tgz", + "integrity": "sha512-3XSFlgIyDPS+x2c0IFr0AGj4NUbrWGKbkkUCpmAURII0n3YoDsYw8Ux73I8MkWxTTwDGkou8qQOXyA28kAUM4w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.14.tgz", + "integrity": "sha512-r3fToDRYX76NEptAjvDg5aGrbitOgqooV37RpSTIGYd/CSNuin4cpCNFdca/Vh5lnNfal7mqdGDbG7gMruARtw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.14.tgz", + "integrity": "sha512-IivEUC+3HNSsQNCfaCDzev2CpsvWpgFReitCmj0PKIdXFRsTi78jtJiraLWnYy956j4wwZbKN0OFGkS2ekKAVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.14.tgz", + "integrity": "sha512-HtwwA1Z0tE2z9fgaR5ehgY5ULbnVLHj3tayyWhIElF4EWsi6aQfCyn/oCZAcjoPKfEnJiSNBYt5gMmfK8l4mJA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.14.tgz", + "integrity": "sha512-RPXilkTD8IVgpou4TNuqZJOB7kMrVJ7sm7GgHF4v1eV3xdIyvy4w5FWjXZRdwMW6iunLgQEckuOmVx0I4mrdNg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.14.tgz", + "integrity": "sha512-H8Ka/ahJRs84hQCHC5ndORujbLBmi1mv+Z/m4CXpOaEX7TmeAo8nA17rrRckNvVkud9fghsKQGjkBQvJ0v7mRw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.14.tgz", + "integrity": "sha512-H3ZmDXrVxrqBzzCFodwYfcXfTHE0xGNLJlLGzJ4haV6RBM3ZYIvRzDtPivDzic/VQncmPj1WpLoEDfx/7KNC8Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.14.tgz", + "integrity": "sha512-/D1lhWF/DQi2M7b6jWL35NmTY0mRJ5mwTXdmjqNNWOZ8h8TXQo1A3/FDFnfIIcRUeSNdF7IeB3xInT3BI34E1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/helpers": { + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.12.tgz", + "integrity": "sha512-R6RmwS9Dld5lNvwKlPn62+piU+WDG1sMfsnfJioXCciyko/gZ0DQ4Mqglhq1iGU1nQ/RcGkAwfMH+elMSkJH3Q==", + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -3510,13 +4161,13 @@ } }, "node_modules/@types/jest": { - "version": "28.1.4", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.4.tgz", - "integrity": "sha512-telv6G5N7zRJiLcI3Rs3o+ipZ28EnE+7EvF0pSrt2pZOMnAVI/f+6/LucDxOvcBcTeTL3JMF744BbVQAVBUQRA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.1.tgz", + "integrity": "sha512-C2p7yqleUKtCkVjlOur9BWVA4HgUQmEj/HWCt5WzZ5mLXrWnyIfl0wGuArc+kBXsy0ZZfLp+7dywB4HtSVYGVA==", "dev": true, "dependencies": { - "jest-matcher-utils": "^28.0.0", - "pretty-format": "^28.0.0" + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" } }, "node_modules/@types/jest/node_modules/ansi-styles": { @@ -3531,33 +4182,85 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/@types/jest/node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/@types/jest/node_modules/pretty-format": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", - "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "dependencies": { - "@jest/schemas": "^28.0.2", "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/@types/jest/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, "node_modules/@types/js-yaml": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", "dev": true }, + "node_modules/@types/jsdom": { + "version": "16.2.15", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.15.tgz", + "integrity": "sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/parse5": "^6.0.3", + "@types/tough-cookie": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -3580,9 +4283,9 @@ "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==" }, "node_modules/@types/node": { - "version": "14.14.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.25.tgz", - "integrity": "sha512-EPpXLOVqDvisVxtlbvzfyqSsFeQxltFbluZNRndIb8tr9KiBnYNLzrc1N3pyKUCww2RNrfHDViqDWWE1LCJQtQ==", + "version": "16.11.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", + "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==", "dev": true }, "node_modules/@types/normalize-package-data": { @@ -3595,12 +4298,24 @@ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, + "node_modules/@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true + }, "node_modules/@types/prettier": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.0.tgz", "integrity": "sha512-O3SQC6+6AySHwrspYn2UvC6tjo6jCTMMmylxZUFhE1CulVu5l3AxU6ca9lrJDTQDVllF62LIxVSx5fuYL6LiZg==", "dev": true }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "node_modules/@types/stack-utils": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", @@ -3613,6 +4328,12 @@ "integrity": "sha512-dDZH/tXzwjutnuk4UacGgFRwV+JSLaXL1ikvidfJprkb7L9Nx1njcRHHmi3Dsvt7pgqqTEeucQuOrWHPFgzVHA==", "dev": true }, + "node_modules/@types/tough-cookie": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "dev": true + }, "node_modules/@types/yargs": { "version": "15.0.13", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", @@ -3628,15 +4349,63 @@ "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", "dev": true }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.42.1.tgz", + "integrity": "sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/type-utils": "5.42.1", + "@typescript-eslint/utils": "5.42.1", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/parser": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.28.0.tgz", - "integrity": "sha512-ekqoNRNK1lAcKhZESN/PdpVsWbP9jtiNqzFWkp/yAUdZvJalw2heCYuqRmM5eUJSIYEkgq5sGOjq+ZqsLMjtRA==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.1.tgz", + "integrity": "sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.28.0", - "@typescript-eslint/types": "5.28.0", - "@typescript-eslint/typescript-estree": "5.28.0", + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/typescript-estree": "5.42.1", "debug": "^4.3.4" }, "engines": { @@ -3656,13 +4425,32 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.28.0.tgz", - "integrity": "sha512-LeBLTqF/he1Z+boRhSqnso6YrzcKMTQ8bO/YKEe+6+O/JGof9M0g3IJlIsqfrK/6K03MlFIlycbf1uQR1IjE+w==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.1.tgz", + "integrity": "sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/visitor-keys": "5.42.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.42.1.tgz", + "integrity": "sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.28.0", - "@typescript-eslint/visitor-keys": "5.28.0" + "@typescript-eslint/typescript-estree": "5.42.1", + "@typescript-eslint/utils": "5.42.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3670,12 +4458,20 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@typescript-eslint/types": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.28.0.tgz", - "integrity": "sha512-2OOm8ZTOQxqkPbf+DAo8oc16sDlVR5owgJfKheBkxBKg1vAfw2JsSofH9+16VPlN9PWtv8Wzhklkqw3k/zCVxA==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.1.tgz", + "integrity": "sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3686,13 +4482,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.28.0.tgz", - "integrity": "sha512-9GX+GfpV+F4hdTtYc6OV9ZkyYilGXPmQpm6AThInpBmKJEyRSIjORJd1G9+bknb7OTFYL+Vd4FBJAO6T78OVqA==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.1.tgz", + "integrity": "sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.28.0", - "@typescript-eslint/visitor-keys": "5.28.0", + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/visitor-keys": "5.42.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3713,9 +4509,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -3728,17 +4524,19 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.28.0.tgz", - "integrity": "sha512-E60N5L0fjv7iPJV3UGc4EC+A3Lcj4jle9zzR0gW7vXhflO7/J29kwiTGITA2RlrmPokKiZbBy2DgaclCaEUs6g==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.42.1.tgz", + "integrity": "sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.28.0", - "@typescript-eslint/types": "5.28.0", - "@typescript-eslint/typescript-estree": "5.28.0", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/typescript-estree": "5.42.1", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3791,13 +4589,28 @@ "node": ">=10" } }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.28.0.tgz", - "integrity": "sha512-BtfP1vCor8cWacovzzPFOoeW4kBQxzmhxGoOpt0v1SFvG+nJ0cWaVdJk7cky1ArTcFHHKNIxyo2LLr3oNkSuXA==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.1.tgz", + "integrity": "sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.28.0", + "@typescript-eslint/types": "5.42.1", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -3948,11 +4761,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@yarnpkg/parsers/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, "node_modules/@zkochan/js-yaml": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", @@ -5701,6 +6509,12 @@ "color-support": "bin.js" } }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "devOptional": true + }, "node_modules/columnify": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", @@ -8986,6 +9800,12 @@ "node": ">=6" } }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "dev": true + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -9205,6 +10025,18 @@ "node": ">=0.10.0" } }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "dev": true, + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -9522,11 +10354,6 @@ "node": ">=8" } }, - "node_modules/inquirer/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -10145,15 +10972,15 @@ } }, "node_modules/jest": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.2.tgz", - "integrity": "sha512-Tuf05DwLeCh2cfWCQbcz9UxldoDyiR1E9Igaei5khjonKncYdc6LDfynKCEWozK0oLE3GD+xKAo2u8x/0s6GOg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.1.tgz", + "integrity": "sha512-qw9YHBnjt6TCbIDMPMpJZqf9E12rh6869iZaN08/vpOGgHJSAaLLUn6H8W3IAEuy34Ls3rct064mZLETkxJ2XA==", "dev": true, "dependencies": { - "@jest/core": "^28.1.2", + "@jest/core": "^28.1.1", "@jest/types": "^28.1.1", "import-local": "^3.0.2", - "jest-cli": "^28.1.2" + "jest-cli": "^28.1.1" }, "bin": { "jest": "bin/jest.js" @@ -10370,6 +11197,20 @@ "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", "dev": true }, + "node_modules/jest-cli/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/jest-cli/node_modules/jest-config": { "version": "28.1.2", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.2.tgz", @@ -10415,7 +11256,174 @@ } } }, - "node_modules/jest-cli/node_modules/jest-get-type": { + "node_modules/jest-cli/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-cli/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-cli/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-cli/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-cli/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-cli/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-config": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.1.tgz", + "integrity": "sha512-tASynMhS+jVV85zKvjfbJ8nUyJS/jUSYZ5KQxLUN2ZCvcQc/OmhQl2j6VEL3ezQkNofxn5pQ3SPYWPHb0unTZA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.1", + "@jest/types": "^28.1.1", + "babel-jest": "^28.1.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^28.1.1", + "jest-environment-node": "^28.1.1", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.1", + "jest-runner": "^28.1.1", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^28.1.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/node_modules/@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/ci-info": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", + "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==", + "dev": true + }, + "node_modules/jest-config/node_modules/jest-get-type": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", @@ -10424,7 +11432,7 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-cli/node_modules/jest-regex-util": { + "node_modules/jest-config/node_modules/jest-regex-util": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", @@ -10433,13 +11441,13 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-cli/node_modules/pretty-format": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", - "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "node_modules/jest-config/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, "dependencies": { - "@jest/schemas": "^28.0.2", + "@jest/schemas": "^28.1.3", "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" @@ -10448,39 +11456,12 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-cli/node_modules/react-is": { + "node_modules/jest-config/node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, - "node_modules/jest-cli/node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/jest-cli/node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/jest-diff": { "version": "28.1.1", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz", @@ -10634,6 +11615,277 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, + "node_modules/jest-environment-jsdom": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-28.1.1.tgz", + "integrity": "sha512-41ZvgSoPNcKG5q3LuuOcAczdBxRq9DbZkPe24okN6ZCmiZdAfFtPg3z+lOtsT1fM6OAERApKT+3m0MRDQH2zIA==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.1", + "@jest/fake-timers": "^28.1.1", + "@jest/types": "^28.1.1", + "@types/jsdom": "^16.2.4", + "@types/node": "*", + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1", + "jsdom": "^19.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-jsdom/node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/data-urls/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-environment-jsdom/node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jsdom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.5.0", + "acorn-globals": "^6.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-jsdom/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/jest-environment-jsdom/node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/jest-environment-node": { "version": "28.1.2", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.2.tgz", @@ -11807,6 +13059,39 @@ "node": ">=6" } }, + "node_modules/jsonc-eslint-parser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.1.0.tgz", + "integrity": "sha512-qCRJWlbP2v6HbmKW7R3lFbeiVWHo+oMJ0j+MizwvauqnCV/EvtAeEeuCgoc/ErtsuoKgYB8U4Ih8AxJbXoE6/g==", + "dev": true, + "dependencies": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jsonc-parser": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", @@ -12950,6 +14235,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node_modules/ncp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", @@ -13471,13 +14762,13 @@ "dev": true }, "node_modules/nx": { - "version": "14.8.6", - "resolved": "https://registry.npmjs.org/nx/-/nx-14.8.6.tgz", - "integrity": "sha512-QLU3sip/g3JdNO8n5Nw2esN+0G26Jsy3u1LlrB9Giu4zf/+KsfN8CcXMbEVqOnPR1FkCS52xliaq7IBQfvvMQA==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/nx/-/nx-15.2.1.tgz", + "integrity": "sha512-vVeT5D02cDDiSmS3P2Bos/waYQa3m0yl/rouzsKpusVSmzAQGQbKXhxPb4WnNIj8Iz/8KjFeBM/RZO021BtGNg==", "hasInstallScript": true, "dependencies": { - "@nrwl/cli": "14.8.6", - "@nrwl/tao": "14.8.6", + "@nrwl/cli": "15.2.1", + "@nrwl/tao": "15.2.1", "@parcel/watcher": "2.0.4", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "^3.0.0-rc.18", @@ -13509,8 +14800,8 @@ "tsconfig-paths": "^3.9.0", "tslib": "^2.3.0", "v8-compile-cache": "2.3.0", - "yargs": "^17.4.0", - "yargs-parser": "21.0.1" + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" }, "bin": { "nx": "bin/nx.js" @@ -13580,32 +14871,51 @@ "node": "*" } }, - "node_modules/nx/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, + "node_modules/nx/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/nx/node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^21.1.1" }, "engines": { "node": ">=12" } }, "node_modules/nx/node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/nx/node_modules/yargs/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, "engines": { "node": ">=12" } @@ -14293,7 +15603,7 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 6" } @@ -14326,15 +15636,18 @@ } }, "node_modules/prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prettier-bytes": { @@ -15186,6 +16499,12 @@ "npm": ">=2.0.0" } }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -15495,6 +16814,16 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -16338,6 +17667,15 @@ "node": ">=8" } }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, "node_modules/treeverse": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz", @@ -16423,9 +17761,9 @@ } }, "node_modules/ts-node": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", - "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -16505,10 +17843,9 @@ } }, "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "node_modules/tsscmp": { "version": "1.0.6", @@ -16534,14 +17871,11 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true, - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/tunnel-agent": { "version": "0.6.0", @@ -16621,9 +17955,9 @@ } }, "node_modules/typescript": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.3.tgz", - "integrity": "sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -17547,7 +18881,7 @@ }, "utils/check-working-tree": { "name": "@lerna/check-working-tree", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/collect-uncommitted": "file:../collect-uncommitted", @@ -17560,7 +18894,7 @@ }, "utils/collect-uncommitted": { "name": "@lerna/collect-uncommitted", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/child-process": "file:../../core/child-process", @@ -17573,7 +18907,7 @@ }, "utils/collect-updates": { "name": "@lerna/collect-updates", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/child-process": "file:../../core/child-process", @@ -17588,7 +18922,7 @@ }, "utils/create-symlink": { "name": "@lerna/create-symlink", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "cmd-shim": "^5.0.0", @@ -17601,7 +18935,7 @@ }, "utils/describe-ref": { "name": "@lerna/describe-ref", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/child-process": "file:../../core/child-process", @@ -17613,7 +18947,7 @@ }, "utils/filter-packages": { "name": "@lerna/filter-packages", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/validation-error": "file:../../core/validation-error", @@ -17626,7 +18960,7 @@ }, "utils/get-npm-exec-opts": { "name": "@lerna/get-npm-exec-opts", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "npmlog": "^6.0.2" @@ -17637,7 +18971,7 @@ }, "utils/get-packed": { "name": "@lerna/get-packed", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "fs-extra": "^9.1.0", @@ -17650,7 +18984,7 @@ }, "utils/github-client": { "name": "@lerna/github-client", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/child-process": "file:../../core/child-process", @@ -17665,7 +18999,7 @@ }, "utils/gitlab-client": { "name": "@lerna/gitlab-client", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "node-fetch": "^2.6.1", @@ -17677,7 +19011,7 @@ }, "utils/has-npm-version": { "name": "@lerna/has-npm-version", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/child-process": "file:../../core/child-process", @@ -17689,7 +19023,7 @@ }, "utils/listable": { "name": "@lerna/listable", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/query-graph": "file:../query-graph", @@ -17702,7 +19036,7 @@ }, "utils/log-packed": { "name": "@lerna/log-packed", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "byte-size": "^7.0.0", @@ -17716,7 +19050,7 @@ }, "utils/map-to-registry": { "name": "@lerna/map-to-registry", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "npm-package-arg": "8.1.1", @@ -17728,7 +19062,7 @@ }, "utils/npm-conf": { "name": "@lerna/npm-conf", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "config-chain": "^1.1.12", @@ -17740,7 +19074,7 @@ }, "utils/npm-dist-tag": { "name": "@lerna/npm-dist-tag", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/otplease": "file:../../core/otplease", @@ -17754,7 +19088,7 @@ }, "utils/npm-install": { "name": "@lerna/npm-install", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/child-process": "file:../../core/child-process", @@ -17771,7 +19105,7 @@ }, "utils/npm-publish": { "name": "@lerna/npm-publish", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/otplease": "file:../../core/otplease", @@ -17789,7 +19123,7 @@ }, "utils/npm-run-script": { "name": "@lerna/npm-run-script", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/child-process": "file:../../core/child-process", @@ -17802,7 +19136,7 @@ }, "utils/output": { "name": "@lerna/output", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "npmlog": "^6.0.2" @@ -17813,7 +19147,7 @@ }, "utils/pack-directory": { "name": "@lerna/pack-directory", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/get-packed": "file:../get-packed", @@ -17830,7 +19164,7 @@ }, "utils/prerelease-id-from-version": { "name": "@lerna/prerelease-id-from-version", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "semver": "^7.3.4" @@ -17841,7 +19175,7 @@ }, "utils/profiler": { "name": "@lerna/profiler", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "fs-extra": "^9.1.0", @@ -17854,7 +19188,7 @@ }, "utils/pulse-till-done": { "name": "@lerna/pulse-till-done", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "npmlog": "^6.0.2" @@ -17865,7 +19199,7 @@ }, "utils/query-graph": { "name": "@lerna/query-graph", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/package-graph": "file:../../core/package-graph" @@ -17876,7 +19210,7 @@ }, "utils/resolve-symlink": { "name": "@lerna/resolve-symlink", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "fs-extra": "^9.1.0", @@ -17889,7 +19223,7 @@ }, "utils/rimraf-dir": { "name": "@lerna/rimraf-dir", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/child-process": "file:../../core/child-process", @@ -17903,7 +19237,7 @@ }, "utils/run-lifecycle": { "name": "@lerna/run-lifecycle", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/npm-conf": "file:../npm-conf", @@ -17917,7 +19251,7 @@ }, "utils/run-topologically": { "name": "@lerna/run-topologically", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/query-graph": "file:../query-graph", @@ -17929,7 +19263,7 @@ }, "utils/symlink-binary": { "name": "@lerna/symlink-binary", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/create-symlink": "file:../create-symlink", @@ -17943,7 +19277,7 @@ }, "utils/symlink-dependencies": { "name": "@lerna/symlink-dependencies", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "@lerna/create-symlink": "file:../create-symlink", @@ -17959,7 +19293,7 @@ }, "utils/temp-write": { "name": "@lerna/temp-write", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "graceful-fs": "^4.1.15", @@ -17971,7 +19305,7 @@ }, "utils/timer": { "name": "@lerna/timer", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "engines": { "node": "^14.15.0 || >=16.0.0" @@ -17979,7 +19313,7 @@ }, "utils/write-log-file": { "name": "@lerna/write-log-file", - "version": "6.0.3", + "version": "6.1.0", "license": "MIT", "dependencies": { "npmlog": "^6.0.2", @@ -17991,49 +19325,6 @@ } }, "dependencies": { - "@actions/core": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.9.1.tgz", - "integrity": "sha512-5ad+U2YGrmmiw6du20AQW5XuWo7UKN2052FjSV7MX+Wfjf8sCqcsZe62NfgHys4QI4/Y+vQvLKYL8jWtA1ZBTA==", - "dev": true, - "requires": { - "@actions/http-client": "^2.0.1", - "uuid": "^8.3.2" - } - }, - "@actions/github": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@actions/github/-/github-5.0.3.tgz", - "integrity": "sha512-myjA/pdLQfhUGLtRZC/J4L1RXOG4o6aYdiEq+zr5wVVKljzbFld+xv10k1FX6IkIJtNxbAq44BdwSNpQ015P0A==", - "dev": true, - "requires": { - "@actions/http-client": "^2.0.1", - "@octokit/core": "^3.6.0", - "@octokit/plugin-paginate-rest": "^2.17.0", - "@octokit/plugin-rest-endpoint-methods": "^5.13.0" - }, - "dependencies": { - "@octokit/plugin-rest-endpoint-methods": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", - "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", - "dev": true, - "requires": { - "@octokit/types": "^6.34.0", - "deprecation": "^2.3.1" - } - } - } - }, - "@actions/http-client": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz", - "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==", - "dev": true, - "requires": { - "tunnel": "^0.0.6" - } - }, "@babel/code-frame": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", @@ -19240,12 +20531,12 @@ } }, "@jest/schemas": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", - "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", "dev": true, "requires": { - "@sinclair/typebox": "^0.23.3" + "@sinclair/typebox": "^0.24.1" } }, "@jest/source-map": { @@ -19609,9 +20900,6 @@ "npmlog": "^6.0.2" } }, - "@lerna/e2e": { - "version": "file:e2e" - }, "@lerna/exec": { "version": "file:commands/exec", "requires": { @@ -20338,38 +21626,222 @@ } }, "@nrwl/cli": { - "version": "14.8.6", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.8.6.tgz", - "integrity": "sha512-R4udxekMd4jhoRPEksJu+224DocOIrAqenFo0D2R36epE5FaCnZQX7xg+b3TjRbdS10e426i4D9LuXdQmP5jJg==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-15.2.1.tgz", + "integrity": "sha512-ufBJ5o3WCixdp6/TPkpn4rH3QBFJcqCMG1d14A/SvAkEnXu3vWlj3E+4GXf3CK+sGNjjf3ZGoNm7OFV+/Ml4GA==", "requires": { - "nx": "14.8.6" + "nx": "15.2.1" } }, "@nrwl/devkit": { - "version": "14.8.6", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-14.8.6.tgz", - "integrity": "sha512-+3KqohOKeUuyS176jrwY0yeB3E2IFQ3jMkS0KizzsHGsZWdZbQ2WQ46hZ0/bvRh9Efl8CAg6n4fUWR0BXUePMA==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.2.1.tgz", + "integrity": "sha512-si6DK0sjtr6Ln+7hh9QD50KqxnOxuP20xJ0fxMVafT/Lz/qtxuCPw9lwJWVagMHWw3pQAtN6lbkWiLOwj8+YPA==", "requires": { "@phenomnomnominal/tsquery": "4.1.1", "ejs": "^3.1.7", "ignore": "^5.0.4", + "semver": "7.3.4", + "tslib": "^2.3.0" + } + }, + "@nrwl/eslint-plugin-nx": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-15.2.1.tgz", + "integrity": "sha512-l3CQzhB+cDwZKMdWmaAexmgfTbKjVL6dIm4ZGx/iSMisaI5tCBcPpxiag/bocaMExkrPGh0e5xD78hD9EO+A4A==", + "dev": true, + "requires": { + "@nrwl/devkit": "15.2.1", + "@nrwl/workspace": "15.2.1", + "@typescript-eslint/utils": "^5.36.1", + "chalk": "4.1.0", + "confusing-browser-globals": "^1.0.9", + "semver": "7.3.4" + } + }, + "@nrwl/jest": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/jest/-/jest-15.2.1.tgz", + "integrity": "sha512-/lyqCeNmYmSoHDDnADuuTuooljnfxlJ8uviXUPodLGy3LaQBbxNy1vlxcg7mZqEOe1smH91TFxKq/7xDIZU9cA==", + "dev": true, + "requires": { + "@jest/reporters": "28.1.1", + "@jest/test-result": "28.1.1", + "@nrwl/devkit": "15.2.1", + "@phenomnomnominal/tsquery": "4.1.1", + "chalk": "4.1.0", + "dotenv": "~10.0.0", + "identity-obj-proxy": "3.0.0", + "jest-config": "28.1.1", + "jest-resolve": "28.1.1", + "jest-util": "28.1.1", + "resolve.exports": "1.1.0", "tslib": "^2.3.0" }, "dependencies": { - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "@jest/reporters": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.1.tgz", + "integrity": "sha512-597Zj4D4d88sZrzM4atEGLuO7SdA/YrOv9SRXHXRNC+/FwPCWxZhBAEzhXoiJzfRwn8zes/EjS8Lo6DouGN5Gg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^28.1.1", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.1", + "@jest/types": "^28.1.1", + "@jridgewell/trace-mapping": "^0.3.7", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1", + "jest-worker": "^28.1.1", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^9.0.0" + } + }, + "@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "@nrwl/js": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-15.2.1.tgz", + "integrity": "sha512-d/pItGaHFFYSrHjMXndzuSJWRPLNLCGHQ6E54NHtcIvVf0t+ZJ3Bz7yb7ybKYV+PhUVd6gfg7LByjzQNqHSlLg==", + "dev": true, + "requires": { + "@nrwl/devkit": "15.2.1", + "@nrwl/jest": "15.2.1", + "@nrwl/linter": "15.2.1", + "@nrwl/workspace": "15.2.1", + "@parcel/watcher": "2.0.4", + "chalk": "4.1.0", + "fast-glob": "3.2.7", + "fs-extra": "^10.1.0", + "ignore": "^5.0.4", + "js-tokens": "^4.0.0", + "minimatch": "3.0.5", + "source-map-support": "0.5.19", + "tree-kill": "1.2.2" + }, + "dependencies": { + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } } } }, + "@nrwl/linter": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/linter/-/linter-15.2.1.tgz", + "integrity": "sha512-b1+xoi6MhLdPD44rplmNbon5OyCuMpKzst50S4Xiyxdhf0fzu/w/cQDBv7zdRshE5+UMQAlDIVXF0zgEnBTQAQ==", + "dev": true, + "requires": { + "@nrwl/devkit": "15.2.1", + "@nrwl/jest": "15.2.1", + "@phenomnomnominal/tsquery": "4.1.1", + "nx": "15.2.1", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + } + }, "@nrwl/nx-cloud": { - "version": "14.7.0", - "resolved": "https://registry.npmjs.org/@nrwl/nx-cloud/-/nx-cloud-14.7.0.tgz", - "integrity": "sha512-sEGK5Ire5DC2liIsT89qR6SzZa46uinmWEAMz8ocMuu7nIMnwV9m15qajxhmYKasYsq9vTeT+x7BlZ4fnxPrNg==", + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@nrwl/nx-cloud/-/nx-cloud-15.0.2.tgz", + "integrity": "sha512-DaTASuXmGyQHMxJuK6y3f7fs+Q0qQCfYDIDVGK9muNwN/QItLeWdRNltLQxbrBeS112kQTu2FPsr0DmRD60+0A==", "dev": true, "requires": { - "axios": "^0.21.1", + "axios": "^0.21.2", "chalk": "4.1.0", "dotenv": "~10.0.0", "fs-extra": "^10.1.0", @@ -20398,54 +21870,243 @@ } } }, + "@nrwl/nx-plugin": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/nx-plugin/-/nx-plugin-15.2.1.tgz", + "integrity": "sha512-el4NGsEBRbGY50Oy1Nyg2HOXmPz4oudkf3uMmis3ewfK39l0RKJxllD/XSa+xmxDokQ4TgKmjdVqNg/iGM9RCQ==", + "dev": true, + "requires": { + "@nrwl/devkit": "15.2.1", + "@nrwl/jest": "15.2.1", + "@nrwl/js": "15.2.1", + "@nrwl/linter": "15.2.1", + "dotenv": "~10.0.0", + "fs-extra": "^10.1.0", + "tslib": "^2.3.0" + }, + "dependencies": { + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, "@nrwl/tao": { - "version": "14.8.6", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.8.6.tgz", - "integrity": "sha512-CByqrsfSJeonOd7TLAHP8bRYNWgDksxA7j+yncSzgQnFLEbZdJGG/AqqIovx8g6g2v0JS+nRgGC+w5UPf04UrQ==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-15.2.1.tgz", + "integrity": "sha512-6ApglWKORasLhtjlJmqo2co/UexSSiD7mWVxT2886oKG2Y/T/5RnPFNhJgGnKJIURCNMxiSKhq7GAA+CE9zRZg==", + "requires": { + "nx": "15.2.1" + } + }, + "@nrwl/workspace": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-15.2.1.tgz", + "integrity": "sha512-nqF1gP2KuVmQCjgyrX6TECAGFldJ55KEQs6WJIBsjYvmrWvAv341VVb565IEWpPGglb2/8NhJLBMdQ0ZpLG+tg==", + "dev": true, "requires": { - "nx": "14.8.6" + "@nrwl/devkit": "15.2.1", + "@nrwl/jest": "15.2.1", + "@nrwl/linter": "15.2.1", + "@parcel/watcher": "2.0.4", + "chalk": "4.1.0", + "chokidar": "^3.5.1", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "dotenv": "~10.0.0", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^10.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "minimatch": "3.0.5", + "npm-run-path": "^4.0.1", + "nx": "15.2.1", + "open": "^8.4.0", + "rxjs": "^6.5.4", + "semver": "7.3.4", + "tmp": "~0.2.1", + "tslib": "^2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "dependencies": { + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } } }, "@octokit/auth-token": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz", - "integrity": "sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz", + "integrity": "sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q==", "requires": { - "@octokit/types": "^6.0.3" + "@octokit/types": "^8.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", + "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" + }, + "@octokit/types": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz", + "integrity": "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==", + "requires": { + "@octokit/openapi-types": "^14.0.0" + } + } } }, "@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", - "requires": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.1.0.tgz", + "integrity": "sha512-Czz/59VefU+kKDy+ZfDwtOIYIkFjExOKf+HA92aiTZJ6EfWpFzYQWw0l54ji8bVmyhc+mGaLUbSUmXazG7z5OQ==", + "requires": { + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^8.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", + "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" + }, + "@octokit/types": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz", + "integrity": "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==", + "requires": { + "@octokit/openapi-types": "^14.0.0" + } + } } }, "@octokit/endpoint": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.11.tgz", - "integrity": "sha512-fUIPpx+pZyoLW4GCs3yMnlj2LfoXTWDUVPTC4V3MUEKZm48W+XYpeWSZCv+vYF1ZABUm2CqnDVf1sFtIYrj7KQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.3.tgz", + "integrity": "sha512-57gRlb28bwTsdNXq+O3JTQ7ERmBTuik9+LelgcLIVfYwf235VHbN9QNo4kXExtp/h8T423cR5iJThKtFYxC7Lw==", "requires": { - "@octokit/types": "^6.0.3", + "@octokit/types": "^8.0.0", "is-plain-object": "^5.0.0", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", + "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" + }, + "@octokit/types": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz", + "integrity": "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==", + "requires": { + "@octokit/openapi-types": "^14.0.0" + } + } } }, "@octokit/graphql": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.6.0.tgz", - "integrity": "sha512-CJ6n7izLFXLvPZaWzCQDjU/RP+vHiZmWdOunaCS87v+2jxMsW9FB5ktfIxybRBxZjxuJGRnxk7xJecWTVxFUYQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.4.tgz", + "integrity": "sha512-amO1M5QUQgYQo09aStR/XO7KAl13xpigcy/kI8/N1PnZYSS69fgte+xA4+c2DISKqUZfsh0wwjc2FaCt99L41A==", "requires": { - "@octokit/request": "^5.3.0", - "@octokit/types": "^6.0.3", + "@octokit/request": "^6.0.0", + "@octokit/types": "^8.0.0", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", + "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" + }, + "@octokit/types": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz", + "integrity": "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==", + "requires": { + "@octokit/openapi-types": "^14.0.0" + } + } } }, "@octokit/openapi-types": { @@ -20458,15 +22119,6 @@ "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==" }, - "@octokit/plugin-paginate-rest": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", - "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", - "dev": true, - "requires": { - "@octokit/types": "^6.34.0" - } - }, "@octokit/plugin-request-log": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", @@ -20483,26 +22135,56 @@ } }, "@octokit/request": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.2.tgz", + "integrity": "sha512-6VDqgj0HMc2FUX2awIs+sM6OwLgwHvAi4KCK3mT2H2IKRt6oH9d0fej5LluF5mck1lRR/rFWN0YIDSYXYSylbw==", "requires": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^8.0.0", "is-plain-object": "^5.0.0", "node-fetch": "^2.6.7", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", + "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" + }, + "@octokit/types": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz", + "integrity": "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==", + "requires": { + "@octokit/openapi-types": "^14.0.0" + } + } } }, "@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.2.tgz", + "integrity": "sha512-WMNOFYrSaX8zXWoJg9u/pKgWPo94JXilMLb2VManNOby9EZxrQaBe/QSC4a1TzpAlpxofg2X/jMnCyZgL6y7eg==", "requires": { - "@octokit/types": "^6.0.3", + "@octokit/types": "^8.0.0", "deprecation": "^2.0.0", "once": "^1.4.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", + "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" + }, + "@octokit/types": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz", + "integrity": "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==", + "requires": { + "@octokit/openapi-types": "^14.0.0" + } + } } }, "@octokit/rest": { @@ -20516,48 +22198,6 @@ "@octokit/plugin-rest-endpoint-methods": "^6.0.0" }, "dependencies": { - "@octokit/auth-token": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz", - "integrity": "sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==", - "requires": { - "@octokit/types": "^6.0.3" - } - }, - "@octokit/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.4.tgz", - "integrity": "sha512-sUpR/hc4Gc7K34o60bWC7WUH6Q7T6ftZ2dUmepSyJr9PRF76/qqkWjE2SOEzCqLA5W83SaISymwKtxks+96hPQ==", - "requires": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz", - "integrity": "sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==", - "requires": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/graphql": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.0.tgz", - "integrity": "sha512-1ZZ8tX4lUEcLPvHagfIVu5S2xpHYXAmgN0+95eAOPoaVPzCfUXJtA5vASafcpWcO86ze0Pzn30TAx72aB2aguQ==", - "requires": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, "@octokit/plugin-paginate-rest": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.0.0.tgz", @@ -20565,29 +22205,6 @@ "requires": { "@octokit/types": "^6.39.0" } - }, - "@octokit/request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.0.2.tgz", - "integrity": "sha512-WPMcm8nUET2v6P5AbTIhNzEorMLFPbFnzfP/VMAaRFwNzaqHmVvS+YLvqtWyKq0vnZ6a9ImQuCHNb3L4oNovRw==", - "requires": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/request-error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.0.tgz", - "integrity": "sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w==", - "requires": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } } } }, @@ -20638,9 +22255,9 @@ "dev": true }, "@sinclair/typebox": { - "version": "0.23.5", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", - "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==", + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", "dev": true }, "@sindresorhus/is": { @@ -20649,22 +22266,187 @@ "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", "dev": true }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@swc-node/core": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@swc-node/core/-/core-1.9.1.tgz", + "integrity": "sha512-Mh4T/PmQOpPtqw1BNvU38uWzsXbd5RJji17YBXnj7JDDE5KlTR9sSo2RKxWKDVtHbdcD1S+CtyZXA93aEWlfGQ==", + "devOptional": true, + "requires": {} + }, + "@swc-node/register": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@swc-node/register/-/register-1.5.4.tgz", + "integrity": "sha512-cM5/A63bO6qLUFC4gcBnOlQO5yd8ObSdFUIp7sXf11Oq5mPVAnJy2DqjbWMUsqUaHuNk+lOIt76ie4DEseUIyA==", + "devOptional": true, + "requires": { + "@swc-node/core": "^1.9.1", + "@swc-node/sourcemap-support": "^0.2.2", + "colorette": "^2.0.19", + "debug": "^4.3.4", + "pirates": "^4.0.5", + "tslib": "^2.4.0" + } + }, + "@swc-node/sourcemap-support": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@swc-node/sourcemap-support/-/sourcemap-support-0.2.2.tgz", + "integrity": "sha512-PA4p7nC5LwPdEVcQXFxMTpfvizYPeMoB55nIIx+yC3FiLnyPgC2hcpUitPy5h8RRGdCZ/Mvb2ryEcVYS8nI6YA==", + "devOptional": true, + "requires": { + "source-map-support": "^0.5.21", + "tslib": "^2.4.0" + }, + "dependencies": { + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "devOptional": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "@swc/cli": { + "version": "0.1.57", + "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.57.tgz", + "integrity": "sha512-HxM8TqYHhAg+zp7+RdTU69bnkl4MWdt1ygyp6BDIPjTiaJVH6Dizn2ezbgDS8mnFZI1FyhKvxU/bbaUs8XhzQg==", + "dev": true, + "requires": { + "commander": "^7.1.0", + "fast-glob": "^3.2.5", + "slash": "3.0.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + } + } + }, + "@swc/core": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.14.tgz", + "integrity": "sha512-LpTTrXOGS7vnbR/rHrAux7GykUWbyVmI5NbICl9iF9yeqFdGm6JjaGBhbanmG8zrQL5aFx2kMxxb92V9D1KUiw==", + "devOptional": true, + "requires": { + "@swc/core-darwin-arm64": "1.3.14", + "@swc/core-darwin-x64": "1.3.14", + "@swc/core-linux-arm-gnueabihf": "1.3.14", + "@swc/core-linux-arm64-gnu": "1.3.14", + "@swc/core-linux-arm64-musl": "1.3.14", + "@swc/core-linux-x64-gnu": "1.3.14", + "@swc/core-linux-x64-musl": "1.3.14", + "@swc/core-win32-arm64-msvc": "1.3.14", + "@swc/core-win32-ia32-msvc": "1.3.14", + "@swc/core-win32-x64-msvc": "1.3.14" + } + }, + "@swc/core-darwin-arm64": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.14.tgz", + "integrity": "sha512-QFuUq3341uOCrJMIWGuo+CmRC5qZoM2lUo7o2lmv1FO1Dh9njTG85pLD83vz6y4j/F034DBGzvRgSti/Bsoccw==", + "dev": true, + "optional": true + }, + "@swc/core-darwin-x64": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.14.tgz", + "integrity": "sha512-fpAjbjXimJBmxCumRB8zjEtPc0lGUi9Uvu92XH6ww6AyXvg7KQmua5P2R9tnzAm6NwTCXKkgS86cgKysAbbObw==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm-gnueabihf": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.14.tgz", + "integrity": "sha512-3XSFlgIyDPS+x2c0IFr0AGj4NUbrWGKbkkUCpmAURII0n3YoDsYw8Ux73I8MkWxTTwDGkou8qQOXyA28kAUM4w==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm64-gnu": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.14.tgz", + "integrity": "sha512-r3fToDRYX76NEptAjvDg5aGrbitOgqooV37RpSTIGYd/CSNuin4cpCNFdca/Vh5lnNfal7mqdGDbG7gMruARtw==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm64-musl": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.14.tgz", + "integrity": "sha512-IivEUC+3HNSsQNCfaCDzev2CpsvWpgFReitCmj0PKIdXFRsTi78jtJiraLWnYy956j4wwZbKN0OFGkS2ekKAVg==", + "dev": true, + "optional": true + }, + "@swc/core-linux-x64-gnu": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.14.tgz", + "integrity": "sha512-HtwwA1Z0tE2z9fgaR5ehgY5ULbnVLHj3tayyWhIElF4EWsi6aQfCyn/oCZAcjoPKfEnJiSNBYt5gMmfK8l4mJA==", + "dev": true, + "optional": true + }, + "@swc/core-linux-x64-musl": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.14.tgz", + "integrity": "sha512-RPXilkTD8IVgpou4TNuqZJOB7kMrVJ7sm7GgHF4v1eV3xdIyvy4w5FWjXZRdwMW6iunLgQEckuOmVx0I4mrdNg==", + "dev": true, + "optional": true + }, + "@swc/core-win32-arm64-msvc": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.14.tgz", + "integrity": "sha512-H8Ka/ahJRs84hQCHC5ndORujbLBmi1mv+Z/m4CXpOaEX7TmeAo8nA17rrRckNvVkud9fghsKQGjkBQvJ0v7mRw==", + "dev": true, + "optional": true + }, + "@swc/core-win32-ia32-msvc": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.14.tgz", + "integrity": "sha512-H3ZmDXrVxrqBzzCFodwYfcXfTHE0xGNLJlLGzJ4haV6RBM3ZYIvRzDtPivDzic/VQncmPj1WpLoEDfx/7KNC8Q==", "dev": true, - "requires": { - "type-detect": "4.0.8" - } + "optional": true }, - "@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "@swc/core-win32-x64-msvc": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.14.tgz", + "integrity": "sha512-/D1lhWF/DQi2M7b6jWL35NmTY0mRJ5mwTXdmjqNNWOZ8h8TXQo1A3/FDFnfIIcRUeSNdF7IeB3xInT3BI34E1w==", "dev": true, + "optional": true + }, + "@swc/helpers": { + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.12.tgz", + "integrity": "sha512-R6RmwS9Dld5lNvwKlPn62+piU+WDG1sMfsnfJioXCciyko/gZ0DQ4Mqglhq1iGU1nQ/RcGkAwfMH+elMSkJH3Q==", "requires": { - "@sinonjs/commons": "^1.7.0" + "tslib": "^2.4.0" } }, "@tootallnate/once": { @@ -20798,13 +22580,13 @@ } }, "@types/jest": { - "version": "28.1.4", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.4.tgz", - "integrity": "sha512-telv6G5N7zRJiLcI3Rs3o+ipZ28EnE+7EvF0pSrt2pZOMnAVI/f+6/LucDxOvcBcTeTL3JMF744BbVQAVBUQRA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.1.tgz", + "integrity": "sha512-C2p7yqleUKtCkVjlOur9BWVA4HgUQmEj/HWCt5WzZ5mLXrWnyIfl0wGuArc+kBXsy0ZZfLp+7dywB4HtSVYGVA==", "dev": true, "requires": { - "jest-matcher-utils": "^28.0.0", - "pretty-format": "^28.0.0" + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" }, "dependencies": { "ansi-styles": { @@ -20813,23 +22595,52 @@ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, + "diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true + }, + "jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true + }, + "jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, "pretty-format": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", - "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "requires": { - "@jest/schemas": "^28.0.2", "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true } } }, @@ -20839,6 +22650,17 @@ "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", "dev": true }, + "@types/jsdom": { + "version": "16.2.15", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.15.tgz", + "integrity": "sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/parse5": "^6.0.3", + "@types/tough-cookie": "*" + } + }, "@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -20861,9 +22683,9 @@ "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==" }, "@types/node": { - "version": "14.14.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.25.tgz", - "integrity": "sha512-EPpXLOVqDvisVxtlbvzfyqSsFeQxltFbluZNRndIb8tr9KiBnYNLzrc1N3pyKUCww2RNrfHDViqDWWE1LCJQtQ==", + "version": "16.11.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", + "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==", "dev": true }, "@types/normalize-package-data": { @@ -20876,12 +22698,24 @@ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, + "@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true + }, "@types/prettier": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.0.tgz", "integrity": "sha512-O3SQC6+6AySHwrspYn2UvC6tjo6jCTMMmylxZUFhE1CulVu5l3AxU6ca9lrJDTQDVllF62LIxVSx5fuYL6LiZg==", "dev": true }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "@types/stack-utils": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", @@ -20894,6 +22728,12 @@ "integrity": "sha512-dDZH/tXzwjutnuk4UacGgFRwV+JSLaXL1ikvidfJprkb7L9Nx1njcRHHmi3Dsvt7pgqqTEeucQuOrWHPFgzVHA==", "dev": true }, + "@types/tough-cookie": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "dev": true + }, "@types/yargs": { "version": "15.0.13", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", @@ -20909,42 +22749,82 @@ "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", "dev": true }, + "@typescript-eslint/eslint-plugin": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.42.1.tgz", + "integrity": "sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/type-utils": "5.42.1", + "@typescript-eslint/utils": "5.42.1", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "@typescript-eslint/parser": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.28.0.tgz", - "integrity": "sha512-ekqoNRNK1lAcKhZESN/PdpVsWbP9jtiNqzFWkp/yAUdZvJalw2heCYuqRmM5eUJSIYEkgq5sGOjq+ZqsLMjtRA==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.1.tgz", + "integrity": "sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.28.0", - "@typescript-eslint/types": "5.28.0", - "@typescript-eslint/typescript-estree": "5.28.0", + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/typescript-estree": "5.42.1", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.28.0.tgz", - "integrity": "sha512-LeBLTqF/he1Z+boRhSqnso6YrzcKMTQ8bO/YKEe+6+O/JGof9M0g3IJlIsqfrK/6K03MlFIlycbf1uQR1IjE+w==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.1.tgz", + "integrity": "sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/visitor-keys": "5.42.1" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.42.1.tgz", + "integrity": "sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.28.0", - "@typescript-eslint/visitor-keys": "5.28.0" + "@typescript-eslint/typescript-estree": "5.42.1", + "@typescript-eslint/utils": "5.42.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.28.0.tgz", - "integrity": "sha512-2OOm8ZTOQxqkPbf+DAo8oc16sDlVR5owgJfKheBkxBKg1vAfw2JsSofH9+16VPlN9PWtv8Wzhklkqw3k/zCVxA==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.1.tgz", + "integrity": "sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.28.0.tgz", - "integrity": "sha512-9GX+GfpV+F4hdTtYc6OV9ZkyYilGXPmQpm6AThInpBmKJEyRSIjORJd1G9+bknb7OTFYL+Vd4FBJAO6T78OVqA==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.1.tgz", + "integrity": "sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.28.0", - "@typescript-eslint/visitor-keys": "5.28.0", + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/visitor-keys": "5.42.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -20953,9 +22833,9 @@ }, "dependencies": { "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -20964,17 +22844,19 @@ } }, "@typescript-eslint/utils": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.28.0.tgz", - "integrity": "sha512-E60N5L0fjv7iPJV3UGc4EC+A3Lcj4jle9zzR0gW7vXhflO7/J29kwiTGITA2RlrmPokKiZbBy2DgaclCaEUs6g==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.42.1.tgz", + "integrity": "sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.28.0", - "@typescript-eslint/types": "5.28.0", - "@typescript-eslint/typescript-estree": "5.28.0", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/typescript-estree": "5.42.1", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" }, "dependencies": { "eslint-scope": { @@ -21001,16 +22883,25 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, "@typescript-eslint/visitor-keys": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.28.0.tgz", - "integrity": "sha512-BtfP1vCor8cWacovzzPFOoeW4kBQxzmhxGoOpt0v1SFvG+nJ0cWaVdJk7cky1ArTcFHHKNIxyo2LLr3oNkSuXA==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.1.tgz", + "integrity": "sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==", "dev": true, "requires": { - "@typescript-eslint/types": "5.28.0", + "@typescript-eslint/types": "5.42.1", "eslint-visitor-keys": "^3.3.0" } }, @@ -21110,11 +23001,6 @@ "argparse": "^1.0.7", "esprima": "^4.0.0" } - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" } } }, @@ -22469,6 +24355,12 @@ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "devOptional": true + }, "columnify": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", @@ -25038,6 +26930,12 @@ "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==" }, + "harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "dev": true + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -25204,6 +27102,15 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "dev": true, + "requires": { + "harmony-reflect": "^1.4.6" + } + }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -25438,11 +27345,6 @@ "requires": { "ansi-regex": "^5.0.0" } - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" } } }, @@ -25885,15 +27787,15 @@ } }, "jest": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.2.tgz", - "integrity": "sha512-Tuf05DwLeCh2cfWCQbcz9UxldoDyiR1E9Igaei5khjonKncYdc6LDfynKCEWozK0oLE3GD+xKAo2u8x/0s6GOg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.1.tgz", + "integrity": "sha512-qw9YHBnjt6TCbIDMPMpJZqf9E12rh6869iZaN08/vpOGgHJSAaLLUn6H8W3IAEuy34Ls3rct064mZLETkxJ2XA==", "dev": true, "requires": { - "@jest/core": "^28.1.2", + "@jest/core": "^28.1.1", "@jest/types": "^28.1.1", "import-local": "^3.0.2", - "jest-cli": "^28.1.2" + "jest-cli": "^28.1.1" }, "dependencies": { "@jest/types": { @@ -26024,33 +27926,201 @@ } } }, - "jest-cli": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.2.tgz", - "integrity": "sha512-l6eoi5Do/IJUXAFL9qRmDiFpBeEJAnjJb1dcd9i/VWfVWbp3mJhuH50dNtX67Ali4Ecvt4eBkWb4hXhPHkAZTw==", + "jest-cli": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.2.tgz", + "integrity": "sha512-l6eoi5Do/IJUXAFL9qRmDiFpBeEJAnjJb1dcd9i/VWfVWbp3mJhuH50dNtX67Ali4Ecvt4eBkWb4hXhPHkAZTw==", + "dev": true, + "requires": { + "@jest/core": "^28.1.2", + "@jest/test-result": "^28.1.1", + "@jest/types": "^28.1.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^28.1.2", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "dependencies": { + "@jest/types": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "jest-config": { + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.2.tgz", + "integrity": "sha512-g6EfeRqddVbjPVBVY4JWpUY4IvQoFRIZcv4V36QkqzE0IGhEC/VkugFeBMAeUE7PRgC8KJF0yvJNDeQRbamEVA==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.1", + "@jest/types": "^28.1.1", + "babel-jest": "^28.1.2", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^28.1.2", + "jest-environment-node": "^28.1.2", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.1", + "jest-runner": "^28.1.2", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^28.1.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } + }, + "jest-config": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.1.tgz", + "integrity": "sha512-tASynMhS+jVV85zKvjfbJ8nUyJS/jUSYZ5KQxLUN2ZCvcQc/OmhQl2j6VEL3ezQkNofxn5pQ3SPYWPHb0unTZA==", "dev": true, "requires": { - "@jest/core": "^28.1.2", - "@jest/test-result": "^28.1.1", + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.1", "@jest/types": "^28.1.1", + "babel-jest": "^28.1.1", "chalk": "^4.0.0", - "exit": "^0.1.2", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^28.1.2", + "jest-circus": "^28.1.1", + "jest-environment-node": "^28.1.1", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.1", + "jest-runner": "^28.1.1", "jest-util": "^28.1.1", "jest-validate": "^28.1.1", - "prompts": "^2.0.1", - "yargs": "^17.3.1" + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^28.1.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "dependencies": { "@jest/types": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", - "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { - "@jest/schemas": "^28.0.2", + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -26059,9 +28129,9 @@ } }, "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -26074,41 +28144,11 @@ "dev": true }, "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", + "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==", "dev": true }, - "jest-config": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.2.tgz", - "integrity": "sha512-g6EfeRqddVbjPVBVY4JWpUY4IvQoFRIZcv4V36QkqzE0IGhEC/VkugFeBMAeUE7PRgC8KJF0yvJNDeQRbamEVA==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.1", - "@jest/types": "^28.1.1", - "babel-jest": "^28.1.2", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.2", - "jest-environment-node": "^28.1.2", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.1", - "jest-runner": "^28.1.2", - "jest-util": "^28.1.1", - "jest-validate": "^28.1.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^28.1.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - } - }, "jest-get-type": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", @@ -26122,12 +28162,12 @@ "dev": true }, "pretty-format": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", - "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, "requires": { - "@jest/schemas": "^28.0.2", + "@jest/schemas": "^28.1.3", "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" @@ -26138,27 +28178,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true - }, - "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } - }, - "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true } } }, @@ -26283,6 +28302,211 @@ } } }, + "jest-environment-jsdom": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-28.1.1.tgz", + "integrity": "sha512-41ZvgSoPNcKG5q3LuuOcAczdBxRq9DbZkPe24okN6ZCmiZdAfFtPg3z+lOtsT1fM6OAERApKT+3m0MRDQH2zIA==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.1", + "@jest/fake-timers": "^28.1.1", + "@jest/types": "^28.1.1", + "@types/jsdom": "^16.2.4", + "@types/node": "*", + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1", + "jsdom": "^19.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "requires": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } + } + }, + "domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "requires": { + "webidl-conversions": "^7.0.0" + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "requires": { + "whatwg-encoding": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "jsdom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.5.0", + "acorn-globals": "^6.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" + } + }, + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "dev": true, + "requires": { + "xml-name-validator": "^4.0.0" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + }, + "whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "requires": { + "iconv-lite": "0.6.3" + } + }, + "whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true + }, + "whatwg-url": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + }, + "ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "requires": {} + }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + } + } + }, "jest-environment-node": { "version": "28.1.2", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.2.tgz", @@ -27225,6 +29449,29 @@ "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true }, + "jsonc-eslint-parser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.1.0.tgz", + "integrity": "sha512-qCRJWlbP2v6HbmKW7R3lFbeiVWHo+oMJ0j+MizwvauqnCV/EvtAeEeuCgoc/ErtsuoKgYB8U4Ih8AxJbXoE6/g==", + "dev": true, + "requires": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "jsonc-parser": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", @@ -28148,6 +30395,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "ncp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", @@ -28552,12 +30805,12 @@ "dev": true }, "nx": { - "version": "14.8.6", - "resolved": "https://registry.npmjs.org/nx/-/nx-14.8.6.tgz", - "integrity": "sha512-QLU3sip/g3JdNO8n5Nw2esN+0G26Jsy3u1LlrB9Giu4zf/+KsfN8CcXMbEVqOnPR1FkCS52xliaq7IBQfvvMQA==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/nx/-/nx-15.2.1.tgz", + "integrity": "sha512-vVeT5D02cDDiSmS3P2Bos/waYQa3m0yl/rouzsKpusVSmzAQGQbKXhxPb4WnNIj8Iz/8KjFeBM/RZO021BtGNg==", "requires": { - "@nrwl/cli": "14.8.6", - "@nrwl/tao": "14.8.6", + "@nrwl/cli": "15.2.1", + "@nrwl/tao": "15.2.1", "@parcel/watcher": "2.0.4", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "^3.0.0-rc.18", @@ -28589,8 +30842,8 @@ "tsconfig-paths": "^3.9.0", "tslib": "^2.3.0", "v8-compile-cache": "2.3.0", - "yargs": "^17.4.0", - "yargs-parser": "21.0.1" + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" }, "dependencies": { "axios": { @@ -28636,29 +30889,44 @@ "path-is-absolute": "^1.0.0" } }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } }, "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "requires": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^21.1.1" + }, + "dependencies": { + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + } } }, "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" } } }, @@ -29149,7 +31417,7 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true + "devOptional": true }, "pkginfo": { "version": "0.4.1", @@ -29170,9 +31438,9 @@ "dev": true }, "prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, "prettier-bytes": { @@ -29808,6 +32076,14 @@ "dev": true, "requires": { "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "safe-buffer": { @@ -30057,6 +32333,16 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -30718,6 +33004,12 @@ "punycode": "^2.1.1" } }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, "treeverse": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz", @@ -30767,9 +33059,9 @@ } }, "ts-node": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", - "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, "requires": { "@cspotcode/source-map-support": "^0.8.0", @@ -30822,10 +33114,9 @@ } }, "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "tsscmp": { "version": "1.0.6", @@ -30840,14 +33131,16 @@ "dev": true, "requires": { "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true - }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -30914,9 +33207,9 @@ } }, "typescript": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.3.tgz", - "integrity": "sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==" + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==" }, "uglify-js": { "version": "3.12.7", diff --git a/package.json b/package.json index 417daf6a76..541b766956 100644 --- a/package.json +++ b/package.json @@ -24,16 +24,18 @@ "ci:test:integration": "jest --config jest.integration.js --maxWorkers=2 --ci", "ci:windows": "jest --ci --maxWorkers=2 && npm run integration -- --ci", "build": "scripts/build.sh", - "e2e": "npm run build && npx nx e2e @lerna/e2e", - "e2e:local-publish": "npm run build && npm run --workspace e2e prepare-local-publish && npm run --workspace e2e publish-to-verdaccio", "fix": "npm run lint -- --fix", "format:check": "prettier --check '**/*.{js,ts,tsx,css,yml,json}'", "format:write": "prettier --write '**/*.{js,ts,tsx,css,yml,json}'", "integration": "jest --config jest.integration.js --maxWorkers=2", "ci:lint": "eslint . -c .eslintrc.json --no-eslintrc --ignore-path .gitignore", - "lint": "eslint . -c .eslintrc.json --no-eslintrc --ignore-path .gitignore --cache --cache-location ./node_modules/.cache/eslint", + "lint": "eslint . -c .eslintrc.json --no-eslintrc --ignore-path .gitignore --ignore-pattern __fixtures__ --cache --cache-location ./node_modules/.cache/eslint && nx run-many --target=lint", "pretest": "npm run lint", - "test": "jest" + "test": "jest && nx run-many --target=test --projects=\"libs-*,nx-*\"", + "e2e-start-local-registry": "node ./scripts/e2e-start-local-registry.js", + "e2e-build-package-publish": "ts-node -P ./scripts/tsconfig.e2e.json ./scripts/e2e-build-package-publish.ts", + "local-release": "ts-node -P ./scripts/tsconfig.scripts.json ./scripts/local-release", + "local-registry": "./scripts/local-registry.sh" }, "repository": { "type": "git", @@ -46,6 +48,7 @@ "@npmcli/run-script": "^4.1.7", "@octokit/plugin-enterprise-rest": "^6.0.1", "@octokit/rest": "^19.0.3", + "@swc/helpers": "~0.4.11", "byte-size": "^7.0.0", "chalk": "^4.1.0", "clone-deep": "^4.0.1", @@ -100,6 +103,7 @@ "ssri": "^9.0.1", "strong-log-transformer": "^2.1.0", "tar": "^6.1.0", + "tslib": "^2.3.0", "upath": "^2.0.1", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "^4.0.0", @@ -109,16 +113,23 @@ "yargs": "^16.2.0" }, "devDependencies": { - "@actions/core": "^1.8.2", - "@actions/github": "^5.0.3", "@lerna-test/helpers": "file:helpers", - "@nrwl/devkit": "14.8.6", - "@nrwl/nx-cloud": "14.7.0", + "@nrwl/devkit": "15.2.1", + "@nrwl/eslint-plugin-nx": "15.2.1", + "@nrwl/jest": "15.2.1", + "@nrwl/js": "15.2.1", + "@nrwl/nx-cloud": "15.0.2", + "@nrwl/nx-plugin": "15.2.1", + "@swc-node/register": "^1.4.2", + "@swc/cli": "~0.1.55", + "@swc/core": "^1.2.173", "@types/fs-extra": "^9.0.13", "@types/is-ci": "^2.0.0", - "@types/jest": "^28.1.4", + "@types/jest": "28.1.1", "@types/js-yaml": "^4.0.5", + "@types/node": "16.11.7", "@types/tmp": "^0.2.3", + "@typescript-eslint/eslint-plugin": "^5.28.0", "@typescript-eslint/parser": "^5.28.0", "all-contributors-cli": "^6.20.0", "debug": "^4.3.1", @@ -132,23 +143,25 @@ "expect": "^26.6.2", "file-url": "^3.0.0", "find-up": "^5.0.0", - "jest": "^28.1.2", + "jest": "28.1.1", "jest-diff": "^28.1.1", + "jest-environment-jsdom": "28.1.1", "jest-matcher-utils": "^28.1.1", "js-yaml": "^4.1.0", + "jsonc-eslint-parser": "^2.1.0", "node-jq": "^2.3.3", "normalize-newline": "^3.0.0", "normalize-path": "^3.0.0", - "nx": "14.8.6", + "nx": "15.2.1", "path-key": "^3.1.1", "prettier": "^2.2.1", "tacks": "1.2.6", "tempy": "^1.0.0", "tmp": "^0.2.1", "touch": "^3.1.0", - "ts-jest": "^28.0.5", - "ts-node": "^10.8.1", - "typescript": "^4.7.3", + "ts-jest": "28.0.5", + "ts-node": "10.9.1", + "typescript": "~4.8.2", "verdaccio": "^5.13.3" } } diff --git a/scripts/e2e-build-package-publish.ts b/scripts/e2e-build-package-publish.ts new file mode 100644 index 0000000000..4cbedb7b15 --- /dev/null +++ b/scripts/e2e-build-package-publish.ts @@ -0,0 +1,63 @@ +import { execSync } from "child_process"; +import { remove } from "fs-extra"; +import { existsSync } from "fs"; +import { stripIndent } from "nx/src/utils/logger"; +import chalk from "chalk"; + +const LERNA_PREFIX = `${chalk.cyan(">")} ${chalk.inverse(chalk.bold(chalk.cyan(" LERNA ")))}`; + +const MESSAGE = ` +Did you know that you can run the command with: + > LERNA_E2E_SKIP_BUILD_CLEANUP - saves time by reusing the previously built local packages + > CI - simulate the CI environment settings + +If your e2e tests fail when trying to create a workspace, remove your npx cache. +\n`; + +const DIRECTORIES_TO_REMOVE = ["./dist", "/tmp/lerna-e2e", "./tmp/local-registry"]; + +// ============================= JH: extracted the above customization points to constants + +process.env.npm_config_registry = `http://localhost:4872`; +process.env.YARN_REGISTRY = process.env.npm_config_registry; + +async function buildPackagePublishAndCleanPorts() { + if (!process.env.LERNA_E2E_SKIP_BUILD_CLEANUP) { + if (!process.env.CI) { + console.log(stripIndent(MESSAGE)); + } + await Promise.all(DIRECTORIES_TO_REMOVE.map((dir) => remove(dir))); + } + // JH: changed from ./build to ./dist + if (!process.env.LERNA_E2E_SKIP_BUILD_CLEANUP || !existsSync("./dist")) { + try { + await updateVersionsAndPublishPackages(); + } catch (e) { + console.log(e); + process.exit(1); + } + } else { + console.log(`\n⏩ Project building skipped. Reusing the existing packages`); + } +} + +async function updateVersionsAndPublishPackages() { + process.env.PUBLISHED_VERSION = process.env.PUBLISHED_VERSION || "999.9.9-e2e.0"; + + console.log(`\n${LERNA_PREFIX} 📦 Publishing packages\n`); + const isVerbose = process.env.NX_VERBOSE_LOGGING === "true" || process.argv.includes("--verbose"); + // JH: changed to `npm run` and changed version to value of $PUBLISHED_VERSION + const response = execSync(`npm run local-release ${process.env.PUBLISHED_VERSION} --local`, { + stdio: isVerbose ? "inherit" : "pipe", + encoding: "utf8", + }); + // extract published version + if (!isVerbose) { + const value = response.match(/Successfully published:\s+ - .+@(.*)/); + console.log(`${LERNA_PREFIX} ✅ Published local version: ${value?.[1]}\n`); + } +} + +(async () => { + await buildPackagePublishAndCleanPorts(); +})(); diff --git a/scripts/e2e-start-local-registry.js b/scripts/e2e-start-local-registry.js new file mode 100644 index 0000000000..59242a63b4 --- /dev/null +++ b/scripts/e2e-start-local-registry.js @@ -0,0 +1,21 @@ +/* eslint-disable no-console */ +/* eslint-disable no-process-exit */ +const { exec } = require("child_process"); + +const verdacio = exec("npx verdaccio --config ./scripts/local-registry/config.yml"); +verdacio.unref(); + +console.log("starting local registry"); +function outputHandling(data) { + console.log(data.toString()); + if (data.toString().indexOf("address already in use") > -1) { + console.log("Ignoring the error. The local registry is already running."); + process.exit(0); + } +} + +verdacio.stdout.on("data", outputHandling); +verdacio.stderr.on("data", outputHandling); +verdacio.on("exit", (code) => process.exit(code)); + +setTimeout(() => process.exit(0), 2000); diff --git a/scripts/local-registry.sh b/scripts/local-registry.sh new file mode 100755 index 0000000000..a96d0e19d9 --- /dev/null +++ b/scripts/local-registry.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +COMMAND=$1 + +if [[ $COMMAND == "enable" ]]; then + echo "Setting registry to local registry" + echo "To Disable: yarn local-registry disable" + npm config set registry http://localhost:4873/ + yarn config set registry http://localhost:4873/ +fi + +if [[ $COMMAND == "disable" ]]; then + npm config delete registry + yarn config delete registry + CURRENT_NPM_REGISTRY=$(npm config get registry) + CURRENT_YARN_REGISTRY=$(yarn config get registry) + + echo "Reverting registries" + echo " > NPM: $CURRENT_NPM_REGISTRY" + echo " > YARN: $CURRENT_YARN_REIGSTRY" +fi + +if [[ $COMMAND == "clear" ]]; then + echo "Clearing Local Registry" + rm -rf ./build/local-registry/storage +fi + +if [[ $COMMAND == "start" ]]; then + echo "Starting Local Registry" + VERDACCIO_HANDLE_KILL_SIGNALS=true + yarn verdaccio --config ./.verdaccio/config.yml +fi diff --git a/scripts/local-registry/config.yml b/scripts/local-registry/config.yml new file mode 100644 index 0000000000..9f6c67046a --- /dev/null +++ b/scripts/local-registry/config.yml @@ -0,0 +1,31 @@ +# path to a directory with all packages +storage: ../../tmp/local-registry/storage + +listen: localhost:4872 + +# a list of other known repositories we can talk to +uplinks: + npmjs: + url: https://registry.npmjs.org/ + max_fails: 100 + maxage: 30m + fail_timeout: 10m + timeout: 600s + cache: false + +packages: + "@lerna/*": + access: $all + publish: $all + + "**": + access: $all + publish: $all + unpublish: $all + proxy: npmjs + +# log settings +logs: + type: stdout + format: pretty + level: warn diff --git a/scripts/local-release.ts b/scripts/local-release.ts new file mode 100755 index 0000000000..74b2aab618 --- /dev/null +++ b/scripts/local-release.ts @@ -0,0 +1,252 @@ +#!/usr/bin/env node +import * as yargs from "yargs"; +import { execSync } from "child_process"; +import { existsSync, readFileSync, writeFileSync } from "fs"; +import { URL } from "url"; +import { join } from "path"; + +// JH: removed * as from both of these because of different tsconfig settings between lerna and nx +import version from "@lerna/version/index"; +import publish from "@lerna/publish/index"; + +function hideFromGitIndex(uncommittedFiles: string[]) { + execSync(`git update-index --assume-unchanged ${uncommittedFiles.join(" ")}`); + + return () => execSync(`git update-index --no-assume-unchanged ${uncommittedFiles.join(" ")}`); +} + +(async () => { + const options = await parseArgs(); + if (!options.local && !options.force) { + console.log("Authenticating to NPM"); + execSync("npm adduser", { + stdio: [0, 1, 2], + }); + } + + if (options.clearLocalRegistry) { + // JH: changed to `npm run` + execSync("npm run local-registry clear"); + } + + // JH: changed to `npm run` + const buildCommand = "npm run build"; + console.log(`> ${buildCommand}`); + execSync(buildCommand, { + stdio: [0, 1, 2], + }); + + if (options.local) { + // JH: added change to dist dir + process.chdir("dist"); + + // JH: added alternate package.json and lerna.json in dist + const distLernaJson = `{ + "useWorkspaces": true, + "description": "This lerna.json exists to facilitate local registry (verdaccio) publishing for e2e tests and local testing", + "version": "0.0.0", + "ignoreChanges": [ + "**/__fixtures__/**", + "**/__tests__/**", + "**/*.md" + ] +} +`; + const distPackageJson = `{ + "private": true, + "description": "This package.json exists to facilitate local registry (verdaccio) publishing for e2e tests and local testing", + "workspaces": [ + "commands/*", + "core/*", + "utils/*" + ] +}`; + writeFileSync("./lerna.json", distLernaJson); + writeFileSync("./package.json", distPackageJson); + + // Force all projects to be not private + const projects = JSON.parse(execSync("npx lerna list --json --all").toString()); + for (const proj of projects) { + if (proj.private) { + console.log("Publishing private package locally:", proj.name); + const packageJsonPath = join(proj.location, "package.json"); + const original = JSON.parse(readFileSync(packageJsonPath, "utf-8")); + writeFileSync(packageJsonPath, JSON.stringify({ ...original, private: false })); + } + } + } + + const versionOptions = { + bump: options.version ? options.version : undefined, + conventionalCommits: true, + conventionalPrerelease: options.tag === "next", + preid: options.preid, + forcePublish: true, + createRelease: options.tag !== "next" ? "github" : undefined, + noChangelog: options.tag === "next", + tagVersionPrefix: "", + exact: true, + gitRemote: options.gitRemote, + gitTagVersion: options.tag !== "next", + message: "chore(misc): publish %v", + loglevel: options.loglevel ?? "info", + yes: false, + }; + + if (options.local) { + versionOptions.conventionalCommits = false; + delete versionOptions.createRelease; + versionOptions.gitTagVersion = false; + versionOptions.loglevel = options.loglevel ?? "error"; + versionOptions.yes = true; + versionOptions.bump = options.version ? options.version : "minor"; + } + + const lernaJsonPath = join(__dirname, "../lerna.json"); + let originalLernaJson: Buffer | undefined; + + if (options.local || options.tag === "next") { + originalLernaJson = readFileSync(lernaJsonPath); + } + if (options.local) { + /** + * Hide changes from Lerna + */ + const uncommittedFiles = execSync("git diff --name-only --relative HEAD .") + .toString() + .split("\n") + .filter((i) => i.length > 0) + .filter((f) => existsSync(f)); + const unhideFromGitIndex = hideFromGitIndex(uncommittedFiles); + + process.on("exit", unhideFromGitIndex); + process.on("SIGTERM", unhideFromGitIndex); + process.on("SIGINT", unhideFromGitIndex); + } + + const publishOptions: Record = { + gitReset: false, + distTag: options.tag, + }; + + if (!options.skipPublish) { + // JH: remove unneeded await + publish({ ...versionOptions, ...publishOptions }); + } else { + // JH: remove unneeded await + version(versionOptions); + console.warn("Not Publishing because --dryRun was passed"); + } + + if (originalLernaJson) { + writeFileSync(lernaJsonPath, originalLernaJson); + } +})(); + +async function parseArgs() { + const parsedArgs = + // JH: refactored to make it compatible with yargs 16, which lerna uses + await yargs + // JH: changed to `npm run` + .scriptName("npm run local-release") + .wrap(144) + // TODO: why is this showing as a type error in lerna but not nx + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + .strictOptions() + .version(false) + .command("$0 [version]", "This script is for publishing lerna both locally and publicly", (yargs) => { + // JH: refactored to make it compatible with yargs 16, which lerna uses + yargs.positional("version", { + type: "string", + description: "The version to publish. This does not need to be passed and can be inferred.", + }); + }) + .option("skipPublish", { + type: "boolean", + description: "Skips the actual publishing for testing out versioning", + }) + .option("clearLocalRegistry", { + type: "boolean", + description: + "Clear existing versions in the local registry so that you can republish the same version", + default: true, + }) + .option("local", { + type: "boolean", + description: "Publish lerna locally, not to actual NPM", + alias: "l", + default: true, + }) + .option("force", { + type: "boolean", + description: "Don't use this unless you really know what it does", + hidden: true, + }) + .option("gitRemote", { + type: "string", + description: "Alternate git remote name to publish tags to (useful for testing changelog)", + default: "origin", + }) + .option("tag", { + type: "string", + description: "NPM Tag", + choices: ["next", "latest", "previous"], + }) + .option("preid", { + type: "string", + description: "The kind of prerelease tag. (1.0.0-[preid].0)", + choices: ["alpha", "beta", "rc"], + default: "beta", + }) + .option("loglevel", { + type: "string", + description: "Log Level", + choices: ["error", "info", "debug"], + }) + .example( + "$0", + `By default, this will locally publish a minor version bump as latest. Great for local development. Most developers should only need this.` + ) + .example( + "$0 --local false", + `This will really publish a new beta version to npm as next. The version is inferred by the changes.` + ) + .example( + "$0 --local false --tag latest", + `This will really publish a new stable version to npm as latest, tag, commit, push, and create a release on GitHub.` + ) + .example("$0 --local false --preid rc", `This will really publish a new rc version to npm as next.`) + .group(["local", "clearLocalRegistry"], "Local Publishing Options for most developers") + .group(["preid", "tag", "gitRemote", "force"], "Real Publishing Options for actually publishing to NPM") + .check((args) => { + const registry = getRegistry(); + const registryIsLocalhost = registry.hostname === "localhost"; + if (!args.local) { + if (!process.env.GH_TOKEN) { + throw new Error("process.env.GH_TOKEN is not set"); + } + if (!args.force && registryIsLocalhost) { + throw new Error( + // JH: changed to `npm run` + 'Registry is still set to localhost! Run "npm run local-registry disable" or pass --force' + ); + } + } else { + if (!args.force && !registryIsLocalhost) { + throw new Error("--local was passed and registry is not localhost"); + } + } + + return true; + }) + .parse(); + + parsedArgs.tag ??= parsedArgs.local ? "latest" : "next"; + + return parsedArgs; +} + +function getRegistry() { + return new URL(execSync("npm config get registry").toString().trim()); +} diff --git a/scripts/tsconfig.e2e.json b/scripts/tsconfig.e2e.json new file mode 100644 index 0000000000..dab6bb49d7 --- /dev/null +++ b/scripts/tsconfig.e2e.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "outDir": "../build/e2e-out", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["**/*.ts"] +} diff --git a/scripts/tsconfig.scripts.json b/scripts/tsconfig.scripts.json new file mode 100644 index 0000000000..522adc8e78 --- /dev/null +++ b/scripts/tsconfig.scripts.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "outDir": "../scripts/tools-out", + "module": "commonjs", + "types": ["node"] + }, + "include": ["**/*.ts"] +} diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000000..479f0473a0 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,25 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "rootDir": ".", + "sourceMap": true, + "declaration": false, + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": true, + "target": "ES2021", + "module": "esnext", + "lib": ["ES2021"], + "skipLibCheck": true, + "skipDefaultLibCheck": true, + "baseUrl": ".", + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "paths": { + "@lerna/e2e-utils": ["libs/e2e-utils/src/index.ts"], + "@lerna/nx-plugin": ["libs/nx-plugin/src/index.ts"] + } + }, + "exclude": ["node_modules", "tmp"] +} diff --git a/utils/check-working-tree/CHANGELOG.md b/utils/check-working-tree/CHANGELOG.md index 4e73a6db96..b16c8e81d7 100644 --- a/utils/check-working-tree/CHANGELOG.md +++ b/utils/check-working-tree/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/check-working-tree + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/check-working-tree diff --git a/utils/check-working-tree/package.json b/utils/check-working-tree/package.json index ebb3eaa288..5d9a428a07 100644 --- a/utils/check-working-tree/package.json +++ b/utils/check-working-tree/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/check-working-tree", - "version": "6.0.3", + "version": "6.1.0", "description": "Check git working tree status and error appropriately", "keywords": [ "lerna", diff --git a/utils/collect-uncommitted/CHANGELOG.md b/utils/collect-uncommitted/CHANGELOG.md index e48c5b246e..826713b6a0 100644 --- a/utils/collect-uncommitted/CHANGELOG.md +++ b/utils/collect-uncommitted/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/collect-uncommitted + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/collect-uncommitted diff --git a/utils/collect-uncommitted/lib/collect-uncommitted.js b/utils/collect-uncommitted/lib/collect-uncommitted.js index 2d3792dd06..4791705c3d 100644 --- a/utils/collect-uncommitted/lib/collect-uncommitted.js +++ b/utils/collect-uncommitted/lib/collect-uncommitted.js @@ -13,7 +13,7 @@ module.exports.collectUncommittedSync = collectUncommittedSync; * @property {typeof npmlog} [log] */ -const maybeColorize = (colorize) => (s) => (s !== " " ? colorize(s) : s); +const maybeColorize = (colorize) => (s) => s !== " " ? colorize(s) : s; const cRed = maybeColorize(chalk.red); const cGreen = maybeColorize(chalk.green); diff --git a/utils/collect-uncommitted/package.json b/utils/collect-uncommitted/package.json index 497eec0c89..9b8ff8daa2 100644 --- a/utils/collect-uncommitted/package.json +++ b/utils/collect-uncommitted/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/collect-uncommitted", - "version": "6.0.3", + "version": "6.1.0", "description": "Collect uncommitted changes to working tree for display in error messages", "keywords": [ "lerna", diff --git a/utils/collect-updates/CHANGELOG.md b/utils/collect-updates/CHANGELOG.md index 6c75dc843a..6eb5093168 100644 --- a/utils/collect-updates/CHANGELOG.md +++ b/utils/collect-updates/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/collect-updates + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/collect-updates diff --git a/utils/collect-updates/package.json b/utils/collect-updates/package.json index 22d3d5af40..9855aa01ba 100644 --- a/utils/collect-updates/package.json +++ b/utils/collect-updates/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/collect-updates", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/create-symlink/CHANGELOG.md b/utils/create-symlink/CHANGELOG.md index e718066c52..5d096d3641 100644 --- a/utils/create-symlink/CHANGELOG.md +++ b/utils/create-symlink/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/create-symlink + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/create-symlink diff --git a/utils/create-symlink/package.json b/utils/create-symlink/package.json index 629bc03108..33ef9cfcc7 100644 --- a/utils/create-symlink/package.json +++ b/utils/create-symlink/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/create-symlink", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/describe-ref/CHANGELOG.md b/utils/describe-ref/CHANGELOG.md index ea912d2942..544b186b30 100644 --- a/utils/describe-ref/CHANGELOG.md +++ b/utils/describe-ref/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/describe-ref + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/describe-ref diff --git a/utils/describe-ref/package.json b/utils/describe-ref/package.json index a8f693ebbb..919305f37b 100644 --- a/utils/describe-ref/package.json +++ b/utils/describe-ref/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/describe-ref", - "version": "6.0.3", + "version": "6.1.0", "description": "Parse git describe output for lerna-related tags", "keywords": [ "lerna", diff --git a/utils/filter-packages/CHANGELOG.md b/utils/filter-packages/CHANGELOG.md index c9469344bf..f0ee025774 100644 --- a/utils/filter-packages/CHANGELOG.md +++ b/utils/filter-packages/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/filter-packages + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/filter-packages diff --git a/utils/filter-packages/package.json b/utils/filter-packages/package.json index 0864665119..cecfe1d6ac 100644 --- a/utils/filter-packages/package.json +++ b/utils/filter-packages/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/filter-packages", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/get-npm-exec-opts/CHANGELOG.md b/utils/get-npm-exec-opts/CHANGELOG.md index 671c997e87..1481186d33 100644 --- a/utils/get-npm-exec-opts/CHANGELOG.md +++ b/utils/get-npm-exec-opts/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/get-npm-exec-opts + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/get-npm-exec-opts diff --git a/utils/get-npm-exec-opts/package.json b/utils/get-npm-exec-opts/package.json index 2e354e74e8..533858af44 100644 --- a/utils/get-npm-exec-opts/package.json +++ b/utils/get-npm-exec-opts/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/get-npm-exec-opts", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/get-packed/CHANGELOG.md b/utils/get-packed/CHANGELOG.md index d10fc4925d..edf73a3b5b 100644 --- a/utils/get-packed/CHANGELOG.md +++ b/utils/get-packed/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/get-packed + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/get-packed diff --git a/utils/get-packed/package.json b/utils/get-packed/package.json index 00cee88a52..7f887b6e3f 100644 --- a/utils/get-packed/package.json +++ b/utils/get-packed/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/get-packed", - "version": "6.0.3", + "version": "6.1.0", "description": "Read contents of package tarball created by npm pack", "keywords": [ "lerna", diff --git a/utils/github-client/CHANGELOG.md b/utils/github-client/CHANGELOG.md index b9d9bb2535..863602ee65 100644 --- a/utils/github-client/CHANGELOG.md +++ b/utils/github-client/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/github-client + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/github-client diff --git a/utils/github-client/__tests__/github-client.test.js b/utils/github-client/__tests__/github-client.test.js index 4d4659545b..20115ee0c6 100644 --- a/utils/github-client/__tests__/github-client.test.js +++ b/utils/github-client/__tests__/github-client.test.js @@ -10,10 +10,8 @@ const { createGitHubClient, parseGitRepo } = require("../lib/github-client"); childProcess.execSync.mockReturnValue("5.6.0"); describe("createGitHubClient", () => { - const oldEnv = Object.assign({}, process.env); - afterEach(() => { - process.env = oldEnv; + process.env = {}; }); it("errors if no GH_TOKEN env var", () => { diff --git a/utils/github-client/package.json b/utils/github-client/package.json index 225b73faf8..fa0d0ba1e4 100644 --- a/utils/github-client/package.json +++ b/utils/github-client/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/github-client", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/gitlab-client/CHANGELOG.md b/utils/gitlab-client/CHANGELOG.md index 60e0bf2352..4a56f1af30 100644 --- a/utils/gitlab-client/CHANGELOG.md +++ b/utils/gitlab-client/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://gitlab.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/gitlab-client + ## [6.0.3](https://gitlab.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/gitlab-client diff --git a/utils/gitlab-client/package.json b/utils/gitlab-client/package.json index 03bfc34371..ef70886233 100644 --- a/utils/gitlab-client/package.json +++ b/utils/gitlab-client/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/gitlab-client", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/has-npm-version/CHANGELOG.md b/utils/has-npm-version/CHANGELOG.md index 918b9be6a9..b3715a0a84 100644 --- a/utils/has-npm-version/CHANGELOG.md +++ b/utils/has-npm-version/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/has-npm-version + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/has-npm-version diff --git a/utils/has-npm-version/package.json b/utils/has-npm-version/package.json index 9c96bdb68e..39a8bc0e3a 100644 --- a/utils/has-npm-version/package.json +++ b/utils/has-npm-version/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/has-npm-version", - "version": "6.0.3", + "version": "6.1.0", "description": "Test if the current version of npm satisfies a given semver range", "keywords": [ "lerna", diff --git a/utils/listable/CHANGELOG.md b/utils/listable/CHANGELOG.md index 3bd8160055..07289bc8ed 100644 --- a/utils/listable/CHANGELOG.md +++ b/utils/listable/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/listable + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/listable diff --git a/utils/listable/package.json b/utils/listable/package.json index 887f7f6844..958ad8183d 100644 --- a/utils/listable/package.json +++ b/utils/listable/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/listable", - "version": "6.0.3", + "version": "6.1.0", "description": "Shared logic for listing package information", "keywords": [ "lerna", diff --git a/utils/log-packed/CHANGELOG.md b/utils/log-packed/CHANGELOG.md index 16889feff2..da0f4722b2 100644 --- a/utils/log-packed/CHANGELOG.md +++ b/utils/log-packed/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/log-packed + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/log-packed diff --git a/utils/log-packed/package.json b/utils/log-packed/package.json index f76a97b952..bb18436a55 100644 --- a/utils/log-packed/package.json +++ b/utils/log-packed/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/log-packed", - "version": "6.0.3", + "version": "6.1.0", "description": "Log the result of npm pack --json", "keywords": [ "lerna", diff --git a/utils/map-to-registry/CHANGELOG.md b/utils/map-to-registry/CHANGELOG.md index f22afee035..7cd1f9a266 100644 --- a/utils/map-to-registry/CHANGELOG.md +++ b/utils/map-to-registry/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/map-to-registry + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/map-to-registry diff --git a/utils/map-to-registry/package.json b/utils/map-to-registry/package.json index 14d270e54e..0da86047f0 100644 --- a/utils/map-to-registry/package.json +++ b/utils/map-to-registry/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/map-to-registry", - "version": "6.0.3", + "version": "6.1.0", "description": "Produce registry uri and auth of package name from npm config", "keywords": [ "lerna", diff --git a/utils/npm-conf/CHANGELOG.md b/utils/npm-conf/CHANGELOG.md index 27b114c439..6d92771a9a 100644 --- a/utils/npm-conf/CHANGELOG.md +++ b/utils/npm-conf/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/npm-conf + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/npm-conf diff --git a/utils/npm-conf/package.json b/utils/npm-conf/package.json index cbb96c7daf..b3d39c5625 100644 --- a/utils/npm-conf/package.json +++ b/utils/npm-conf/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/npm-conf", - "version": "6.0.3", + "version": "6.1.0", "description": "Vendored npm-conf with updates", "keywords": [ "lerna", diff --git a/utils/npm-dist-tag/CHANGELOG.md b/utils/npm-dist-tag/CHANGELOG.md index 0d8eeafc65..f6c21f791e 100644 --- a/utils/npm-dist-tag/CHANGELOG.md +++ b/utils/npm-dist-tag/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/npm-dist-tag + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/npm-dist-tag diff --git a/utils/npm-dist-tag/package.json b/utils/npm-dist-tag/package.json index f119a4121a..d6633a1c9b 100644 --- a/utils/npm-dist-tag/package.json +++ b/utils/npm-dist-tag/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/npm-dist-tag", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/npm-install/CHANGELOG.md b/utils/npm-install/CHANGELOG.md index 7811b723c0..77ee8cce5d 100644 --- a/utils/npm-install/CHANGELOG.md +++ b/utils/npm-install/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/npm-install + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/npm-install diff --git a/utils/npm-install/package.json b/utils/npm-install/package.json index a9dea69557..7f2d5a0a41 100644 --- a/utils/npm-install/package.json +++ b/utils/npm-install/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/npm-install", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/npm-publish/CHANGELOG.md b/utils/npm-publish/CHANGELOG.md index a251931287..9220abdf7d 100644 --- a/utils/npm-publish/CHANGELOG.md +++ b/utils/npm-publish/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/npm-publish + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/npm-publish diff --git a/utils/npm-publish/package.json b/utils/npm-publish/package.json index ae5f0aad05..620684d732 100644 --- a/utils/npm-publish/package.json +++ b/utils/npm-publish/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/npm-publish", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/npm-run-script/CHANGELOG.md b/utils/npm-run-script/CHANGELOG.md index 091a1242fb..a9ed91a98e 100644 --- a/utils/npm-run-script/CHANGELOG.md +++ b/utils/npm-run-script/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/npm-run-script + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/npm-run-script diff --git a/utils/npm-run-script/package.json b/utils/npm-run-script/package.json index ae41e37a2e..f355c44b9a 100644 --- a/utils/npm-run-script/package.json +++ b/utils/npm-run-script/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/npm-run-script", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/output/CHANGELOG.md b/utils/output/CHANGELOG.md index a5df90ed62..628405b40a 100644 --- a/utils/output/CHANGELOG.md +++ b/utils/output/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/output + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/output diff --git a/utils/output/package.json b/utils/output/package.json index bbed8fa260..c4ad549d9b 100644 --- a/utils/output/package.json +++ b/utils/output/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/output", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/pack-directory/CHANGELOG.md b/utils/pack-directory/CHANGELOG.md index 6d1e8e8889..067834f4ad 100644 --- a/utils/pack-directory/CHANGELOG.md +++ b/utils/pack-directory/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/pack-directory + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/pack-directory diff --git a/utils/pack-directory/package.json b/utils/pack-directory/package.json index 624a1c7356..60fdfb50d2 100644 --- a/utils/pack-directory/package.json +++ b/utils/pack-directory/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/pack-directory", - "version": "6.0.3", + "version": "6.1.0", "description": "Pack a directory into an npm package tarball", "keywords": [ "lerna", diff --git a/utils/prerelease-id-from-version/CHANGELOG.md b/utils/prerelease-id-from-version/CHANGELOG.md index e5e31d1328..e93f934da9 100644 --- a/utils/prerelease-id-from-version/CHANGELOG.md +++ b/utils/prerelease-id-from-version/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/prerelease-id-from-version + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/prerelease-id-from-version diff --git a/utils/prerelease-id-from-version/package.json b/utils/prerelease-id-from-version/package.json index c7ab5601a0..08dc95ba45 100644 --- a/utils/prerelease-id-from-version/package.json +++ b/utils/prerelease-id-from-version/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/prerelease-id-from-version", - "version": "6.0.3", + "version": "6.1.0", "description": "Get the prerelease ID from a version string", "keywords": [ "lerna", diff --git a/utils/profiler/CHANGELOG.md b/utils/profiler/CHANGELOG.md index 7c4a634352..0d9cfa095e 100644 --- a/utils/profiler/CHANGELOG.md +++ b/utils/profiler/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/profiler + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/profiler diff --git a/utils/profiler/package.json b/utils/profiler/package.json index 708fddd746..71642606cb 100644 --- a/utils/profiler/package.json +++ b/utils/profiler/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/profiler", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/pulse-till-done/CHANGELOG.md b/utils/pulse-till-done/CHANGELOG.md index 034dae2f89..1fc81f2c09 100644 --- a/utils/pulse-till-done/CHANGELOG.md +++ b/utils/pulse-till-done/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/pulse-till-done + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/pulse-till-done diff --git a/utils/pulse-till-done/package.json b/utils/pulse-till-done/package.json index 59cf43a08a..70b76c75ed 100644 --- a/utils/pulse-till-done/package.json +++ b/utils/pulse-till-done/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/pulse-till-done", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/query-graph/CHANGELOG.md b/utils/query-graph/CHANGELOG.md index 777c1716e5..625e72cbd1 100644 --- a/utils/query-graph/CHANGELOG.md +++ b/utils/query-graph/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/query-graph + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/query-graph diff --git a/utils/query-graph/package.json b/utils/query-graph/package.json index 591f6c2df5..7bfe486aa7 100644 --- a/utils/query-graph/package.json +++ b/utils/query-graph/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/query-graph", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/resolve-symlink/CHANGELOG.md b/utils/resolve-symlink/CHANGELOG.md index 49a506ac13..85554354e1 100644 --- a/utils/resolve-symlink/CHANGELOG.md +++ b/utils/resolve-symlink/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/resolve-symlink + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/resolve-symlink diff --git a/utils/resolve-symlink/package.json b/utils/resolve-symlink/package.json index c94d332afb..551af16d81 100644 --- a/utils/resolve-symlink/package.json +++ b/utils/resolve-symlink/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/resolve-symlink", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/rimraf-dir/CHANGELOG.md b/utils/rimraf-dir/CHANGELOG.md index 1babe0a7f4..12f5628d97 100644 --- a/utils/rimraf-dir/CHANGELOG.md +++ b/utils/rimraf-dir/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/rimraf-dir + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/rimraf-dir diff --git a/utils/rimraf-dir/package.json b/utils/rimraf-dir/package.json index de0a219394..1bafc7bd2c 100644 --- a/utils/rimraf-dir/package.json +++ b/utils/rimraf-dir/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/rimraf-dir", - "version": "6.0.3", + "version": "6.1.0", "description": "Run rimraf on a directory in a subprocess to hack around slowness", "keywords": [ "lerna", diff --git a/utils/run-lifecycle/CHANGELOG.md b/utils/run-lifecycle/CHANGELOG.md index c248ba31fc..d2c6c9bad7 100644 --- a/utils/run-lifecycle/CHANGELOG.md +++ b/utils/run-lifecycle/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/run-lifecycle + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/run-lifecycle diff --git a/utils/run-lifecycle/package.json b/utils/run-lifecycle/package.json index f3643e5f0f..586dd06967 100644 --- a/utils/run-lifecycle/package.json +++ b/utils/run-lifecycle/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/run-lifecycle", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/run-topologically/CHANGELOG.md b/utils/run-topologically/CHANGELOG.md index b636fc8475..fa2fd77d40 100644 --- a/utils/run-topologically/CHANGELOG.md +++ b/utils/run-topologically/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/run-topologically + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/run-topologically diff --git a/utils/run-topologically/package.json b/utils/run-topologically/package.json index 392ad2b26e..2ec3b8d5e6 100644 --- a/utils/run-topologically/package.json +++ b/utils/run-topologically/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/run-topologically", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/symlink-binary/CHANGELOG.md b/utils/symlink-binary/CHANGELOG.md index 97ab6deda4..dd3e4f4eba 100644 --- a/utils/symlink-binary/CHANGELOG.md +++ b/utils/symlink-binary/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/symlink-binary + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/symlink-binary diff --git a/utils/symlink-binary/package.json b/utils/symlink-binary/package.json index 2c6ee951bb..34379920fe 100644 --- a/utils/symlink-binary/package.json +++ b/utils/symlink-binary/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/symlink-binary", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/symlink-dependencies/CHANGELOG.md b/utils/symlink-dependencies/CHANGELOG.md index 4333c3d466..6e98b71c0b 100644 --- a/utils/symlink-dependencies/CHANGELOG.md +++ b/utils/symlink-dependencies/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/symlink-dependencies + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/symlink-dependencies diff --git a/utils/symlink-dependencies/package.json b/utils/symlink-dependencies/package.json index d8a568be30..5ce4b38457 100644 --- a/utils/symlink-dependencies/package.json +++ b/utils/symlink-dependencies/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/symlink-dependencies", - "version": "6.0.3", + "version": "6.1.0", "description": "Lerna's internal symlinking tool", "keywords": [ "lerna", diff --git a/utils/temp-write/CHANGELOG.md b/utils/temp-write/CHANGELOG.md index 876abe1526..c2bfce0d02 100644 --- a/utils/temp-write/CHANGELOG.md +++ b/utils/temp-write/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/temp-write + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/temp-write diff --git a/utils/temp-write/package.json b/utils/temp-write/package.json index 7d931da4a1..efe1b9e256 100644 --- a/utils/temp-write/package.json +++ b/utils/temp-write/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/temp-write", - "version": "6.0.3", + "version": "6.1.0", "description": "Write string/buffer/stream to a random temp file", "homepage": "https://lerna.js.org", "license": "MIT", diff --git a/utils/timer/CHANGELOG.md b/utils/timer/CHANGELOG.md index f23d43dd08..dfbfe0cc68 100644 --- a/utils/timer/CHANGELOG.md +++ b/utils/timer/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/timer + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/timer diff --git a/utils/timer/package.json b/utils/timer/package.json index 34fe4b6e7d..09d92fec56 100644 --- a/utils/timer/package.json +++ b/utils/timer/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/timer", - "version": "6.0.3", + "version": "6.1.0", "description": "An internal Lerna tool", "keywords": [ "lerna", diff --git a/utils/write-log-file/CHANGELOG.md b/utils/write-log-file/CHANGELOG.md index fc8360c6f1..902153ea20 100644 --- a/utils/write-log-file/CHANGELOG.md +++ b/utils/write-log-file/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [6.1.0](https://github.com/lerna/lerna/compare/v6.0.3...v6.1.0) (2022-11-29) + +**Note:** Version bump only for package @lerna/write-log-file + ## [6.0.3](https://github.com/lerna/lerna/compare/v6.0.2...v6.0.3) (2022-11-07) **Note:** Version bump only for package @lerna/write-log-file diff --git a/utils/write-log-file/package.json b/utils/write-log-file/package.json index a271a88ba1..682777a87c 100644 --- a/utils/write-log-file/package.json +++ b/utils/write-log-file/package.json @@ -1,6 +1,6 @@ { "name": "@lerna/write-log-file", - "version": "6.0.3", + "version": "6.1.0", "description": "What lerna uses to dump logs", "keywords": [ "lerna", diff --git a/website/docs/concepts/alternate-bootstrapping-methods.md b/website/docs/concepts/alternate-bootstrapping-methods.md index 93b016c727..4542cfbc93 100644 --- a/website/docs/concepts/alternate-bootstrapping-methods.md +++ b/website/docs/concepts/alternate-bootstrapping-methods.md @@ -1,12 +1,18 @@ --- id: alternate-bootstrapping-methods -title: Alternate Bootstrapping Methods +title: "Legacy: Alternate Bootstrapping Methods" type: explainer --- -# Alternate Bootstrapping Methods +# Legacy: Alternate Bootstrapping Methods -If you can't [use your package manager's built in bootstrapping support](../features/bootstrap) for some reason, Lerna can handle the bootstrapping for you. There are several ways Lerna can set up your monorepo such that an app (`remixapp`) can find libraries in the same repo (`header` and `footer`), and one of them is to make it such that the `header` and `footer` end up in the `node_modules` folder of `remixapp` (or a different folder at the root)--that's what `lerna bootstrap` (without `--use-workspaces`) does. +:::info + +NOTE: Lerna's legacy package management capabilities are being deprecated in Lerna v7, [please see here for full background](../features/legacy-package-management) + +::: + +There are several ways Lerna can set up your monorepo such that an app (`remixapp`) can find libraries in the same repo (`header` and `footer`), and one of them is to make it such that the `header` and `footer` end up in the `node_modules` folder of `remixapp` (or a different folder at the root)--that's what `lerna bootstrap` (without `--use-workspaces`) does. Running `lerna bootstrap` will invoke `npm install` in each of the packages, and will link local package such that the resulting structure will look like this. diff --git a/website/docs/concepts/hoisting.md b/website/docs/concepts/hoisting.md index 52d6885d9d..9005cd12d6 100644 --- a/website/docs/concepts/hoisting.md +++ b/website/docs/concepts/hoisting.md @@ -1,10 +1,17 @@ --- id: hoisting -title: Hoisting +title: "Legacy: Hoisting" type: explainer --- -# Hoisting +# Legacy: Hoisting + +:::info + +NOTE: Lerna's legacy package management capabilities are being deprecated in Lerna v7, [please see here for full background](../features/legacy-package-management) + +::: + ```bash lerna bootstrap --hoist diff --git a/website/docs/features/bootstrap.md b/website/docs/features/bootstrap.md deleted file mode 100644 index ace7b21f92..0000000000 --- a/website/docs/features/bootstrap.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -id: bootstrap -title: Bootstrap -type: recipe ---- - -# Bootstrap - -Lerna links different projects within the repo so they can import each other without having to publish anything to NPM. To show how Lerna does it, we will take [this repository](https://github.com/lerna/getting-started-example) as an example. - -The repo contains three packages or projects: - -- `header` (a library of React components) -- `footer` (a library of React components) -- `remixapp` (an app written using the Remix framework which depends on both `header` and `footer`) - -The Remix app imports the `header` and `footer` libraries as follows: - -```typescript jsx title="packages/remixapp/app/routes/index.tsx" -import { Header } from "header"; -import { Footer } from "footer"; - -export default function Index() { - return ( - <> -
-
Content!
-