From c24264352a294bc4eaa61e36cd78d076575c0675 Mon Sep 17 00:00:00 2001 From: Willie Ruemmele Date: Fri, 17 Mar 2023 16:13:52 -0600 Subject: [PATCH] test: working through UTs * test: working through UTs * test: all UTs passing when run individually * test: attempt to remove sandbox - before * test: move TestContext setup into describes * chore: renable UTs in GHA * test: remove sinon.createSandbox calls * test: use 3762.stubConfig instead of push -o * test: convert 1 ut to new style * feat: deprecate and remove migrated commands * refactor: devScripts update (#747) * chore: updates from devScripts * test: cheaper ci * fix(deps): bump all the deps * chore: lockfile dedupe --------- Co-authored-by: mshanemc * fix(deps): bump jsforce from 2.0.0-beta.19 to 2.0.0-beta.20 (#745) Bumps [jsforce](https://github.com/jsforce/jsforce) from 2.0.0-beta.19 to 2.0.0-beta.20. - [Release notes](https://github.com/jsforce/jsforce/releases) - [Changelog](https://github.com/jsforce/jsforce/blob/master/CHANGELOG.md) - [Commits](https://github.com/jsforce/jsforce/commits) --- updated-dependencies: - dependency-name: jsforce dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(release): 2.5.5 [skip ci] * chore(dev-deps): bump @typescript-eslint/parser from 5.49.0 to 5.54.0 (#753) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.49.0 to 5.54.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.54.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(dev-deps): bump prettier from 2.8.3 to 2.8.4 (#752) Bumps [prettier](https://github.com/prettier/prettier) from 2.8.3 to 2.8.4. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/2.8.3...2.8.4) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(dev-deps): bump @oclif/plugin-help from 5.2.2 to 5.2.6 (#751) Bumps [@oclif/plugin-help](https://github.com/oclif/plugin-help) from 5.2.2 to 5.2.6. - [Release notes](https://github.com/oclif/plugin-help/releases) - [Changelog](https://github.com/oclif/plugin-help/blob/main/CHANGELOG.md) - [Commits](https://github.com/oclif/plugin-help/compare/5.2.2...5.2.6) --- updated-dependencies: - dependency-name: "@oclif/plugin-help" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * test: update tracking nuts for e-bikes changes * test: update tracking nuts for e-bikes changes * chore(dev-deps): bump @salesforce/plugin-templates from 55.1.0 to 55.4.4 (#750) Bumps [@salesforce/plugin-templates](https://github.com/salesforcecli/plugin-templates) from 55.1.0 to 55.4.4. - [Release notes](https://github.com/salesforcecli/plugin-templates/releases) - [Changelog](https://github.com/salesforcecli/plugin-templates/blob/main/CHANGELOG.md) - [Commits](https://github.com/salesforcecli/plugin-templates/commits/55.4.4) --- updated-dependencies: - dependency-name: "@salesforce/plugin-templates" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore: delete everything that's been moved to PDR * chore: deprecate commands, remove ones moved to PDR * feat: get types from sdr registry * feat: get types from sdr registry * test: only assert require properties * chore(release): 2.6.0 [skip ci] * chore(dev-deps): bump @salesforce/cli-plugins-testkit (#761) Bumps [@salesforce/cli-plugins-testkit](https://github.com/salesforcecli/cli-plugins-testkit) from 3.2.23 to 3.2.24. - [Release notes](https://github.com/salesforcecli/cli-plugins-testkit/releases) - [Changelog](https://github.com/salesforcecli/cli-plugins-testkit/blob/main/CHANGELOG.md) - [Commits](https://github.com/salesforcecli/cli-plugins-testkit/compare/3.2.23...3.2.24) --- updated-dependencies: - dependency-name: "@salesforce/cli-plugins-testkit" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump @sideway/formula in /test/nuts/nestedLWCProject (#763) Bumps [@sideway/formula](https://github.com/sideway/formula) from 3.0.0 to 3.0.1. - [Release notes](https://github.com/sideway/formula/releases) - [Commits](https://github.com/sideway/formula/compare/v3.0.0...v3.0.1) --- updated-dependencies: - dependency-name: "@sideway/formula" dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(dev-deps): bump @salesforce/plugin-info from 2.4.2 to 2.5.1 (#760) Bumps [@salesforce/plugin-info](https://github.com/salesforcecli/plugin-info) from 2.4.2 to 2.5.1. - [Release notes](https://github.com/salesforcecli/plugin-info/releases) - [Changelog](https://github.com/salesforcecli/plugin-info/blob/main/CHANGELOG.md) - [Commits](https://github.com/salesforcecli/plugin-info/compare/2.4.2...2.5.1) --- updated-dependencies: - dependency-name: "@salesforce/plugin-info" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(deps): bump @salesforce/source-deploy-retrieve from 7.11.0 to 7.11.3 (#759) Bumps [@salesforce/source-deploy-retrieve](https://github.com/forcedotcom/source-deploy-retrieve) from 7.11.0 to 7.11.3. - [Release notes](https://github.com/forcedotcom/source-deploy-retrieve/releases) - [Changelog](https://github.com/forcedotcom/source-deploy-retrieve/blob/main/CHANGELOG.md) - [Commits](https://github.com/forcedotcom/source-deploy-retrieve/compare/7.11.0...7.11.3) --- updated-dependencies: - dependency-name: "@salesforce/source-deploy-retrieve" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(release): 2.6.1 [skip ci] * fix(deps): bump @salesforce/source-tracking from 2.2.22 to 2.2.24 (#764) Bumps [@salesforce/source-tracking](https://github.com/forcedotcom/source-tracking) from 2.2.22 to 2.2.24. - [Release notes](https://github.com/forcedotcom/source-tracking/releases) - [Changelog](https://github.com/forcedotcom/source-tracking/blob/main/CHANGELOG.md) - [Commits](https://github.com/forcedotcom/source-tracking/compare/2.2.22...2.2.24) --- updated-dependencies: - dependency-name: "@salesforce/source-tracking" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(release): 2.6.2 [skip ci] * feat: verbose deploys without progress bar update with each poll (#757) * chore(release): 2.7.0 [skip ci] * feat: remove force:source:open command, now in plugin-org * feat: remove force:source:open command, now in plugin-org * chore: move mdapi:describemetadata and mdapi:listmetadata to plugin-org --------- Co-authored-by: mshanemc * chore(release): 2.8.0 [skip ci] * test: align tests with pjson * test: there are no delete nuts * test: specify cli for manifest generation * test: unskip a test * test: use sfdx for convert * test: mock project because cwd --------- Signed-off-by: dependabot[bot] Co-authored-by: svc-cli-bot <113140650+svc-cli-bot@users.noreply.github.com> Co-authored-by: mshanemc Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: svc-cli-bot Co-authored-by: Steve Hetzel * refactor: move deprecation warnings to messages * feat: remove beta aliases --------- Signed-off-by: dependabot[bot] Co-authored-by: mshanemc Co-authored-by: svc-cli-bot <113140650+svc-cli-bot@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: svc-cli-bot Co-authored-by: Steve Hetzel --- .github/workflows/test.yml | 23 +- CHANGELOG.md | 720 +++--------- command-snapshot.json | 83 +- messages/cancel.md | 4 + messages/convert.md | 60 - messages/create.md | 61 - messages/delete.md | 118 -- messages/deploy.md | 4 + messages/ignored_list.md | 4 + messages/md.cancel.md | 4 + messages/md.convert.md | 58 - messages/md.deploy.md | 4 + messages/md.deployreport.md | 4 + messages/md.retrieve.md | 4 + messages/pull.md | 4 + messages/push.md | 4 + messages/report.md | 4 + messages/retrieve.md | 4 + messages/status.md | 4 + messages/tracking.md | 31 - package.json | 218 +++- schemas/force-source-convert.json | 16 - schemas/force-source-delete.json | 610 ---------- schemas/force-source-manifest-create.json | 19 - schemas/force-source-tracking-clear.json | 19 - schemas/force-source-tracking-reset.json | 19 - src/commands/force/mdapi/convert.ts | 176 --- src/commands/force/mdapi/deploy.ts | 7 +- src/commands/force/mdapi/deploy/cancel.ts | 7 + src/commands/force/mdapi/deploy/report.ts | 9 +- src/commands/force/mdapi/retrieve.ts | 8 +- src/commands/force/mdapi/retrieve/report.ts | 2 +- src/commands/force/source/convert.ts | 156 --- src/commands/force/source/delete.ts | 412 ------- src/commands/force/source/deploy.ts | 6 + src/commands/force/source/deploy/cancel.ts | 7 +- src/commands/force/source/deploy/report.ts | 8 +- src/commands/force/source/ignored/list.ts | 7 +- src/commands/force/source/manifest/create.ts | 148 --- src/commands/force/source/pull.ts | 9 +- src/commands/force/source/push.ts | 7 +- src/commands/force/source/retrieve.ts | 18 +- src/commands/force/source/status.ts | 8 +- src/commands/force/source/tracking/clear.ts | 64 - src/commands/force/source/tracking/reset.ts | 83 -- src/formatters/convertResultFormatter.ts | 43 - .../deployProgressStatusFormatter.ts | 14 +- src/formatters/deployResultFormatter.ts | 15 +- .../mdapi/convertResultFormatter.ts | 78 -- src/formatters/retrieveResultFormatter.ts | 2 + .../source/deleteResultFormatter.ts | 87 -- src/stash.ts | 1 - test/commands/mdapi/cancel.test.ts | 135 +-- test/commands/mdapi/convert.test.ts | 275 ----- test/commands/mdapi/retrieve.test.ts | 70 +- test/commands/mdapi/retrieveReport.test.ts | 63 +- test/commands/source/cancel.test.ts | 67 +- test/commands/source/convert.test.ts | 165 --- test/commands/source/delete.test.ts | 247 ---- test/commands/source/deploy.test.ts | 66 +- test/commands/source/deployCommand.test.ts | 20 +- .../source/progressBarFormatter.test.ts | 9 +- test/commands/source/report.test.ts | 95 +- test/commands/source/retrieve.test.ts | 112 +- test/commands/source/sourceCommand.test.ts | 70 -- test/commands/source/testConsts.ts | 70 -- .../deployProgressStatusFormatter.ts | 70 ++ test/formatters/deployResultFormatter.test.ts | 46 +- .../mdDeployResultFormatter.test.ts | 39 +- test/formatters/pullFormatter.test.ts | 25 +- test/formatters/pushResultFormatter.test.ts | 36 +- .../retrieveResultFormatter.test.ts | 29 +- test/formatters/statusResultFormatter.test.ts | 19 +- test/hooks/diagnostics.test.ts | 3 +- test/nuts/REST/deploy.mpd.nut.ts | 4 +- test/nuts/REST/deploy.nut.ts | 4 +- test/nuts/create.nut.ts | 115 -- test/nuts/delete.nut.ts | 240 ---- test/nuts/deployDestructive.nut.ts | 2 + test/nuts/folderTypes.nut.ts | 14 +- test/nuts/mdapi.nut.ts | 116 +- test/nuts/nestedLWCProject/yarn.lock | 6 +- test/nuts/partialBundleDelete.nut.ts | 14 +- test/nuts/seeds/convert.seed.ts | 182 --- test/nuts/seeds/deploy.manifest.seed.ts | 4 +- test/nuts/seeds/retrieve.manifest.seed.ts | 4 +- test/nuts/shared/cliForManifestCreate.ts | 10 + test/nuts/territory2.nut.ts | 3 +- test/nuts/trackingCommands/consts.ts | 2 +- .../deployRetrieveDelete.nut.ts | 20 - test/nuts/trackingCommands/resetClear.nut.ts | 158 --- test/nuts/translation.nut.ts | 5 +- yarn.lock | 1045 +++++------------ 93 files changed, 1241 insertions(+), 5923 deletions(-) delete mode 100644 messages/convert.md delete mode 100644 messages/create.md delete mode 100644 messages/delete.md delete mode 100644 messages/md.convert.md delete mode 100644 schemas/force-source-convert.json delete mode 100644 schemas/force-source-delete.json delete mode 100644 schemas/force-source-manifest-create.json delete mode 100644 schemas/force-source-tracking-clear.json delete mode 100644 schemas/force-source-tracking-reset.json delete mode 100644 src/commands/force/mdapi/convert.ts delete mode 100644 src/commands/force/source/convert.ts delete mode 100644 src/commands/force/source/delete.ts delete mode 100644 src/commands/force/source/manifest/create.ts delete mode 100644 src/commands/force/source/tracking/clear.ts delete mode 100644 src/commands/force/source/tracking/reset.ts delete mode 100644 src/formatters/convertResultFormatter.ts delete mode 100644 src/formatters/mdapi/convertResultFormatter.ts delete mode 100644 src/formatters/source/deleteResultFormatter.ts delete mode 100644 test/commands/mdapi/convert.test.ts delete mode 100644 test/commands/source/convert.test.ts delete mode 100644 test/commands/source/delete.test.ts delete mode 100644 test/commands/source/sourceCommand.test.ts create mode 100644 test/formatters/deployProgressStatusFormatter.ts delete mode 100644 test/nuts/create.nut.ts delete mode 100644 test/nuts/delete.nut.ts delete mode 100644 test/nuts/seeds/convert.seed.ts create mode 100644 test/nuts/shared/cliForManifestCreate.ts delete mode 100644 test/nuts/trackingCommands/resetClear.nut.ts diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0912539cd..73c9009c1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,32 +8,29 @@ jobs: yarn-lockfile-check: uses: salesforcecli/github-workflows/.github/workflows/lockFileCheck.yml@main # Since the Windows unit tests take much longer, we run the linux unit tests first and then run the windows unit tests in parallel with NUTs - # linux-unit-tests: - # needs: yarn-lockfile-check - # uses: salesforcecli/github-workflows/.github/workflows/unitTestsLinux.yml@main - # windows-unit-tests: - # needs: linux-unit-tests - # uses: salesforcecli/github-workflows/.github/workflows/unitTestsWindows.yml@main + linux-unit-tests: + needs: yarn-lockfile-check + uses: salesforcecli/github-workflows/.github/workflows/unitTestsLinux.yml@main + windows-unit-tests: + needs: linux-unit-tests + uses: salesforcecli/github-workflows/.github/workflows/unitTestsWindows.yml@main nuts: - # needs: linux-unit-tests + needs: linux-unit-tests uses: salesforcecli/github-workflows/.github/workflows/nut.yml@main secrets: inherit strategy: matrix: - os: [ubuntu-20-8core, windows-2022-16core] + os: [ubuntu-latest, windows-latest] command: - - 'yarn test:nuts:convert' - 'yarn test:nuts:commands:other' - - 'yarn test:nuts:delete' - 'yarn test:nuts:deploy' - 'yarn test:nuts:deploy:async' + - 'yarn test:nuts:deploy:destructive' - 'yarn test:nuts:deploy:rest' - - 'yarn test:nuts:manifest:create' + - 'yarn test:nuts:mdapi' - 'yarn test:nuts:retrieve' - 'yarn test:nuts:specialTypes' - - 'yarn test:nuts:deploy:destructive' - 'yarn test:nuts:tracking' - - 'yarn test:nuts:mdapi' fail-fast: false with: os: ${{ matrix.os }} diff --git a/CHANGELOG.md b/CHANGELOG.md index cb791ade8..03f84d887 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,1232 +1,840 @@ -## [2.5.4](https://github.com/salesforcecli/plugin-source/compare/2.5.3...2.5.4) (2023-02-18) - +# [2.8.0](https://github.com/salesforcecli/plugin-source/compare/2.7.0...2.8.0) (2023-03-15) -### Bug Fixes +### Features -* **deps:** bump open from 8.4.0 to 8.4.1 ([#736](https://github.com/salesforcecli/plugin-source/issues/736)) ([d0e1f35](https://github.com/salesforcecli/plugin-source/commit/d0e1f3504b3b5d4ac51504881e52fec2dbd3fcea)) +- remove force:source:open command, now in plugin-org ([8c269db](https://github.com/salesforcecli/plugin-source/commit/8c269dbc755870eec4e7ac66b53604a818035f9f)) +# [2.7.0](https://github.com/salesforcecli/plugin-source/compare/2.6.2...2.7.0) (2023-03-13) +### Features -## [2.5.3](https://github.com/salesforcecli/plugin-source/compare/2.5.2...2.5.3) (2023-02-11) +- verbose deploys without progress bar update with each poll ([#757](https://github.com/salesforcecli/plugin-source/issues/757)) ([0826a83](https://github.com/salesforcecli/plugin-source/commit/0826a83546952917de91f4b9a5a650e151d62aca)) +## [2.6.2](https://github.com/salesforcecli/plugin-source/compare/2.6.1...2.6.2) (2023-03-12) ### Bug Fixes -* **deps:** bump @salesforce/command from 5.2.35 to 5.3.0 ([#732](https://github.com/salesforcecli/plugin-source/issues/732)) ([657dbbb](https://github.com/salesforcecli/plugin-source/commit/657dbbb0afdb32a498694d8f0b112fb26206f7f7)) - - - -## [2.5.2](https://github.com/salesforcecli/plugin-source/compare/2.5.1...2.5.2) (2023-02-09) +- **deps:** bump @salesforce/source-tracking from 2.2.22 to 2.2.24 ([#764](https://github.com/salesforcecli/plugin-source/issues/764)) ([e493d9d](https://github.com/salesforcecli/plugin-source/commit/e493d9de576619fea9cd442639a707149425b69c)) +## [2.6.1](https://github.com/salesforcecli/plugin-source/compare/2.6.0...2.6.1) (2023-03-12) ### Bug Fixes -* oclif topic description updates ([#706](https://github.com/salesforcecli/plugin-source/issues/706)) ([d925605](https://github.com/salesforcecli/plugin-source/commit/d9256055e7cd72a5ac1ad92f9459e7ec961e1048)) +- **deps:** bump @salesforce/source-deploy-retrieve from 7.11.0 to 7.11.3 ([#759](https://github.com/salesforcecli/plugin-source/issues/759)) ([14bdf84](https://github.com/salesforcecli/plugin-source/commit/14bdf845f36d8dd26de6b86916faad5cc29d1530)) +# [2.6.0](https://github.com/salesforcecli/plugin-source/compare/2.5.5...2.6.0) (2023-03-10) +### Features -## [2.5.1](https://github.com/salesforcecli/plugin-source/compare/2.5.0...2.5.1) (2023-02-09) +- get types from sdr registry ([e3df9ce](https://github.com/salesforcecli/plugin-source/commit/e3df9ced569ca6c2d1b4e4710caf7833b2663ea2)) +## [2.5.5](https://github.com/salesforcecli/plugin-source/compare/2.5.4...2.5.5) (2023-02-28) ### Bug Fixes -* enhance partial bundle delete tests for forceignored files ([#728](https://github.com/salesforcecli/plugin-source/issues/728)) ([0dc9bd2](https://github.com/salesforcecli/plugin-source/commit/0dc9bd2ce47691184fdca6040c6d3d93152bfe3f)) +- **deps:** bump jsforce from 2.0.0-beta.19 to 2.0.0-beta.20 ([#745](https://github.com/salesforcecli/plugin-source/issues/745)) ([b637f68](https://github.com/salesforcecli/plugin-source/commit/b637f68cb3092ceae4f1bb65ddfc1fe67471ee31)) +## [2.5.4](https://github.com/salesforcecli/plugin-source/compare/2.5.3...2.5.4) (2023-02-18) +### Bug Fixes -# [2.5.0](https://github.com/salesforcecli/plugin-source/compare/2.4.3...2.5.0) (2023-02-08) +- **deps:** bump open from 8.4.0 to 8.4.1 ([#736](https://github.com/salesforcecli/plugin-source/issues/736)) ([d0e1f35](https://github.com/salesforcecli/plugin-source/commit/d0e1f3504b3b5d4ac51504881e52fec2dbd3fcea)) +## [2.5.3](https://github.com/salesforcecli/plugin-source/compare/2.5.2...2.5.3) (2023-02-11) -### Features +### Bug Fixes -* support for ExperiencePropertyType Bundle ([#727](https://github.com/salesforcecli/plugin-source/issues/727)) ([64d7059](https://github.com/salesforcecli/plugin-source/commit/64d70590f96d58d4a1589ecbbadb9bc5ad8848e3)) +- **deps:** bump @salesforce/command from 5.2.35 to 5.3.0 ([#732](https://github.com/salesforcecli/plugin-source/issues/732)) ([657dbbb](https://github.com/salesforcecli/plugin-source/commit/657dbbb0afdb32a498694d8f0b112fb26206f7f7)) +## [2.5.2](https://github.com/salesforcecli/plugin-source/compare/2.5.1...2.5.2) (2023-02-09) +### Bug Fixes -## [2.4.3](https://github.com/salesforcecli/plugin-source/compare/2.4.2...2.4.3) (2023-02-03) +- oclif topic description updates ([#706](https://github.com/salesforcecli/plugin-source/issues/706)) ([d925605](https://github.com/salesforcecli/plugin-source/commit/d9256055e7cd72a5ac1ad92f9459e7ec961e1048)) +## [2.5.1](https://github.com/salesforcecli/plugin-source/compare/2.5.0...2.5.1) (2023-02-09) ### Bug Fixes -* **deps:** bump @oclif/core from 2.0.7 to 2.0.8 ([#715](https://github.com/salesforcecli/plugin-source/issues/715)) ([58da09b](https://github.com/salesforcecli/plugin-source/commit/58da09b14f38041a6e3be5e15a6d8062b4fd93fb)) +- enhance partial bundle delete tests for forceignored files ([#728](https://github.com/salesforcecli/plugin-source/issues/728)) ([0dc9bd2](https://github.com/salesforcecli/plugin-source/commit/0dc9bd2ce47691184fdca6040c6d3d93152bfe3f)) +# [2.5.0](https://github.com/salesforcecli/plugin-source/compare/2.4.3...2.5.0) (2023-02-08) +### Features -## [2.4.2](https://github.com/salesforcecli/plugin-source/compare/2.4.1...2.4.2) (2023-02-03) +- support for ExperiencePropertyType Bundle ([#727](https://github.com/salesforcecli/plugin-source/issues/727)) ([64d7059](https://github.com/salesforcecli/plugin-source/commit/64d70590f96d58d4a1589ecbbadb9bc5ad8848e3)) +## [2.4.3](https://github.com/salesforcecli/plugin-source/compare/2.4.2...2.4.3) (2023-02-03) ### Bug Fixes -* **deps:** bump http-cache-semantics from 4.1.0 to 4.1.1 ([#718](https://github.com/salesforcecli/plugin-source/issues/718)) ([78013fd](https://github.com/salesforcecli/plugin-source/commit/78013fd9369c70d7212970c933f2820deb81fd4f)) +- **deps:** bump @oclif/core from 2.0.7 to 2.0.8 ([#715](https://github.com/salesforcecli/plugin-source/issues/715)) ([58da09b](https://github.com/salesforcecli/plugin-source/commit/58da09b14f38041a6e3be5e15a6d8062b4fd93fb)) +## [2.4.2](https://github.com/salesforcecli/plugin-source/compare/2.4.1...2.4.2) (2023-02-03) +### Bug Fixes -## [2.4.1](https://github.com/salesforcecli/plugin-source/compare/2.4.0...2.4.1) (2023-02-03) +- **deps:** bump http-cache-semantics from 4.1.0 to 4.1.1 ([#718](https://github.com/salesforcecli/plugin-source/issues/718)) ([78013fd](https://github.com/salesforcecli/plugin-source/commit/78013fd9369c70d7212970c933f2820deb81fd4f)) +## [2.4.1](https://github.com/salesforcecli/plugin-source/compare/2.4.0...2.4.1) (2023-02-03) ### Bug Fixes -* nut for handling forceignored files for partial bundle deletes ([#716](https://github.com/salesforcecli/plugin-source/issues/716)) ([f95be35](https://github.com/salesforcecli/plugin-source/commit/f95be35f330e292c6f5a9cafbbac4dd684c2cf2c)) - - +- nut for handling forceignored files for partial bundle deletes ([#716](https://github.com/salesforcecli/plugin-source/issues/716)) ([f95be35](https://github.com/salesforcecli/plugin-source/commit/f95be35f330e292c6f5a9cafbbac4dd684c2cf2c)) # [2.4.0](https://github.com/salesforcecli/plugin-source/compare/2.3.16...2.4.0) (2023-02-01) - ### Features -* use latest oclif/core ([#714](https://github.com/salesforcecli/plugin-source/issues/714)) ([520f5d6](https://github.com/salesforcecli/plugin-source/commit/520f5d67bdf23e8d4236020b19f0f24c174bb48d)) - - +- use latest oclif/core ([#714](https://github.com/salesforcecli/plugin-source/issues/714)) ([520f5d6](https://github.com/salesforcecli/plugin-source/commit/520f5d67bdf23e8d4236020b19f0f24c174bb48d)) ## [2.3.16](https://github.com/salesforcecli/plugin-source/compare/2.3.15...2.3.16) (2023-01-20) - ### Bug Fixes -* only listen to events once per package ([#698](https://github.com/salesforcecli/plugin-source/issues/698)) ([b53510c](https://github.com/salesforcecli/plugin-source/commit/b53510cc3bf9fe1089c193112be847bb109aa1e2)) - - +- only listen to events once per package ([#698](https://github.com/salesforcecli/plugin-source/issues/698)) ([b53510c](https://github.com/salesforcecli/plugin-source/commit/b53510cc3bf9fe1089c193112be847bb109aa1e2)) ## [2.3.15](https://github.com/salesforcecli/plugin-source/compare/2.3.14...2.3.15) (2023-01-19) - ### Bug Fixes -* include deleted files in FileResponses for retrieves ([#683](https://github.com/salesforcecli/plugin-source/issues/683)) ([f1b0c64](https://github.com/salesforcecli/plugin-source/commit/f1b0c64a3ec75bba48e0a552e53a78af5a4d9251)) - - +- include deleted files in FileResponses for retrieves ([#683](https://github.com/salesforcecli/plugin-source/issues/683)) ([f1b0c64](https://github.com/salesforcecli/plugin-source/commit/f1b0c64a3ec75bba48e0a552e53a78af5a4d9251)) ## [2.3.14](https://github.com/salesforcecli/plugin-source/compare/2.3.13...2.3.14) (2023-01-14) - ### Bug Fixes -* **deps:** bump @salesforce/source-deploy-retrieve from 7.5.22 to 7.7.0 ([#696](https://github.com/salesforcecli/plugin-source/issues/696)) ([998425c](https://github.com/salesforcecli/plugin-source/commit/998425c8ea3cfcfc0b91b7b6c217948bcc75336a)) - - +- **deps:** bump @salesforce/source-deploy-retrieve from 7.5.22 to 7.7.0 ([#696](https://github.com/salesforcecli/plugin-source/issues/696)) ([998425c](https://github.com/salesforcecli/plugin-source/commit/998425c8ea3cfcfc0b91b7b6c217948bcc75336a)) ## [2.3.13](https://github.com/salesforcecli/plugin-source/compare/2.3.12...2.3.13) (2023-01-14) - ### Bug Fixes -* **deps:** bump @salesforce/apex-node from 1.4.0 to 1.6.0 ([#695](https://github.com/salesforcecli/plugin-source/issues/695)) ([bcc0cd1](https://github.com/salesforcecli/plugin-source/commit/bcc0cd192ee27c23bbbca6f044927b435474d75a)) - - +- **deps:** bump @salesforce/apex-node from 1.4.0 to 1.6.0 ([#695](https://github.com/salesforcecli/plugin-source/issues/695)) ([bcc0cd1](https://github.com/salesforcecli/plugin-source/commit/bcc0cd192ee27c23bbbca6f044927b435474d75a)) ## [2.3.12](https://github.com/salesforcecli/plugin-source/compare/2.3.11...2.3.12) (2023-01-05) - ### Bug Fixes -* **deps:** bump json5 from 1.0.1 to 1.0.2 ([#688](https://github.com/salesforcecli/plugin-source/issues/688)) ([d6ae9f5](https://github.com/salesforcecli/plugin-source/commit/d6ae9f5594b19fe8b6f23e8d7c3e0d801b06ff48)) - - +- **deps:** bump json5 from 1.0.1 to 1.0.2 ([#688](https://github.com/salesforcecli/plugin-source/issues/688)) ([d6ae9f5](https://github.com/salesforcecli/plugin-source/commit/d6ae9f5594b19fe8b6f23e8d7c3e0d801b06ff48)) ## [2.3.11](https://github.com/salesforcecli/plugin-source/compare/2.3.10...2.3.11) (2022-12-31) - ### Bug Fixes -* **deps:** bump @oclif/core from 1.22.0 to 1.23.0 ([#684](https://github.com/salesforcecli/plugin-source/issues/684)) ([f27da0f](https://github.com/salesforcecli/plugin-source/commit/f27da0f5d61fa6b766840a40ebe0b747e1d14f1a)) - - +- **deps:** bump @oclif/core from 1.22.0 to 1.23.0 ([#684](https://github.com/salesforcecli/plugin-source/issues/684)) ([f27da0f](https://github.com/salesforcecli/plugin-source/commit/f27da0f5d61fa6b766840a40ebe0b747e1d14f1a)) ## [2.3.10](https://github.com/salesforcecli/plugin-source/compare/2.3.9...2.3.10) (2022-12-31) - ### Bug Fixes -* **deps:** bump @salesforce/command from 5.2.33 to 5.2.35 ([#686](https://github.com/salesforcecli/plugin-source/issues/686)) ([a994c59](https://github.com/salesforcecli/plugin-source/commit/a994c595162e10b8f8d570d64bdd72d9e14d24f9)) - - +- **deps:** bump @salesforce/command from 5.2.33 to 5.2.35 ([#686](https://github.com/salesforcecli/plugin-source/issues/686)) ([a994c59](https://github.com/salesforcecli/plugin-source/commit/a994c595162e10b8f8d570d64bdd72d9e14d24f9)) ## [2.3.9](https://github.com/salesforcecli/plugin-source/compare/2.3.8...2.3.9) (2022-12-17) - ### Bug Fixes -* **deps:** bump @oclif/core from 1.20.4 to 1.22.0 ([#676](https://github.com/salesforcecli/plugin-source/issues/676)) ([f82266f](https://github.com/salesforcecli/plugin-source/commit/f82266f4e805f55912bd8a75717109fa878ee39e)) - - +- **deps:** bump @oclif/core from 1.20.4 to 1.22.0 ([#676](https://github.com/salesforcecli/plugin-source/issues/676)) ([f82266f](https://github.com/salesforcecli/plugin-source/commit/f82266f4e805f55912bd8a75717109fa878ee39e)) ## [2.3.8](https://github.com/salesforcecli/plugin-source/compare/2.3.7...2.3.8) (2022-12-16) - - ## [2.3.7](https://github.com/salesforcecli/plugin-source/compare/2.3.6...2.3.7) (2022-12-01) - ### Bug Fixes -* **deps:** bump @salesforce/core from 3.32.4 to 3.32.5 ([#660](https://github.com/salesforcecli/plugin-source/issues/660)) ([b83a2ed](https://github.com/salesforcecli/plugin-source/commit/b83a2edc39f216a0eec9b42b028b1f42f07ea48a)) - - +- **deps:** bump @salesforce/core from 3.32.4 to 3.32.5 ([#660](https://github.com/salesforcecli/plugin-source/issues/660)) ([b83a2ed](https://github.com/salesforcecli/plugin-source/commit/b83a2edc39f216a0eec9b42b028b1f42f07ea48a)) ## [2.3.6](https://github.com/salesforcecli/plugin-source/compare/2.3.5...2.3.6) (2022-12-01) - ### Bug Fixes -* guard against undefined file path in results ([#659](https://github.com/salesforcecli/plugin-source/issues/659)) ([0262ea0](https://github.com/salesforcecli/plugin-source/commit/0262ea043c2aa141ffe194d9d45eeaab93e394a9)) - - +- guard against undefined file path in results ([#659](https://github.com/salesforcecli/plugin-source/issues/659)) ([0262ea0](https://github.com/salesforcecli/plugin-source/commit/0262ea043c2aa141ffe194d9d45eeaab93e394a9)) ## [2.3.5](https://github.com/salesforcecli/plugin-source/compare/2.3.4...2.3.5) (2022-11-18) - ### Bug Fixes -* bump SDR and regen lock file ([#650](https://github.com/salesforcecli/plugin-source/issues/650)) ([db9ecb4](https://github.com/salesforcecli/plugin-source/commit/db9ecb432e13c13e7c655c30bc1e5aa69c291237)) - - +- bump SDR and regen lock file ([#650](https://github.com/salesforcecli/plugin-source/issues/650)) ([db9ecb4](https://github.com/salesforcecli/plugin-source/commit/db9ecb432e13c13e7c655c30bc1e5aa69c291237)) ## [2.3.4](https://github.com/salesforcecli/plugin-source/compare/2.3.3...2.3.4) (2022-11-12) - ### Bug Fixes -* bump sdr and core for fixes ([63f8b0c](https://github.com/salesforcecli/plugin-source/commit/63f8b0c371e849dd414b47c9515f9a517f786bf4)) - - +- bump sdr and core for fixes ([63f8b0c](https://github.com/salesforcecli/plugin-source/commit/63f8b0c371e849dd414b47c9515f9a517f786bf4)) ## [2.3.3](https://github.com/salesforcecli/plugin-source/compare/2.3.2...2.3.3) (2022-11-12) - ### Bug Fixes -* bump sdr and core for fixes ([5a91d6e](https://github.com/salesforcecli/plugin-source/commit/5a91d6e0b2277348139b239b956dbc4fdb92bde2)) - - +- bump sdr and core for fixes ([5a91d6e](https://github.com/salesforcecli/plugin-source/commit/5a91d6e0b2277348139b239b956dbc4fdb92bde2)) ## [2.3.2](https://github.com/salesforcecli/plugin-source/compare/2.3.1...2.3.2) (2022-11-09) - ### Bug Fixes -* **deps:** bump @salesforce/source-deploy-retrieve from 7.5.0 to 7.5.2 ([#641](https://github.com/salesforcecli/plugin-source/issues/641)) ([4220b78](https://github.com/salesforcecli/plugin-source/commit/4220b786f1ea1f62ac112a4389fec816844ebe41)) - - +- **deps:** bump @salesforce/source-deploy-retrieve from 7.5.0 to 7.5.2 ([#641](https://github.com/salesforcecli/plugin-source/issues/641)) ([4220b78](https://github.com/salesforcecli/plugin-source/commit/4220b786f1ea1f62ac112a4389fec816844ebe41)) ## [2.3.1](https://github.com/salesforcecli/plugin-source/compare/2.3.0...2.3.1) (2022-11-05) - ### Bug Fixes -* **deps:** bump tslib from 2.4.0 to 2.4.1 ([#638](https://github.com/salesforcecli/plugin-source/issues/638)) ([f9424f4](https://github.com/salesforcecli/plugin-source/commit/f9424f490b5d0d10e3d8780ac4cedcdd0229f77a)) - - +- **deps:** bump tslib from 2.4.0 to 2.4.1 ([#638](https://github.com/salesforcecli/plugin-source/issues/638)) ([f9424f4](https://github.com/salesforcecli/plugin-source/commit/f9424f490b5d0d10e3d8780ac4cedcdd0229f77a)) # [2.3.0](https://github.com/salesforcecli/plugin-source/compare/2.2.0...2.3.0) (2022-11-01) - ### Features -* display replacements on push/deploy ([#628](https://github.com/salesforcecli/plugin-source/issues/628)) ([6fd2045](https://github.com/salesforcecli/plugin-source/commit/6fd20457dc3885d91fdfffba66a1077b100f1de0)) - - +- display replacements on push/deploy ([#628](https://github.com/salesforcecli/plugin-source/issues/628)) ([6fd2045](https://github.com/salesforcecli/plugin-source/commit/6fd20457dc3885d91fdfffba66a1077b100f1de0)) # [2.2.0](https://github.com/salesforcecli/plugin-source/compare/2.1.3...2.2.0) (2022-11-01) - ### Features -* add retrievetargetdir to source:retrieve ([#624](https://github.com/salesforcecli/plugin-source/issues/624)) ([7c0a013](https://github.com/salesforcecli/plugin-source/commit/7c0a0130e563652fdc11dabf65a00c77c88db5d6)) - - +- add retrievetargetdir to source:retrieve ([#624](https://github.com/salesforcecli/plugin-source/issues/624)) ([7c0a013](https://github.com/salesforcecli/plugin-source/commit/7c0a0130e563652fdc11dabf65a00c77c88db5d6)) ## [2.1.3](https://github.com/salesforcecli/plugin-source/compare/2.1.2...2.1.3) (2022-10-31) - ### Bug Fixes -* add hook and doctor diagnostic tests ([#629](https://github.com/salesforcecli/plugin-source/issues/629)) ([f41cb57](https://github.com/salesforcecli/plugin-source/commit/f41cb57c186226d03e55947f15f7820549dcb10e)) - - +- add hook and doctor diagnostic tests ([#629](https://github.com/salesforcecli/plugin-source/issues/629)) ([f41cb57](https://github.com/salesforcecli/plugin-source/commit/f41cb57c186226d03e55947f15f7820549dcb10e)) ## [2.1.2](https://github.com/salesforcecli/plugin-source/compare/2.1.1...2.1.2) (2022-10-29) - ### Bug Fixes -* **deps:** bump @salesforce/source-deploy-retrieve from 7.0.1 to 7.4.0 ([#633](https://github.com/salesforcecli/plugin-source/issues/633)) ([8d7ae01](https://github.com/salesforcecli/plugin-source/commit/8d7ae01d2b8d3d8d8180388d83ccc45a6ab77bfd)) - - +- **deps:** bump @salesforce/source-deploy-retrieve from 7.0.1 to 7.4.0 ([#633](https://github.com/salesforcecli/plugin-source/issues/633)) ([8d7ae01](https://github.com/salesforcecli/plugin-source/commit/8d7ae01d2b8d3d8d8180388d83ccc45a6ab77bfd)) ## [2.1.1](https://github.com/salesforcecli/plugin-source/compare/2.1.0...2.1.1) (2022-10-29) - ### Bug Fixes -* **deps:** bump @salesforce/kit from 1.7.0 to 1.7.1 ([#635](https://github.com/salesforcecli/plugin-source/issues/635)) ([37cb1fa](https://github.com/salesforcecli/plugin-source/commit/37cb1fab6535dba3d274ba1bde337f1ea010dd3d)) - - +- **deps:** bump @salesforce/kit from 1.7.0 to 1.7.1 ([#635](https://github.com/salesforcecli/plugin-source/issues/635)) ([37cb1fa](https://github.com/salesforcecli/plugin-source/commit/37cb1fab6535dba3d274ba1bde337f1ea010dd3d)) # [2.1.0](https://github.com/salesforcecli/plugin-source/compare/2.0.26...2.1.0) (2022-10-28) - ### Features -* use swc in bin/dev ([66debb4](https://github.com/salesforcecli/plugin-source/commit/66debb4a4fc2743c8f51510065381d95eb454756)) - - +- use swc in bin/dev ([66debb4](https://github.com/salesforcecli/plugin-source/commit/66debb4a4fc2743c8f51510065381d95eb454756)) ## [2.0.26](https://github.com/salesforcecli/plugin-source/compare/2.0.25...2.0.26) (2022-10-22) - ### Bug Fixes -* **deps:** bump @salesforce/command from 5.2.8 to 5.2.13 ([#620](https://github.com/salesforcecli/plugin-source/issues/620)) ([8c6d514](https://github.com/salesforcecli/plugin-source/commit/8c6d514cc0d561f485fd6148899e22baa8ea95ae)) - - +- **deps:** bump @salesforce/command from 5.2.8 to 5.2.13 ([#620](https://github.com/salesforcecli/plugin-source/issues/620)) ([8c6d514](https://github.com/salesforcecli/plugin-source/commit/8c6d514cc0d561f485fd6148899e22baa8ea95ae)) ## [2.0.25](https://github.com/salesforcecli/plugin-source/compare/2.0.24...2.0.25) (2022-10-18) - ### Bug Fixes -* **deps:** major bump sdr ([c243af7](https://github.com/salesforcecli/plugin-source/commit/c243af746fe872030eb32ad6f3942f847d6f6944)) - - +- **deps:** major bump sdr ([c243af7](https://github.com/salesforcecli/plugin-source/commit/c243af746fe872030eb32ad6f3942f847d6f6944)) ## [2.0.24](https://github.com/salesforcecli/plugin-source/compare/2.0.23...2.0.24) (2022-10-17) - ### Bug Fixes -* display error message from response ([#608](https://github.com/salesforcecli/plugin-source/issues/608)) ([6ba254e](https://github.com/salesforcecli/plugin-source/commit/6ba254e731e48d4b8787fad7d231c075401c4eaf)) - - +- display error message from response ([#608](https://github.com/salesforcecli/plugin-source/issues/608)) ([6ba254e](https://github.com/salesforcecli/plugin-source/commit/6ba254e731e48d4b8787fad7d231c075401c4eaf)) ## [2.0.23](https://github.com/salesforcecli/plugin-source/compare/2.0.22...2.0.23) (2022-10-16) - ### Bug Fixes -* **deps:** bump @salesforce/source-tracking from 2.2.8 to 2.2.9 ([#613](https://github.com/salesforcecli/plugin-source/issues/613)) ([77e2504](https://github.com/salesforcecli/plugin-source/commit/77e25044ae450a04a41da5dec89fbec6a8cc4495)) - - +- **deps:** bump @salesforce/source-tracking from 2.2.8 to 2.2.9 ([#613](https://github.com/salesforcecli/plugin-source/issues/613)) ([77e2504](https://github.com/salesforcecli/plugin-source/commit/77e25044ae450a04a41da5dec89fbec6a8cc4495)) ## [2.0.22](https://github.com/salesforcecli/plugin-source/compare/2.0.21...2.0.22) (2022-10-16) - ### Bug Fixes -* **deps:** bump @salesforce/source-deploy-retrieve from 6.8.6 to 6.9.1 ([#614](https://github.com/salesforcecli/plugin-source/issues/614)) ([ea639b5](https://github.com/salesforcecli/plugin-source/commit/ea639b512d991c249dc7082f5afb3a5481abbce9)) - - +- **deps:** bump @salesforce/source-deploy-retrieve from 6.8.6 to 6.9.1 ([#614](https://github.com/salesforcecli/plugin-source/issues/614)) ([ea639b5](https://github.com/salesforcecli/plugin-source/commit/ea639b512d991c249dc7082f5afb3a5481abbce9)) ## [2.0.21](https://github.com/salesforcecli/plugin-source/compare/2.0.20...2.0.21) (2022-10-15) - ### Bug Fixes -* **deps:** bump vm2 from 3.9.9 to 3.9.11 ([#591](https://github.com/salesforcecli/plugin-source/issues/591)) ([4e5d67b](https://github.com/salesforcecli/plugin-source/commit/4e5d67bd507f0c20199aa0519fc3723a165c7928)) - - +- **deps:** bump vm2 from 3.9.9 to 3.9.11 ([#591](https://github.com/salesforcecli/plugin-source/issues/591)) ([4e5d67b](https://github.com/salesforcecli/plugin-source/commit/4e5d67bd507f0c20199aa0519fc3723a165c7928)) ## [2.0.20](https://github.com/salesforcecli/plugin-source/compare/2.0.19...2.0.20) (2022-10-15) - ### Bug Fixes -* **deps:** bump @oclif/core from 1.16.3 to 1.18.0 ([#612](https://github.com/salesforcecli/plugin-source/issues/612)) ([f3b69ac](https://github.com/salesforcecli/plugin-source/commit/f3b69ac0e24b6a7d7fd6a388da9dc2909ee2e73b)) - - +- **deps:** bump @oclif/core from 1.16.3 to 1.18.0 ([#612](https://github.com/salesforcecli/plugin-source/issues/612)) ([f3b69ac](https://github.com/salesforcecli/plugin-source/commit/f3b69ac0e24b6a7d7fd6a388da9dc2909ee2e73b)) ## [2.0.19](https://github.com/salesforcecli/plugin-source/compare/2.0.18...2.0.19) (2022-10-13) - ### Bug Fixes -* bump apex-node ([#604](https://github.com/salesforcecli/plugin-source/issues/604)) ([e71b0d5](https://github.com/salesforcecli/plugin-source/commit/e71b0d5fb8beb9af04473b6ce65194b48646784e)) - - +- bump apex-node ([#604](https://github.com/salesforcecli/plugin-source/issues/604)) ([e71b0d5](https://github.com/salesforcecli/plugin-source/commit/e71b0d5fb8beb9af04473b6ce65194b48646784e)) ## [2.0.18](https://github.com/salesforcecli/plugin-source/compare/2.0.17...2.0.18) (2022-10-07) - ### Bug Fixes -* **deps:** bump jsforce from 2.0.0-beta.18 to 2.0.0-beta.19 ([#601](https://github.com/salesforcecli/plugin-source/issues/601)) ([33a3a39](https://github.com/salesforcecli/plugin-source/commit/33a3a39873695d2106abcbef61737dbf6970bac0)) - - +- **deps:** bump jsforce from 2.0.0-beta.18 to 2.0.0-beta.19 ([#601](https://github.com/salesforcecli/plugin-source/issues/601)) ([33a3a39](https://github.com/salesforcecli/plugin-source/commit/33a3a39873695d2106abcbef61737dbf6970bac0)) ## [2.0.17](https://github.com/salesforcecli/plugin-source/compare/2.0.16...2.0.17) (2022-10-06) - ### Bug Fixes -* **deps:** bump @salesforce/source-deploy-retrieve from 6.8.5 to 6.8.6 ([#599](https://github.com/salesforcecli/plugin-source/issues/599)) ([c940e5b](https://github.com/salesforcecli/plugin-source/commit/c940e5b908fce259930dbb914c09ecbac89d5e5e)) - - +- **deps:** bump @salesforce/source-deploy-retrieve from 6.8.5 to 6.8.6 ([#599](https://github.com/salesforcecli/plugin-source/issues/599)) ([c940e5b](https://github.com/salesforcecli/plugin-source/commit/c940e5b908fce259930dbb914c09ecbac89d5e5e)) ## [2.0.16](https://github.com/salesforcecli/plugin-source/compare/2.0.15...2.0.16) (2022-09-23) - ### Bug Fixes -* **deps:** bump @salesforce/source-tracking from 2.2.1 to 2.2.3 ([#584](https://github.com/salesforcecli/plugin-source/issues/584)) ([b1e6f72](https://github.com/salesforcecli/plugin-source/commit/b1e6f724bf4c5458ea3466db9173d51a1e496915)) - - +- **deps:** bump @salesforce/source-tracking from 2.2.1 to 2.2.3 ([#584](https://github.com/salesforcecli/plugin-source/issues/584)) ([b1e6f72](https://github.com/salesforcecli/plugin-source/commit/b1e6f724bf4c5458ea3466db9173d51a1e496915)) ## [2.0.15](https://github.com/salesforcecli/plugin-source/compare/2.0.14...2.0.15) (2022-09-21) - ### Bug Fixes -* **deps:** bump @salesforce/source-deploy-retrieve from 6.8.0 to 6.8.1 ([#580](https://github.com/salesforcecli/plugin-source/issues/580)) ([a2a792c](https://github.com/salesforcecli/plugin-source/commit/a2a792ce013c6851d9eaeec163256b7cfca8741c)) - - +- **deps:** bump @salesforce/source-deploy-retrieve from 6.8.0 to 6.8.1 ([#580](https://github.com/salesforcecli/plugin-source/issues/580)) ([a2a792c](https://github.com/salesforcecli/plugin-source/commit/a2a792ce013c6851d9eaeec163256b7cfca8741c)) ## [2.0.14](https://github.com/salesforcecli/plugin-source/compare/v2.0.13...2.0.14) (2022-09-21) - ### Bug Fixes -* **deps:** bump @salesforce/source-deploy-retrieve from 6.2.6 to 6.8.0 ([#576](https://github.com/salesforcecli/plugin-source/issues/576)) ([42c2654](https://github.com/salesforcecli/plugin-source/commit/42c2654ce9ddb2dbc3c82d1fecbc7aaa91791ae6)) - - +- **deps:** bump @salesforce/source-deploy-retrieve from 6.2.6 to 6.8.0 ([#576](https://github.com/salesforcecli/plugin-source/issues/576)) ([42c2654](https://github.com/salesforcecli/plugin-source/commit/42c2654ce9ddb2dbc3c82d1fecbc7aaa91791ae6)) ## [2.0.13](https://github.com/salesforcecli/plugin-source/compare/v2.0.12...v2.0.13) (2022-08-20) - - ## [2.0.12](https://github.com/salesforcecli/plugin-source/compare/v2.0.11...v2.0.12) (2022-08-15) - ### Bug Fixes -* exclude sourcepath from component set builder ([#553](https://github.com/salesforcecli/plugin-source/issues/553)) ([b678d0c](https://github.com/salesforcecli/plugin-source/commit/b678d0c9023fc6a0f5c816b40d22ab4803356834)) - - +- exclude sourcepath from component set builder ([#553](https://github.com/salesforcecli/plugin-source/issues/553)) ([b678d0c](https://github.com/salesforcecli/plugin-source/commit/b678d0c9023fc6a0f5c816b40d22ab4803356834)) ## [2.0.11](https://github.com/salesforcecli/plugin-source/compare/v2.0.10...v2.0.11) (2022-07-26) - ### Bug Fixes -* bump SDR ([#541](https://github.com/salesforcecli/plugin-source/issues/541)) ([dcb10ab](https://github.com/salesforcecli/plugin-source/commit/dcb10ab8daa414fecf9d8d3115ebd8ab8aebcdd7)) - - +- bump SDR ([#541](https://github.com/salesforcecli/plugin-source/issues/541)) ([dcb10ab](https://github.com/salesforcecli/plugin-source/commit/dcb10ab8daa414fecf9d8d3115ebd8ab8aebcdd7)) ## [2.0.10](https://github.com/salesforcecli/plugin-source/compare/v2.0.9...v2.0.10) (2022-07-25) - ### Bug Fixes -* caret for jsforce ([#540](https://github.com/salesforcecli/plugin-source/issues/540)) ([2142e70](https://github.com/salesforcecli/plugin-source/commit/2142e701b503d84bb38b6557283c3a49b1ee0b92)) - - +- caret for jsforce ([#540](https://github.com/salesforcecli/plugin-source/issues/540)) ([2142e70](https://github.com/salesforcecli/plugin-source/commit/2142e701b503d84bb38b6557283c3a49b1ee0b92)) ## [2.0.9](https://github.com/salesforcecli/plugin-source/compare/v2.0.8...v2.0.9) (2022-07-20) - ### Bug Fixes -* fixes exclusive flags for mdapi/source:deploy when using quickdeploy ([#521](https://github.com/salesforcecli/plugin-source/issues/521)) ([7c52a05](https://github.com/salesforcecli/plugin-source/commit/7c52a05c91484dd1135b6b7498c4e89718092256)) - - +- fixes exclusive flags for mdapi/source:deploy when using quickdeploy ([#521](https://github.com/salesforcecli/plugin-source/issues/521)) ([7c52a05](https://github.com/salesforcecli/plugin-source/commit/7c52a05c91484dd1135b6b7498c4e89718092256)) ## [2.0.8](https://github.com/salesforcecli/plugin-source/compare/v2.0.7...v2.0.8) (2022-07-18) - ### Bug Fixes -* try/finally on pollStatus to handle throws from timeout ([#538](https://github.com/salesforcecli/plugin-source/issues/538)) ([68ff738](https://github.com/salesforcecli/plugin-source/commit/68ff73850f853d5951be8667a8fc807ecf78f91f)) - - +- try/finally on pollStatus to handle throws from timeout ([#538](https://github.com/salesforcecli/plugin-source/issues/538)) ([68ff738](https://github.com/salesforcecli/plugin-source/commit/68ff73850f853d5951be8667a8fc807ecf78f91f)) ## [2.0.7](https://github.com/salesforcecli/plugin-source/compare/v2.0.6...v2.0.7) (2022-07-07) - ### Bug Fixes -* bump SDR ([#537](https://github.com/salesforcecli/plugin-source/issues/537)) ([fa405e4](https://github.com/salesforcecli/plugin-source/commit/fa405e4e9cdaee40d75b1c05cebb449a68533f30)) - - +- bump SDR ([#537](https://github.com/salesforcecli/plugin-source/issues/537)) ([fa405e4](https://github.com/salesforcecli/plugin-source/commit/fa405e4e9cdaee40d75b1c05cebb449a68533f30)) ## [2.0.6](https://github.com/salesforcecli/plugin-source/compare/v2.0.5...v2.0.6) (2022-07-07) - ### Bug Fixes -* isRestDeploy correctly handles org-metadata-rest-deploy config conversion ([#535](https://github.com/salesforcecli/plugin-source/issues/535)) ([dd7e776](https://github.com/salesforcecli/plugin-source/commit/dd7e7763ade1244fdc66a34892a52d0a779f9b58)) - - +- isRestDeploy correctly handles org-metadata-rest-deploy config conversion ([#535](https://github.com/salesforcecli/plugin-source/issues/535)) ([dd7e776](https://github.com/salesforcecli/plugin-source/commit/dd7e7763ade1244fdc66a34892a52d0a779f9b58)) ## [2.0.5](https://github.com/salesforcecli/plugin-source/compare/v2.0.4...v2.0.5) (2022-07-06) - ### Bug Fixes -* apex-node from parking-orbit ([#533](https://github.com/salesforcecli/plugin-source/issues/533)) ([ebaf5ed](https://github.com/salesforcecli/plugin-source/commit/ebaf5edef0ec15ba2c2e2cf541701e7db08f10bf)) - - +- apex-node from parking-orbit ([#533](https://github.com/salesforcecli/plugin-source/issues/533)) ([ebaf5ed](https://github.com/salesforcecli/plugin-source/commit/ebaf5edef0ec15ba2c2e2cf541701e7db08f10bf)) ## [2.0.4](https://github.com/salesforcecli/plugin-source/compare/v2.0.3...v2.0.4) (2022-07-05) - ### Bug Fixes -* ebikes nuts fix ([#522](https://github.com/salesforcecli/plugin-source/issues/522)) ([990a2e1](https://github.com/salesforcecli/plugin-source/commit/990a2e1e6ba34fbf0c855358a433a3503faf708d)) - - +- ebikes nuts fix ([#522](https://github.com/salesforcecli/plugin-source/issues/522)) ([990a2e1](https://github.com/salesforcecli/plugin-source/commit/990a2e1e6ba34fbf0c855358a433a3503faf708d)) ## [2.0.3](https://github.com/salesforcecli/plugin-source/compare/v2.0.2...v2.0.3) (2022-06-23) - - ## [2.0.2](https://github.com/salesforcecli/plugin-source/compare/v2.0.1...v2.0.2) (2022-06-23) - - ## [2.0.1](https://github.com/salesforcecli/plugin-source/compare/v2.0.0...v2.0.1) (2022-06-16) - ### Bug Fixes -* let server determine testlevel when deploying to a prod org by passing `undefined` ([#509](https://github.com/salesforcecli/plugin-source/issues/509)) ([6d5a995](https://github.com/salesforcecli/plugin-source/commit/6d5a99515939eb9a356bd039d872e4ffad8158b7)) - - +- let server determine testlevel when deploying to a prod org by passing `undefined` ([#509](https://github.com/salesforcecli/plugin-source/issues/509)) ([6d5a995](https://github.com/salesforcecli/plugin-source/commit/6d5a99515939eb9a356bd039d872e4ffad8158b7)) # [2.0.0](https://github.com/salesforcecli/plugin-source/compare/v1.10.2...v2.0.0) (2022-06-15) - - ## [1.10.2](https://github.com/salesforcecli/plugin-source/compare/v1.10.1...v1.10.2) (2022-05-31) - ### Bug Fixes -* default min line number to 1 when 100 pct coverage ([#494](https://github.com/salesforcecli/plugin-source/issues/494)) ([c974010](https://github.com/salesforcecli/plugin-source/commit/c974010b9e6ec54e9b4092e9918cdf4e5cbc5b46)) - - +- default min line number to 1 when 100 pct coverage ([#494](https://github.com/salesforcecli/plugin-source/issues/494)) ([c974010](https://github.com/salesforcecli/plugin-source/commit/c974010b9e6ec54e9b4092e9918cdf4e5cbc5b46)) ## [1.10.1](https://github.com/salesforcecli/plugin-source/compare/v1.10.0...v1.10.1) (2022-05-27) - ### Bug Fixes -* import coverageUtils from parent folder ([#493](https://github.com/salesforcecli/plugin-source/issues/493)) ([c4f471e](https://github.com/salesforcecli/plugin-source/commit/c4f471e97b50a43c1809518432f7ec4dddc05041)) - - +- import coverageUtils from parent folder ([#493](https://github.com/salesforcecli/plugin-source/issues/493)) ([c4f471e](https://github.com/salesforcecli/plugin-source/commit/c4f471e97b50a43c1809518432f7ec4dddc05041)) # [1.10.0](https://github.com/salesforcecli/plugin-source/compare/v1.9.9...v1.10.0) (2022-05-26) - ### Features -* add code coverage and junit reporting ([#491](https://github.com/salesforcecli/plugin-source/issues/491)) ([3e6ff90](https://github.com/salesforcecli/plugin-source/commit/3e6ff908d937c526abe219831f67e749a828c640)) - - +- add code coverage and junit reporting ([#491](https://github.com/salesforcecli/plugin-source/issues/491)) ([3e6ff90](https://github.com/salesforcecli/plugin-source/commit/3e6ff908d937c526abe219831f67e749a828c640)) ## [1.9.9](https://github.com/salesforcecli/plugin-source/compare/v1.9.8...v1.9.9) (2022-05-18) - - ## [1.9.8](https://github.com/salesforcecli/plugin-source/compare/v1.9.7...v1.9.8) (2022-05-17) - ### Bug Fixes -* mdapi deploy negative one ([#487](https://github.com/salesforcecli/plugin-source/issues/487)) ([c7e2494](https://github.com/salesforcecli/plugin-source/commit/c7e24941f770336ea31e067067c12942ec01bf49)) - - +- mdapi deploy negative one ([#487](https://github.com/salesforcecli/plugin-source/issues/487)) ([c7e2494](https://github.com/salesforcecli/plugin-source/commit/c7e24941f770336ea31e067067c12942ec01bf49)) ## [1.9.7](https://github.com/salesforcecli/plugin-source/compare/v1.9.6...v1.9.7) (2022-05-04) - - ## [1.9.6](https://github.com/salesforcecli/plugin-source/compare/v1.9.5...v1.9.6) (2022-04-29) - ### Bug Fixes -* use fixed stl, bump other deps for maintenance ([#477](https://github.com/salesforcecli/plugin-source/issues/477)) ([7c7f411](https://github.com/salesforcecli/plugin-source/commit/7c7f411d6f9e55141ac077cafc1e0f1e1efe5120)) - - +- use fixed stl, bump other deps for maintenance ([#477](https://github.com/salesforcecli/plugin-source/issues/477)) ([7c7f411](https://github.com/salesforcecli/plugin-source/commit/7c7f411d6f9e55141ac077cafc1e0f1e1efe5120)) ## [1.9.5](https://github.com/salesforcecli/plugin-source/compare/v1.9.4...v1.9.5) (2022-04-28) - ### Bug Fixes -* pull non-default directory in default project ([#471](https://github.com/salesforcecli/plugin-source/issues/471)) ([02d91ca](https://github.com/salesforcecli/plugin-source/commit/02d91caf1e39c00a32d53012f6916a86dea2b2f8)) - - +- pull non-default directory in default project ([#471](https://github.com/salesforcecli/plugin-source/issues/471)) ([02d91ca](https://github.com/salesforcecli/plugin-source/commit/02d91caf1e39c00a32d53012f6916a86dea2b2f8)) ## [1.9.4](https://github.com/salesforcecli/plugin-source/compare/v1.9.3...v1.9.4) (2022-04-26) - ### Reverts -* Revert "test: nuts for nested LWC" ([13cd75b](https://github.com/salesforcecli/plugin-source/commit/13cd75b47608af55be5e45842bc14edb866c93ec)) - - +- Revert "test: nuts for nested LWC" ([13cd75b](https://github.com/salesforcecli/plugin-source/commit/13cd75b47608af55be5e45842bc14edb866c93ec)) ## [1.9.3](https://github.com/salesforcecli/plugin-source/compare/v1.9.2...v1.9.3) (2022-04-07) - ### Bug Fixes -* bump to latest sdr ([#467](https://github.com/salesforcecli/plugin-source/issues/467)) ([a71881c](https://github.com/salesforcecli/plugin-source/commit/a71881c276f160b0c50cd4d7bee2bad2096eef1e)) - - +- bump to latest sdr ([#467](https://github.com/salesforcecli/plugin-source/issues/467)) ([a71881c](https://github.com/salesforcecli/plugin-source/commit/a71881c276f160b0c50cd4d7bee2bad2096eef1e)) ## [1.9.2](https://github.com/salesforcecli/plugin-source/compare/v1.9.1...v1.9.2) (2022-03-25) - ### Bug Fixes -* fix from stl ([#460](https://github.com/salesforcecli/plugin-source/issues/460)) ([1ac35ac](https://github.com/salesforcecli/plugin-source/commit/1ac35aca178c21fdae9100064fafaccf3d66cf02)) - - +- fix from stl ([#460](https://github.com/salesforcecli/plugin-source/issues/460)) ([1ac35ac](https://github.com/salesforcecli/plugin-source/commit/1ac35aca178c21fdae9100064fafaccf3d66cf02)) ## [1.9.1](https://github.com/salesforcecli/plugin-source/compare/v1.9.0...v1.9.1) (2022-03-25) - ### Bug Fixes -* bump stl for graceful ([#459](https://github.com/salesforcecli/plugin-source/issues/459)) ([b611415](https://github.com/salesforcecli/plugin-source/commit/b611415d32f29ac5f8bc091652031d635d7338fe)) - - +- bump stl for graceful ([#459](https://github.com/salesforcecli/plugin-source/issues/459)) ([b611415](https://github.com/salesforcecli/plugin-source/commit/b611415d32f29ac5f8bc091652031d635d7338fe)) # [1.9.0](https://github.com/salesforcecli/plugin-source/compare/v1.8.20...v1.9.0) (2022-03-23) - ### Features -* GA new tracking commands ([#457](https://github.com/salesforcecli/plugin-source/issues/457)) ([eb54c09](https://github.com/salesforcecli/plugin-source/commit/eb54c097d0a714c3c42f0a435941d2f30d609eea)) - - +- GA new tracking commands ([#457](https://github.com/salesforcecli/plugin-source/issues/457)) ([eb54c09](https://github.com/salesforcecli/plugin-source/commit/eb54c097d0a714c3c42f0a435941d2f30d609eea)) ## [1.8.20](https://github.com/salesforcecli/plugin-source/compare/v1.8.19...v1.8.20) (2022-03-17) - ### Bug Fixes -* error structure for json on push/pull ([5f36a37](https://github.com/salesforcecli/plugin-source/commit/5f36a3720c08cd909e567249b597fdbae2e35dd1)) - - +- error structure for json on push/pull ([5f36a37](https://github.com/salesforcecli/plugin-source/commit/5f36a3720c08cd909e567249b597fdbae2e35dd1)) ## [1.8.19](https://github.com/salesforcecli/plugin-source/compare/v1.8.18...v1.8.19) (2022-03-16) - ### Bug Fixes -* move command force to plugin-source ([#451](https://github.com/salesforcecli/plugin-source/issues/451)) ([5da7884](https://github.com/salesforcecli/plugin-source/commit/5da7884953c068bcf37f3434193cae309fef8573)) - - +- move command force to plugin-source ([#451](https://github.com/salesforcecli/plugin-source/issues/451)) ([5da7884](https://github.com/salesforcecli/plugin-source/commit/5da7884953c068bcf37f3434193cae309fef8573)) ## [1.8.18](https://github.com/salesforcecli/plugin-source/compare/v1.8.17...v1.8.18) (2022-03-07) - ### Bug Fixes -* revert beta GA ([#446](https://github.com/salesforcecli/plugin-source/issues/446)) ([0efcaa1](https://github.com/salesforcecli/plugin-source/commit/0efcaa11c7c3d3eaed9787486c52295adc5aa4b7)) - - +- revert beta GA ([#446](https://github.com/salesforcecli/plugin-source/issues/446)) ([0efcaa1](https://github.com/salesforcecli/plugin-source/commit/0efcaa11c7c3d3eaed9787486c52295adc5aa4b7)) ## [1.8.17](https://github.com/salesforcecli/plugin-source/compare/v1.8.16...v1.8.17) (2022-03-01) - ### Bug Fixes -* use CSB from SDR ([#430](https://github.com/salesforcecli/plugin-source/issues/430)) ([80e4bdd](https://github.com/salesforcecli/plugin-source/commit/80e4bdd313b55f4b9d37a7a792885d7503e1fbfc)) - - +- use CSB from SDR ([#430](https://github.com/salesforcecli/plugin-source/issues/430)) ([80e4bdd](https://github.com/salesforcecli/plugin-source/commit/80e4bdd313b55f4b9d37a7a792885d7503e1fbfc)) ## [1.8.16](https://github.com/salesforcecli/plugin-source/compare/v1.8.15...v1.8.16) (2022-02-27) - ### Bug Fixes -* run mdapi NUTs in CI ([#431](https://github.com/salesforcecli/plugin-source/issues/431)) ([e33fd1e](https://github.com/salesforcecli/plugin-source/commit/e33fd1e93a92cd95586d29d8fb0ff6cb6e038fbb)) - - +- run mdapi NUTs in CI ([#431](https://github.com/salesforcecli/plugin-source/issues/431)) ([e33fd1e](https://github.com/salesforcecli/plugin-source/commit/e33fd1e93a92cd95586d29d8fb0ff6cb6e038fbb)) ## [1.8.15](https://github.com/salesforcecli/plugin-source/compare/v1.8.14...v1.8.15) (2022-02-24) - - ## [1.8.14](https://github.com/salesforcecli/plugin-source/compare/v1.8.13...v1.8.14) (2022-02-23) - - ## [1.8.13](https://github.com/salesforcecli/plugin-source/compare/v1.8.12...v1.8.13) (2022-02-23) - - ## [1.8.12](https://github.com/salesforcecli/plugin-source/compare/v1.8.11...v1.8.12) (2022-02-14) - - ## [1.8.11](https://github.com/salesforcecli/plugin-source/compare/v1.8.10...v1.8.11) (2022-02-03) - ### Bug Fixes -* temporarily disable async deploy NUTs ([#420](https://github.com/salesforcecli/plugin-source/issues/420)) ([e4e2d76](https://github.com/salesforcecli/plugin-source/commit/e4e2d7615272cb45fda5a4ee2694aaaae92fbf65)) - - +- temporarily disable async deploy NUTs ([#420](https://github.com/salesforcecli/plugin-source/issues/420)) ([e4e2d76](https://github.com/salesforcecli/plugin-source/commit/e4e2d7615272cb45fda5a4ee2694aaaae92fbf65)) ## [1.8.10](https://github.com/salesforcecli/plugin-source/compare/v1.8.9...v1.8.10) (2022-02-02) - - ## [1.8.9](https://github.com/salesforcecli/plugin-source/compare/v1.8.8...v1.8.9) (2022-02-01) - ### Bug Fixes -* bump lots of dependencies ([#416](https://github.com/salesforcecli/plugin-source/issues/416)) ([d242a59](https://github.com/salesforcecli/plugin-source/commit/d242a595011b8da74f2b1da3afac56f6801214bb)) - - +- bump lots of dependencies ([#416](https://github.com/salesforcecli/plugin-source/issues/416)) ([d242a59](https://github.com/salesforcecli/plugin-source/commit/d242a595011b8da74f2b1da3afac56f6801214bb)) ## [1.8.8](https://github.com/salesforcecli/plugin-source/compare/v1.8.7...v1.8.8) (2022-01-31) - ### Bug Fixes -* Add CFT/COT NUTs ([#415](https://github.com/salesforcecli/plugin-source/issues/415)) ([720e6ef](https://github.com/salesforcecli/plugin-source/commit/720e6efdddc396913c08b8e517edc66a2c804213)) - - +- Add CFT/COT NUTs ([#415](https://github.com/salesforcecli/plugin-source/issues/415)) ([720e6ef](https://github.com/salesforcecli/plugin-source/commit/720e6efdddc396913c08b8e517edc66a2c804213)) ## [1.8.7](https://github.com/salesforcecli/plugin-source/compare/v1.8.6...v1.8.7) (2022-01-30) - ### Bug Fixes -* make retrieve param consistent and fix tests ([#410](https://github.com/salesforcecli/plugin-source/issues/410)) ([79108d8](https://github.com/salesforcecli/plugin-source/commit/79108d87ceb65c49c5e17955c42733c6f0d8a2e6)) - - +- make retrieve param consistent and fix tests ([#410](https://github.com/salesforcecli/plugin-source/issues/410)) ([79108d8](https://github.com/salesforcecli/plugin-source/commit/79108d87ceb65c49c5e17955c42733c6f0d8a2e6)) ## [1.8.6](https://github.com/salesforcecli/plugin-source/compare/v1.8.5...v1.8.6) (2022-01-27) - ### Bug Fixes -* add purgeondelete flag to deploy ([#394](https://github.com/salesforcecli/plugin-source/issues/394)) ([6b99f44](https://github.com/salesforcecli/plugin-source/commit/6b99f44c0fdbe9f3d398a7e98dff29d00fc02c46)) - - +- add purgeondelete flag to deploy ([#394](https://github.com/salesforcecli/plugin-source/issues/394)) ([6b99f44](https://github.com/salesforcecli/plugin-source/commit/6b99f44c0fdbe9f3d398a7e98dff29d00fc02c46)) ## [1.8.5](https://github.com/salesforcecli/plugin-source/compare/v1.8.4...v1.8.5) (2022-01-25) - - ## [1.8.4](https://github.com/salesforcecli/plugin-source/compare/v1.8.3...v1.8.4) (2022-01-20) - - ## [1.8.3](https://github.com/salesforcecli/plugin-source/compare/v1.8.2...v1.8.3) (2022-01-20) - - ## [1.8.2](https://github.com/salesforcecli/plugin-source/compare/v1.8.1...v1.8.2) (2022-01-20) - ### Bug Fixes -* include correct username for deploy:report in async deploy ([#392](https://github.com/salesforcecli/plugin-source/issues/392)) ([f58ff25](https://github.com/salesforcecli/plugin-source/commit/f58ff251c60b18391374de7a16f732540515d524)) - - +- include correct username for deploy:report in async deploy ([#392](https://github.com/salesforcecli/plugin-source/issues/392)) ([f58ff25](https://github.com/salesforcecli/plugin-source/commit/f58ff251c60b18391374de7a16f732540515d524)) ## [1.8.1](https://github.com/salesforcecli/plugin-source/compare/v1.8.0...v1.8.1) (2022-01-19) - ### Bug Fixes -* missing quotes in --help for source:retrieve ([#393](https://github.com/salesforcecli/plugin-source/issues/393)) ([2c1e5c6](https://github.com/salesforcecli/plugin-source/commit/2c1e5c6157aed2c1d855af8f2c0a1ebf4478dc23)) - - +- missing quotes in --help for source:retrieve ([#393](https://github.com/salesforcecli/plugin-source/issues/393)) ([2c1e5c6](https://github.com/salesforcecli/plugin-source/commit/2c1e5c6157aed2c1d855af8f2c0a1ebf4478dc23)) # [1.8.0](https://github.com/salesforcecli/plugin-source/compare/v1.6.2...v1.8.0) (2022-01-13) - ### Bug Fixes -* add variable polling times based on comp. set ([#360](https://github.com/salesforcecli/plugin-source/issues/360)) ([4a839ff](https://github.com/salesforcecli/plugin-source/commit/4a839ff7f9f429a723c54baf6c9cb65139eadf43)) -* update --testlevel RunLocalTests --help to say that unlocked packages are also excluded ([#384](https://github.com/salesforcecli/plugin-source/issues/384)) ([5f0ad44](https://github.com/salesforcecli/plugin-source/commit/5f0ad449a6880d761a233c3191e3759a6c0b72cc)) - +- add variable polling times based on comp. set ([#360](https://github.com/salesforcecli/plugin-source/issues/360)) ([4a839ff](https://github.com/salesforcecli/plugin-source/commit/4a839ff7f9f429a723c54baf6c9cb65139eadf43)) +- update --testlevel RunLocalTests --help to say that unlocked packages are also excluded ([#384](https://github.com/salesforcecli/plugin-source/issues/384)) ([5f0ad44](https://github.com/salesforcecli/plugin-source/commit/5f0ad449a6880d761a233c3191e3759a6c0b72cc)) ### Features -* concise flag on status to omit ignored files ([#382](https://github.com/salesforcecli/plugin-source/issues/382)) ([2dcbac8](https://github.com/salesforcecli/plugin-source/commit/2dcbac81e57d056e82835c785bc5a5dc98a255a4)) -* mdapi deploy/report commands ([8068ff0](https://github.com/salesforcecli/plugin-source/commit/8068ff07213541a5823d5908bc831f92e89aa122)) - +- concise flag on status to omit ignored files ([#382](https://github.com/salesforcecli/plugin-source/issues/382)) ([2dcbac8](https://github.com/salesforcecli/plugin-source/commit/2dcbac81e57d056e82835c785bc5a5dc98a255a4)) +- mdapi deploy/report commands ([8068ff0](https://github.com/salesforcecli/plugin-source/commit/8068ff07213541a5823d5908bc831f92e89aa122)) ### Reverts -* Revert "chore: sync .gitignore [skip-validate-pr] (#352)" (#359) ([3d88a10](https://github.com/salesforcecli/plugin-source/commit/3d88a1058bd8bf365dbb9903a912b01c0bfaea39)), closes [#352](https://github.com/salesforcecli/plugin-source/issues/352) [#359](https://github.com/salesforcecli/plugin-source/issues/359) - - +- Revert "chore: sync .gitignore [skip-validate-pr] (#352)" (#359) ([3d88a10](https://github.com/salesforcecli/plugin-source/commit/3d88a1058bd8bf365dbb9903a912b01c0bfaea39)), closes [#352](https://github.com/salesforcecli/plugin-source/issues/352) [#359](https://github.com/salesforcecli/plugin-source/issues/359) ## [1.6.2](https://github.com/salesforcecli/plugin-source/compare/v1.6.1...v1.6.2) (2021-12-03) - ### Bug Fixes -* bump stl for customField status and pull ([#346](https://github.com/salesforcecli/plugin-source/issues/346)) ([7a657dd](https://github.com/salesforcecli/plugin-source/commit/7a657dde6dc8ffb1222034be11bd239b294b074f)) - - +- bump stl for customField status and pull ([#346](https://github.com/salesforcecli/plugin-source/issues/346)) ([7a657dd](https://github.com/salesforcecli/plugin-source/commit/7a657dde6dc8ffb1222034be11bd239b294b074f)) ## [1.6.1](https://github.com/salesforcecli/plugin-source/compare/v1.6.0...v1.6.1) (2021-12-02) - - # [1.6.0](https://github.com/salesforcecli/plugin-source/compare/v1.5.5...v1.6.0) (2021-12-02) - ### Features -* bump deps ([#339](https://github.com/salesforcecli/plugin-source/issues/339)) ([ef58621](https://github.com/salesforcecli/plugin-source/commit/ef5862195a3e5c777ab8df0d2fc5782b1d692ff0)) - - +- bump deps ([#339](https://github.com/salesforcecli/plugin-source/issues/339)) ([ef58621](https://github.com/salesforcecli/plugin-source/commit/ef5862195a3e5c777ab8df0d2fc5782b1d692ff0)) ## [1.5.5](https://github.com/salesforcecli/plugin-source/compare/v1.5.4...v1.5.5) (2021-12-01) - ### Bug Fixes -* delete bundle component and deploy 'new' bundle ([6af9705](https://github.com/salesforcecli/plugin-source/commit/6af9705f61df6743641565eb7bfbe7d20a08c495)) - - +- delete bundle component and deploy 'new' bundle ([6af9705](https://github.com/salesforcecli/plugin-source/commit/6af9705f61df6743641565eb7bfbe7d20a08c495)) ## [1.5.4](https://github.com/salesforcecli/plugin-source/compare/v1.5.3...v1.5.4) (2021-11-23) - ### Bug Fixes -* conditionally include folder ([#309](https://github.com/salesforcecli/plugin-source/issues/309)) ([6a7c936](https://github.com/salesforcecli/plugin-source/commit/6a7c9366a88dc7ea332ba3db1a5658a3b0387d6e)) - - +- conditionally include folder ([#309](https://github.com/salesforcecli/plugin-source/issues/309)) ([6a7c936](https://github.com/salesforcecli/plugin-source/commit/6a7c9366a88dc7ea332ba3db1a5658a3b0387d6e)) ## [1.5.3](https://github.com/salesforcecli/plugin-source/compare/v1.5.2...v1.5.3) (2021-11-18) - - ## [1.5.2](https://github.com/salesforcecli/plugin-source/compare/v1.5.1...v1.5.2) (2021-11-18) - - ## [1.5.1](https://github.com/salesforcecli/plugin-source/compare/v1.5.0...v1.5.1) (2021-11-18) - - # [1.5.0](https://github.com/salesforcecli/plugin-source/compare/v1.4.3...v1.5.0) (2021-11-16) - ### Features -* add mdapi:deploy:cancel command, refactor base classes to support MDAPI and SOURCE stash keys ([#301](https://github.com/salesforcecli/plugin-source/issues/301)) ([9dcc3e7](https://github.com/salesforcecli/plugin-source/commit/9dcc3e7bc1be13d1dcb0df13b3f7710407f9e977)) - - +- add mdapi:deploy:cancel command, refactor base classes to support MDAPI and SOURCE stash keys ([#301](https://github.com/salesforcecli/plugin-source/issues/301)) ([9dcc3e7](https://github.com/salesforcecli/plugin-source/commit/9dcc3e7bc1be13d1dcb0df13b3f7710407f9e977)) ## [1.4.3](https://github.com/salesforcecli/plugin-source/compare/v1.4.2...v1.4.3) (2021-11-15) - ### Bug Fixes -* add back missing help for listmetadata/describemetadata ([#295](https://github.com/salesforcecli/plugin-source/issues/295)) ([f641d83](https://github.com/salesforcecli/plugin-source/commit/f641d8311905d4aa68bcba4679674e4afa8868c1)) - - +- add back missing help for listmetadata/describemetadata ([#295](https://github.com/salesforcecli/plugin-source/issues/295)) ([f641d83](https://github.com/salesforcecli/plugin-source/commit/f641d8311905d4aa68bcba4679674e4afa8868c1)) ## [1.4.2](https://github.com/salesforcecli/plugin-source/compare/v1.4.1...v1.4.2) (2021-11-11) - ### Bug Fixes -* handle a corrupt stash.json file ([#291](https://github.com/salesforcecli/plugin-source/issues/291)) ([ac15a24](https://github.com/salesforcecli/plugin-source/commit/ac15a2433977bbd801fe54e70568bcf176ec0f1b)) - - +- handle a corrupt stash.json file ([#291](https://github.com/salesforcecli/plugin-source/issues/291)) ([ac15a24](https://github.com/salesforcecli/plugin-source/commit/ac15a2433977bbd801fe54e70568bcf176ec0f1b)) ## [1.4.1](https://github.com/salesforcecli/plugin-source/compare/v1.4.0...v1.4.1) (2021-11-11) - - # [1.4.0](https://github.com/salesforcecli/plugin-source/compare/v1.3.1...v1.4.0) (2021-11-09) - ### Features -* listmetadata and describemetadata ([b00a59a](https://github.com/salesforcecli/plugin-source/commit/b00a59a3c06cd81b121c306b6b9af3ee581a61ad)) - - +- listmetadata and describemetadata ([b00a59a](https://github.com/salesforcecli/plugin-source/commit/b00a59a3c06cd81b121c306b6b9af3ee581a61ad)) ## [1.3.1](https://github.com/salesforcecli/plugin-source/compare/v1.3.0...v1.3.1) (2021-10-28) - ### Bug Fixes -* bump SDR to 5.1.1 ([#266](https://github.com/salesforcecli/plugin-source/issues/266)) ([ff6a4f7](https://github.com/salesforcecli/plugin-source/commit/ff6a4f74401668faec6404f941ce5cf73da426ff)) - - +- bump SDR to 5.1.1 ([#266](https://github.com/salesforcecli/plugin-source/issues/266)) ([ff6a4f7](https://github.com/salesforcecli/plugin-source/commit/ff6a4f74401668faec6404f941ce5cf73da426ff)) # [1.3.0](https://github.com/salesforcecli/plugin-source/compare/v1.2.6...v1.3.0) (2021-10-28) - ### Features -* source tracking beta commands ([b871774](https://github.com/salesforcecli/plugin-source/commit/b87177498c184580db7e3bd81f164ddc77e6de0b)), closes [#253](https://github.com/salesforcecli/plugin-source/issues/253) [#251](https://github.com/salesforcecli/plugin-source/issues/251) [#230](https://github.com/salesforcecli/plugin-source/issues/230) [#260](https://github.com/salesforcecli/plugin-source/issues/260) [#259](https://github.com/salesforcecli/plugin-source/issues/259) - - +- source tracking beta commands ([b871774](https://github.com/salesforcecli/plugin-source/commit/b87177498c184580db7e3bd81f164ddc77e6de0b)), closes [#253](https://github.com/salesforcecli/plugin-source/issues/253) [#251](https://github.com/salesforcecli/plugin-source/issues/251) [#230](https://github.com/salesforcecli/plugin-source/issues/230) [#260](https://github.com/salesforcecli/plugin-source/issues/260) [#259](https://github.com/salesforcecli/plugin-source/issues/259) ## [1.2.6](https://github.com/salesforcecli/plugin-source/compare/v1.2.5...v1.2.6) (2021-10-21) - ### Bug Fixes -* use cross-env for test:nuts script ([#260](https://github.com/salesforcecli/plugin-source/issues/260)) ([76627fb](https://github.com/salesforcecli/plugin-source/commit/76627fb21c62a4fb140c87ccfc266accd79af3fd)) - - +- use cross-env for test:nuts script ([#260](https://github.com/salesforcecli/plugin-source/issues/260)) ([76627fb](https://github.com/salesforcecli/plugin-source/commit/76627fb21c62a4fb140c87ccfc266accd79af3fd)) ## [1.2.5](https://github.com/salesforcecli/plugin-source/compare/v1.2.4...v1.2.5) (2021-10-21) - - ## [1.2.4](https://github.com/salesforcecli/plugin-source/compare/v1.2.3...v1.2.4) (2021-10-12) - - ## [1.2.3](https://github.com/salesforcecli/plugin-source/compare/v1.2.1...v1.2.3) (2021-10-11) - ### Bug Fixes -* add back missing long parameter descriptions for some force:source commands ([#241](https://github.com/salesforcecli/plugin-source/issues/241)) ([d87671b](https://github.com/salesforcecli/plugin-source/commit/d87671b4987317d395873d6ef382e6a3ca2080e5)) -* remote-only deletes now supported ([#220](https://github.com/salesforcecli/plugin-source/issues/220)) ([fed3ff4](https://github.com/salesforcecli/plugin-source/commit/fed3ff496e732c6b960ae5838ea302e6b51e9029)) - - +- add back missing long parameter descriptions for some force:source commands ([#241](https://github.com/salesforcecli/plugin-source/issues/241)) ([d87671b](https://github.com/salesforcecli/plugin-source/commit/d87671b4987317d395873d6ef382e6a3ca2080e5)) +- remote-only deletes now supported ([#220](https://github.com/salesforcecli/plugin-source/issues/220)) ([fed3ff4](https://github.com/salesforcecli/plugin-source/commit/fed3ff496e732c6b960ae5838ea302e6b51e9029)) ## [1.2.1](https://github.com/salesforcecli/plugin-source/compare/v1.2.0...v1.2.1) (2021-10-05) - ### Bug Fixes -* bump deps and use internal fs ([#242](https://github.com/salesforcecli/plugin-source/issues/242)) ([6e81996](https://github.com/salesforcecli/plugin-source/commit/6e81996187f32a9ade92a48e7400601ff41602ce)) - - +- bump deps and use internal fs ([#242](https://github.com/salesforcecli/plugin-source/issues/242)) ([6e81996](https://github.com/salesforcecli/plugin-source/commit/6e81996187f32a9ade92a48e7400601ff41602ce)) # [1.2.0](https://github.com/salesforcecli/plugin-source/compare/v1.1.1...v1.2.0) (2021-09-29) - ### Features -* warning label for source:open ([#231](https://github.com/salesforcecli/plugin-source/issues/231)) ([62c7161](https://github.com/salesforcecli/plugin-source/commit/62c71614e2d0d4add9e29fda9c55dc7b639b56ea)) - - +- warning label for source:open ([#231](https://github.com/salesforcecli/plugin-source/issues/231)) ([62c7161](https://github.com/salesforcecli/plugin-source/commit/62c71614e2d0d4add9e29fda9c55dc7b639b56ea)) ## [1.1.1](https://github.com/salesforcecli/plugin-source/compare/v1.1.0...v1.1.1) (2021-09-27) - - # [1.1.0](https://github.com/salesforcecli/plugin-source/compare/v1.0.16...v1.1.0) (2021-09-24) - ### Bug Fixes -* find server errors and display them with FileResponse errors ([#210](https://github.com/salesforcecli/plugin-source/issues/210)) ([99df1ca](https://github.com/salesforcecli/plugin-source/commit/99df1ca41e83eba15646545f94c1e2ff713a6da9)) - +- find server errors and display them with FileResponse errors ([#210](https://github.com/salesforcecli/plugin-source/issues/210)) ([99df1ca](https://github.com/salesforcecli/plugin-source/commit/99df1ca41e83eba15646545f94c1e2ff713a6da9)) ### Features -* source:delete ([#199](https://github.com/salesforcecli/plugin-source/issues/199)) ([4c443c8](https://github.com/salesforcecli/plugin-source/commit/4c443c818c64829e0043932fb6fc4c0823207ebd)) - - +- source:delete ([#199](https://github.com/salesforcecli/plugin-source/issues/199)) ([4c443c8](https://github.com/salesforcecli/plugin-source/commit/4c443c818c64829e0043932fb6fc4c0823207ebd)) ## [1.0.16](https://github.com/salesforcecli/plugin-source/compare/v1.0.15...v1.0.16) (2021-09-10) - - ## [1.0.15](https://github.com/salesforcecli/plugin-source/compare/v1.0.14...v1.0.15) (2021-09-09) - ### Bug Fixes -* bump SDR to 4.4.1 ([#207](https://github.com/salesforcecli/plugin-source/issues/207)) ([d80ddf3](https://github.com/salesforcecli/plugin-source/commit/d80ddf30b7aa63129ffcbb40785c3873bc8c8f6d)) - - +- bump SDR to 4.4.1 ([#207](https://github.com/salesforcecli/plugin-source/issues/207)) ([d80ddf3](https://github.com/salesforcecli/plugin-source/commit/d80ddf30b7aa63129ffcbb40785c3873bc8c8f6d)) ## [1.0.14](https://github.com/salesforcecli/plugin-source/compare/v1.0.13...v1.0.14) (2021-09-09) - ### Bug Fixes -* release with new SDR version ([e803bc8](https://github.com/salesforcecli/plugin-source/commit/e803bc84f8a498bd6cea1f7c363fb5482b45e034)) - - +- release with new SDR version ([e803bc8](https://github.com/salesforcecli/plugin-source/commit/e803bc84f8a498bd6cea1f7c363fb5482b45e034)) ## [1.0.13](https://github.com/salesforcecli/plugin-source/compare/v1.0.12...v1.0.13) (2021-09-08) - - ## [1.0.12](https://github.com/salesforcecli/plugin-source/compare/v1.0.11...v1.0.12) (2021-08-26) - ### Bug Fixes -* force a release that updates SDR dependency ([b08ef1f](https://github.com/salesforcecli/plugin-source/commit/b08ef1f21d673353d483921a907d945f74584340)) - - +- force a release that updates SDR dependency ([b08ef1f](https://github.com/salesforcecli/plugin-source/commit/b08ef1f21d673353d483921a907d945f74584340)) ## [1.0.11](https://github.com/salesforcecli/plugin-source/compare/v1.0.10...v1.0.11) (2021-08-26) - ### Bug Fixes -* trim metadata type, and name to prevent unnecessary errors ([#179](https://github.com/salesforcecli/plugin-source/issues/179)) ([2011caa](https://github.com/salesforcecli/plugin-source/commit/2011caae414c9c4ac6e51e9d3a1da50513d3dc77)) - - +- trim metadata type, and name to prevent unnecessary errors ([#179](https://github.com/salesforcecli/plugin-source/issues/179)) ([2011caa](https://github.com/salesforcecli/plugin-source/commit/2011caae414c9c4ac6e51e9d3a1da50513d3dc77)) ## [1.0.10](https://github.com/salesforcecli/plugin-source/compare/v1.0.9...v1.0.10) (2021-08-20) - ### Bug Fixes -* wildcard metadata retrieves will now fetch source not in the project ([#177](https://github.com/salesforcecli/plugin-source/issues/177)) ([3e542c3](https://github.com/salesforcecli/plugin-source/commit/3e542c39bf9b6591c6afd4696809ea28e4b98678)) - - +- wildcard metadata retrieves will now fetch source not in the project ([#177](https://github.com/salesforcecli/plugin-source/issues/177)) ([3e542c3](https://github.com/salesforcecli/plugin-source/commit/3e542c39bf9b6591c6afd4696809ea28e4b98678)) ## [1.0.9](https://github.com/salesforcecli/plugin-source/compare/v1.0.7...v1.0.9) (2021-08-12) - ### Bug Fixes -* update command long descriptions ([#174](https://github.com/salesforcecli/plugin-source/issues/174)) ([12f1301](https://github.com/salesforcecli/plugin-source/commit/12f1301bc387f3d7ddcb5f6393bbcf20d038eb1c)) - - +- update command long descriptions ([#174](https://github.com/salesforcecli/plugin-source/issues/174)) ([12f1301](https://github.com/salesforcecli/plugin-source/commit/12f1301bc387f3d7ddcb5f6393bbcf20d038eb1c)) ## [1.0.7](https://github.com/salesforcecli/plugin-source/compare/v1.0.6...v1.0.7) (2021-08-05) - ### Bug Fixes -* bump SDR to 4.0.2 ([#169](https://github.com/salesforcecli/plugin-source/issues/169)) ([f750a3b](https://github.com/salesforcecli/plugin-source/commit/f750a3b9e841a9f6fe22e65093cb58886db69d93)) - - +- bump SDR to 4.0.2 ([#169](https://github.com/salesforcecli/plugin-source/issues/169)) ([f750a3b](https://github.com/salesforcecli/plugin-source/commit/f750a3b9e841a9f6fe22e65093cb58886db69d93)) ## [1.0.6](https://github.com/salesforcecli/plugin-source/compare/v1.0.5...v1.0.6) (2021-07-30) - - ## [1.0.5](https://github.com/salesforcecli/plugin-source/compare/v1.0.3...v1.0.5) (2021-07-29) - ### Bug Fixes -* add verbose test detail when deploying with tests ([#151](https://github.com/salesforcecli/plugin-source/issues/151)) ([1485c0e](https://github.com/salesforcecli/plugin-source/commit/1485c0e47cba4faf22f0420a561f8986e229ada0)) -* bump to 1.0.5 ([#160](https://github.com/salesforcecli/plugin-source/issues/160)) ([b0716cf](https://github.com/salesforcecli/plugin-source/commit/b0716cf0096727137ecfaa1e9e687278d0a046fd)) -* missing metadata type error matches toolbelt ([#155](https://github.com/salesforcecli/plugin-source/issues/155)) ([45ec6d0](https://github.com/salesforcecli/plugin-source/commit/45ec6d069b7d50642daccb3214e6ae8d0bdb6db1)) - - +- add verbose test detail when deploying with tests ([#151](https://github.com/salesforcecli/plugin-source/issues/151)) ([1485c0e](https://github.com/salesforcecli/plugin-source/commit/1485c0e47cba4faf22f0420a561f8986e229ada0)) +- bump to 1.0.5 ([#160](https://github.com/salesforcecli/plugin-source/issues/160)) ([b0716cf](https://github.com/salesforcecli/plugin-source/commit/b0716cf0096727137ecfaa1e9e687278d0a046fd)) +- missing metadata type error matches toolbelt ([#155](https://github.com/salesforcecli/plugin-source/issues/155)) ([45ec6d0](https://github.com/salesforcecli/plugin-source/commit/45ec6d069b7d50642daccb3214e6ae8d0bdb6db1)) ## [1.0.3](https://github.com/salesforcecli/plugin-source/compare/v1.0.2...v1.0.3) (2021-07-28) - ### Bug Fixes -* deploy:report now respects the wait flag ([#153](https://github.com/salesforcecli/plugin-source/issues/153)) ([c194f7c](https://github.com/salesforcecli/plugin-source/commit/c194f7c6907074fef8ac2b4e450c511966b83f5f)) - - +- deploy:report now respects the wait flag ([#153](https://github.com/salesforcecli/plugin-source/issues/153)) ([c194f7c](https://github.com/salesforcecli/plugin-source/commit/c194f7c6907074fef8ac2b4e450c511966b83f5f)) ## [1.0.2](https://github.com/salesforcecli/plugin-source/compare/v1.0.1...v1.0.2) (2021-07-26) - ### Bug Fixes -* throw deploy error when missing required params ([#150](https://github.com/salesforcecli/plugin-source/issues/150)) ([234c596](https://github.com/salesforcecli/plugin-source/commit/234c5968b31dc620dcdb318dccbcc1dcc1e11fde)) - - +- throw deploy error when missing required params ([#150](https://github.com/salesforcecli/plugin-source/issues/150)) ([234c596](https://github.com/salesforcecli/plugin-source/commit/234c5968b31dc620dcdb318dccbcc1dcc1e11fde)) ## [1.0.1](https://github.com/salesforcecli/plugin-source/compare/v1.0.0...v1.0.1) (2021-07-26) - ### Bug Fixes -* minor package fixes ([#152](https://github.com/salesforcecli/plugin-source/issues/152)) ([5aa593d](https://github.com/salesforcecli/plugin-source/commit/5aa593d2e20297c1b928b828679de9c3ea4809e6)) - - +- minor package fixes ([#152](https://github.com/salesforcecli/plugin-source/issues/152)) ([5aa593d](https://github.com/salesforcecli/plugin-source/commit/5aa593d2e20297c1b928b828679de9c3ea4809e6)) # [1.0.0](https://github.com/salesforcecli/plugin-source/compare/v0.1.22...v1.0.0) (2021-07-22) - ### Bug Fixes -* deploy errors are reported properly ([#146](https://github.com/salesforcecli/plugin-source/issues/146)) ([08fbbdd](https://github.com/salesforcecli/plugin-source/commit/08fbbdd2c919b1000fcdb253d9d63babf643ded1)) -* retrieve package names output ([#149](https://github.com/salesforcecli/plugin-source/issues/149)) ([7350488](https://github.com/salesforcecli/plugin-source/commit/7350488f2ac7e7d0fa1c0ffef58c7b60d74fb423)) -* set sourceApiVersion on the ComponentSet ([#147](https://github.com/salesforcecli/plugin-source/issues/147)) ([46c15ba](https://github.com/salesforcecli/plugin-source/commit/46c15ba5d5f783a09002c81870a155d0691fd162)) - - +- deploy errors are reported properly ([#146](https://github.com/salesforcecli/plugin-source/issues/146)) ([08fbbdd](https://github.com/salesforcecli/plugin-source/commit/08fbbdd2c919b1000fcdb253d9d63babf643ded1)) +- retrieve package names output ([#149](https://github.com/salesforcecli/plugin-source/issues/149)) ([7350488](https://github.com/salesforcecli/plugin-source/commit/7350488f2ac7e7d0fa1c0ffef58c7b60d74fb423)) +- set sourceApiVersion on the ComponentSet ([#147](https://github.com/salesforcecli/plugin-source/issues/147)) ([46c15ba](https://github.com/salesforcecli/plugin-source/commit/46c15ba5d5f783a09002c81870a155d0691fd162)) ## [0.1.22](https://github.com/salesforcecli/plugin-source/compare/v0.1.21...v0.1.22) (2021-06-28) - ### Bug Fixes -* display retrieve warnings ([#121](https://github.com/salesforcecli/plugin-source/issues/121)) ([a2330ed](https://github.com/salesforcecli/plugin-source/commit/a2330edb51408a91169608a5d518423dd919231b)) - - +- display retrieve warnings ([#121](https://github.com/salesforcecli/plugin-source/issues/121)) ([a2330ed](https://github.com/salesforcecli/plugin-source/commit/a2330edb51408a91169608a5d518423dd919231b)) ## [0.1.21](https://github.com/salesforcecli/plugin-source/compare/v0.1.20...v0.1.21) (2021-06-24) - ### Bug Fixes -* postretrieve hook payload is now the file responses ([#120](https://github.com/salesforcecli/plugin-source/issues/120)) ([a505389](https://github.com/salesforcecli/plugin-source/commit/a50538905a9bb02192c9803fec49000baf6a588f)) - - +- postretrieve hook payload is now the file responses ([#120](https://github.com/salesforcecli/plugin-source/issues/120)) ([a505389](https://github.com/salesforcecli/plugin-source/commit/a50538905a9bb02192c9803fec49000baf6a588f)) ## [0.1.20](https://github.com/salesforcecli/plugin-source/compare/v0.1.19...v0.1.20) (2021-06-17) - ### Bug Fixes -* temporary polling fix ([#114](https://github.com/salesforcecli/plugin-source/issues/114)) ([6c6a3ab](https://github.com/salesforcecli/plugin-source/commit/6c6a3ab6b1a4e36efa974627bc944e37e875c3d6)) - - +- temporary polling fix ([#114](https://github.com/salesforcecli/plugin-source/issues/114)) ([6c6a3ab](https://github.com/salesforcecli/plugin-source/commit/6c6a3ab6b1a4e36efa974627bc944e37e875c3d6)) ## [0.1.19](https://github.com/salesforcecli/plugin-source/compare/v0.0.19...v0.1.19) (2021-06-12) - ### Features -* add support for async deploys ([#89](https://github.com/salesforcecli/plugin-source/issues/89)) ([e7d7215](https://github.com/salesforcecli/plugin-source/commit/e7d721561542baab8abcf6a8d482e7bb9653176a)), closes [#108](https://github.com/salesforcecli/plugin-source/issues/108) [#84](https://github.com/salesforcecli/plugin-source/issues/84) [#85](https://github.com/salesforcecli/plugin-source/issues/85) [#88](https://github.com/salesforcecli/plugin-source/issues/88) [#80](https://github.com/salesforcecli/plugin-source/issues/80) [#90](https://github.com/salesforcecli/plugin-source/issues/90) [#105](https://github.com/salesforcecli/plugin-source/issues/105) [#106](https://github.com/salesforcecli/plugin-source/issues/106) - - +- add support for async deploys ([#89](https://github.com/salesforcecli/plugin-source/issues/89)) ([e7d7215](https://github.com/salesforcecli/plugin-source/commit/e7d721561542baab8abcf6a8d482e7bb9653176a)), closes [#108](https://github.com/salesforcecli/plugin-source/issues/108) [#84](https://github.com/salesforcecli/plugin-source/issues/84) [#85](https://github.com/salesforcecli/plugin-source/issues/85) [#88](https://github.com/salesforcecli/plugin-source/issues/88) [#80](https://github.com/salesforcecli/plugin-source/issues/80) [#90](https://github.com/salesforcecli/plugin-source/issues/90) [#105](https://github.com/salesforcecli/plugin-source/issues/105) [#106](https://github.com/salesforcecli/plugin-source/issues/106) ## [0.0.19](https://github.com/salesforcecli/plugin-source/compare/v0.0.18...v0.0.19) (2021-06-10) - - ## [0.0.18](https://github.com/salesforcecli/plugin-source/compare/v0.0.17...v0.0.18) (2021-06-09) - - ## [0.0.17](https://github.com/salesforcecli/plugin-source/compare/v0.0.16...v0.0.17) (2021-06-03) - - ## [0.0.16](https://github.com/salesforcecli/plugin-source/compare/v0.0.15...v0.0.16) (2021-05-20) - - ## [0.0.15](https://github.com/salesforcecli/plugin-source/compare/v0.0.14...v0.0.15) (2021-05-07) - - ## [0.0.14](https://github.com/salesforcecli/plugin-source/compare/v0.0.13...v0.0.14) (2021-05-04) - ### Bug Fixes -* support hooks for deployRecentValidation and async deploys ([#75](https://github.com/salesforcecli/plugin-source/issues/75)) ([ac787f9](https://github.com/salesforcecli/plugin-source/commit/ac787f9f8238bd09d44878a6c9994384a5c567c7)) - - +- support hooks for deployRecentValidation and async deploys ([#75](https://github.com/salesforcecli/plugin-source/issues/75)) ([ac787f9](https://github.com/salesforcecli/plugin-source/commit/ac787f9f8238bd09d44878a6c9994384a5c567c7)) ## [0.0.13](https://github.com/salesforcecli/plugin-source/compare/v0.0.12...v0.0.13) (2021-05-04) - ### Bug Fixes -* deploy output fixes ([#74](https://github.com/salesforcecli/plugin-source/issues/74)) ([d1bb8be](https://github.com/salesforcecli/plugin-source/commit/d1bb8be605458aea81503c1e5bc6974fe03c0ec6)) - - +- deploy output fixes ([#74](https://github.com/salesforcecli/plugin-source/issues/74)) ([d1bb8be](https://github.com/salesforcecli/plugin-source/commit/d1bb8be605458aea81503c1e5bc6974fe03c0ec6)) ## [0.0.12](https://github.com/salesforcecli/plugin-source/compare/v0.0.11...v0.0.12) (2021-05-01) - - ## [0.0.11](https://github.com/salesforcecli/plugin-source/compare/v0.0.10...v0.0.11) (2021-04-29) - ### Bug Fixes -* add NUT testing LWC bug ([#70](https://github.com/salesforcecli/plugin-source/issues/70)) ([d6cb456](https://github.com/salesforcecli/plugin-source/commit/d6cb456cdf127e7e896511b8af7606fce25973cb)) - - +- add NUT testing LWC bug ([#70](https://github.com/salesforcecli/plugin-source/issues/70)) ([d6cb456](https://github.com/salesforcecli/plugin-source/commit/d6cb456cdf127e7e896511b8af7606fce25973cb)) ## [0.0.10](https://github.com/salesforcecli/plugin-source/compare/v0.0.9...v0.0.10) (2021-04-23) - ### Bug Fixes -* new hooks, updated tests ([#69](https://github.com/salesforcecli/plugin-source/issues/69)) ([81e1058](https://github.com/salesforcecli/plugin-source/commit/81e10581456ceccb4b3e07f3d1310bb18bef25ff)) - - +- new hooks, updated tests ([#69](https://github.com/salesforcecli/plugin-source/issues/69)) ([81e1058](https://github.com/salesforcecli/plugin-source/commit/81e10581456ceccb4b3e07f3d1310bb18bef25ff)) ## [0.0.9](https://github.com/salesforcecli/plugin-source/compare/v0.0.8...v0.0.9) (2021-04-13) - - ## [0.0.8](https://github.com/salesforcecli/plugin-source/compare/v0.0.7...v0.0.8) (2021-04-13) - ### Features -* support split custom labels ([#62](https://github.com/salesforcecli/plugin-source/issues/62)) ([ab290a7](https://github.com/salesforcecli/plugin-source/commit/ab290a78fcdb5e4d8da2fbdcfc3e49e783e848ac)) - - +- support split custom labels ([#62](https://github.com/salesforcecli/plugin-source/issues/62)) ([ab290a7](https://github.com/salesforcecli/plugin-source/commit/ab290a78fcdb5e4d8da2fbdcfc3e49e783e848ac)) ## [0.0.7](https://github.com/salesforcecli/plugin-source/compare/v0.0.6...v0.0.7) (2021-04-09) - ### Bug Fixes -* add deploy:cancel ([#66](https://github.com/salesforcecli/plugin-source/issues/66)) ([1e673a2](https://github.com/salesforcecli/plugin-source/commit/1e673a28943d306f85baa1728e9f438b570cc0e3)) - - +- add deploy:cancel ([#66](https://github.com/salesforcecli/plugin-source/issues/66)) ([1e673a2](https://github.com/salesforcecli/plugin-source/commit/1e673a28943d306f85baa1728e9f438b570cc0e3)) ## [0.0.6](https://github.com/salesforcecli/plugin-source/compare/v0.0.5...v0.0.6) (2021-04-09) - ### Bug Fixes -* add progress bar to deploy ([#65](https://github.com/salesforcecli/plugin-source/issues/65)) ([df2f5e0](https://github.com/salesforcecli/plugin-source/commit/df2f5e0de2dea2d509d4b0a3c0ceae8cc75411b9)) - - +- add progress bar to deploy ([#65](https://github.com/salesforcecli/plugin-source/issues/65)) ([df2f5e0](https://github.com/salesforcecli/plugin-source/commit/df2f5e0de2dea2d509d4b0a3c0ceae8cc75411b9)) ## [0.0.5](https://github.com/salesforcecli/plugin-source/compare/v0.0.4...v0.0.5) (2021-04-07) - ### Bug Fixes -* add convert command ([#64](https://github.com/salesforcecli/plugin-source/issues/64)) ([26e36b2](https://github.com/salesforcecli/plugin-source/commit/26e36b22f0402b9927834ecda63f24dc65f66d96)) - - +- add convert command ([#64](https://github.com/salesforcecli/plugin-source/issues/64)) ([26e36b2](https://github.com/salesforcecli/plugin-source/commit/26e36b22f0402b9927834ecda63f24dc65f66d96)) ## [0.0.4](https://github.com/salesforcecli/plugin-source/compare/v0.0.3...v0.0.4) (2021-04-05) - - ## [0.0.3](https://github.com/salesforcecli/plugin-source/compare/v0.0.2...v0.0.3) (2021-04-02) - - ## [0.0.2](https://github.com/salesforcecli/plugin-source/compare/v0.0.1...v0.0.2) (2021-03-03) - ### Bug Fixes -* add initial NUTs, u-tests ([ca2076c](https://github.com/salesforcecli/plugin-source/commit/ca2076ca7ee1c9b0dcd23e096569006e33ecd149)) -* add retrieve via packageNames param ([2fb3217](https://github.com/salesforcecli/plugin-source/commit/2fb32170044d3d39295f2006ab6ab73a09260b43)) -* add wait to retrieve, move min wait and default wait to static members ([74a3cdd](https://github.com/salesforcecli/plugin-source/commit/74a3cddcb3d2688068f856d767e08b59d83d8adf)) -* deploy first pass ([c6665ab](https://github.com/salesforcecli/plugin-source/commit/c6665abc3fcbf381ccbdc87f40bc97b959a0d2f0)) -* fix sorting logic ([70876e3](https://github.com/salesforcecli/plugin-source/commit/70876e3edb2f2a5169a29e2ede011608fac81bc0)) -* fixed some of Steve's comments ([4596da6](https://github.com/salesforcecli/plugin-source/commit/4596da6863866236c890a993fd111ff58a092aa9)) -* match library changes for deploy ([abba216](https://github.com/salesforcecli/plugin-source/commit/abba216ffb323111837e1621a7e4ef92525eb404)) -* remove packagename, change some types ([b1d8b82](https://github.com/salesforcecli/plugin-source/commit/b1d8b82533e0df0b8b9d13306bbc1c0c7cbbfbd1)) -* source:retrieve working as a user, json and hook info wrong, missing tests ([7828c3f](https://github.com/salesforcecli/plugin-source/commit/7828c3fa64515b71c1ec6641efd79cdfe10b40da)) - - +- add initial NUTs, u-tests ([ca2076c](https://github.com/salesforcecli/plugin-source/commit/ca2076ca7ee1c9b0dcd23e096569006e33ecd149)) +- add retrieve via packageNames param ([2fb3217](https://github.com/salesforcecli/plugin-source/commit/2fb32170044d3d39295f2006ab6ab73a09260b43)) +- add wait to retrieve, move min wait and default wait to static members ([74a3cdd](https://github.com/salesforcecli/plugin-source/commit/74a3cddcb3d2688068f856d767e08b59d83d8adf)) +- deploy first pass ([c6665ab](https://github.com/salesforcecli/plugin-source/commit/c6665abc3fcbf381ccbdc87f40bc97b959a0d2f0)) +- fix sorting logic ([70876e3](https://github.com/salesforcecli/plugin-source/commit/70876e3edb2f2a5169a29e2ede011608fac81bc0)) +- fixed some of Steve's comments ([4596da6](https://github.com/salesforcecli/plugin-source/commit/4596da6863866236c890a993fd111ff58a092aa9)) +- match library changes for deploy ([abba216](https://github.com/salesforcecli/plugin-source/commit/abba216ffb323111837e1621a7e4ef92525eb404)) +- remove packagename, change some types ([b1d8b82](https://github.com/salesforcecli/plugin-source/commit/b1d8b82533e0df0b8b9d13306bbc1c0c7cbbfbd1)) +- source:retrieve working as a user, json and hook info wrong, missing tests ([7828c3f](https://github.com/salesforcecli/plugin-source/commit/7828c3fa64515b71c1ec6641efd79cdfe10b40da)) ## [0.0.1](https://github.com/salesforcecli/plugin-source/compare/598ff29125185b1644fc5c009bcb4cf56115fb31...v0.0.1) (2021-02-08) - ### Bug Fixes -* add command files, test files, message files, remove template ([598ff29](https://github.com/salesforcecli/plugin-source/commit/598ff29125185b1644fc5c009bcb4cf56115fb31)) - - - +- add command files, test files, message files, remove template ([598ff29](https://github.com/salesforcecli/plugin-source/commit/598ff29125185b1644fc5c009bcb4cf56115fb31)) diff --git a/command-snapshot.json b/command-snapshot.json index efaec51a0..c22c366f4 100644 --- a/command-snapshot.json +++ b/command-snapshot.json @@ -5,12 +5,6 @@ "flags": ["json"], "alias": [] }, - { - "command": "force:mdapi:convert", - "plugin": "@salesforce/plugin-source", - "flags": ["api-version", "json", "loglevel", "manifest", "metadata", "metadatapath", "outputdir", "rootdir"], - "alias": ["force:mdapi:beta:convert"] - }, { "command": "force:mdapi:deploy", "plugin": "@salesforce/plugin-source", @@ -37,7 +31,7 @@ "wait", "zipfile" ], - "alias": ["force:mdapi:beta:deploy"] + "alias": [] }, { "command": "force:mdapi:deploy:cancel", @@ -61,7 +55,7 @@ "verbose", "wait" ], - "alias": ["force:mdapi:beta:deploy:report"] + "alias": [] }, { "command": "force:mdapi:retrieve", @@ -81,7 +75,7 @@ "wait", "zipfilename" ], - "alias": ["force:mdapi:beta:retrieve"] + "alias": [] }, { "command": "force:mdapi:retrieve:report", @@ -98,42 +92,6 @@ "wait", "zipfilename" ], - "alias": ["force:mdapi:beta:retrieve:report"] - }, - { - "command": "force:source:convert", - "plugin": "@salesforce/plugin-source", - "flags": [ - "api-version", - "json", - "loglevel", - "manifest", - "metadata", - "outputdir", - "packagename", - "rootdir", - "sourcepath" - ], - "alias": [] - }, - { - "command": "force:source:delete", - "plugin": "@salesforce/plugin-source", - "flags": [ - "api-version", - "checkonly", - "forceoverwrite", - "json", - "loglevel", - "metadata", - "noprompt", - "sourcepath", - "target-org", - "testlevel", - "tracksource", - "verbose", - "wait" - ], "alias": [] }, { @@ -196,34 +154,17 @@ "flags": ["json", "sourcepath"], "alias": [] }, - { - "command": "force:source:manifest:create", - "plugin": "@salesforce/plugin-source", - "flags": [ - "api-version", - "fromorg", - "includepackages", - "json", - "loglevel", - "manifestname", - "manifesttype", - "metadata", - "outputdir", - "sourcepath" - ], - "alias": [] - }, { "command": "force:source:pull", "plugin": "@salesforce/plugin-source", "flags": ["api-version", "forceoverwrite", "json", "loglevel", "target-org", "verbose", "wait"], - "alias": ["force:source:beta:pull"] + "alias": [] }, { "command": "force:source:push", "plugin": "@salesforce/plugin-source", "flags": ["api-version", "forceoverwrite", "ignorewarnings", "json", "loglevel", "quiet", "target-org", "wait"], - "alias": ["force:source:beta:push"] + "alias": [] }, { "command": "force:source:retrieve", @@ -250,18 +191,6 @@ "command": "force:source:status", "plugin": "@salesforce/plugin-source", "flags": ["api-version", "concise", "json", "local", "loglevel", "remote", "target-org"], - "alias": ["force:source:beta:status"] - }, - { - "command": "force:source:tracking:clear", - "plugin": "@salesforce/plugin-source", - "flags": ["api-version", "json", "loglevel", "noprompt", "target-org"], - "alias": ["force:source:beta:tracking:clear"] - }, - { - "command": "force:source:tracking:reset", - "plugin": "@salesforce/plugin-source", - "flags": ["api-version", "json", "loglevel", "noprompt", "revision", "target-org"], - "alias": ["force:source:beta:tracking:reset"] + "alias": [] } ] diff --git a/messages/cancel.md b/messages/cancel.md index 3856ce742..301d178d8 100644 --- a/messages/cancel.md +++ b/messages/cancel.md @@ -33,3 +33,7 @@ Number of minutes to wait for the command to complete and display results to the # CancelFailed The cancel command failed due to: %s + +# deprecation + +The '<%= command.id %>' command will be deprecated. Try using the %s command instead. diff --git a/messages/convert.md b/messages/convert.md deleted file mode 100644 index 82dad02ea..000000000 --- a/messages/convert.md +++ /dev/null @@ -1,60 +0,0 @@ -# description - -convert source into Metadata API format -Converts source-formatted files into metadata that you can deploy using Metadata API. -To convert source-formatted files into the metadata format, so that you can deploy them using Metadata API, -run "sfdx force:source:convert". Then deploy the metadata using "sfdx force:mdapi:deploy". - -To convert Metadata API–formatted files into the source format, run "sfdx force:mdapi:convert". - -To specify a package name that includes spaces, enclose the name in single quotes. - -# examples - -- $ sfdx force:source:convert -r path/to/source - -- $ sfdx force:source:convert -r path/to/source -d path/to/outputdir -n 'My Package' - -# flags.rootdir - -a source directory other than the default package to convert - -# flags.outputdir - -output directory to store the Metadata API–formatted files in - -# flags.packagename - -name of the package to associate with the metadata-formatted files - -# flags.manifest - -file path to manifest (package.xml) of metadata types to convert. - -# flags.sourcepath - -comma-separated list of paths to the local source files to convert - -# flags.metadata - -comma-separated list of metadata component names to convert - -# flagsLong.manifest - -- The complete path to the manifest (package.xml) file that specifies the metadata types to convert. - -- If you specify this parameter, don’t specify --metadata or --sourcepath. - -# flagsLong.sourcepath - -- A comma-separated list of paths to the local source files to convert. The supplied paths can be to a single file (in which case the operation is applied to only one file) or to a folder (in which case the operation is applied to all metadata types in the directory and its sub-directories). - -- If you specify this parameter, don’t specify --manifest or --metadata. - -# success - -Source was successfully converted to Metadata API format and written to the location: %s - -# convertFailed - -Failed to convert source diff --git a/messages/create.md b/messages/create.md deleted file mode 100644 index 16c565dc4..000000000 --- a/messages/create.md +++ /dev/null @@ -1,61 +0,0 @@ -# description - -create a project manifest that lists the metadata components you want to deploy or retrieve -Create a manifest from a list of metadata components (--metadata) or from one or more local directories that contain source files (--sourcepath). You can specify either of these parameters, not both. - -Use --manifesttype to specify the type of manifest you want to create. The resulting manifest files have specific names, such as the standard package.xml or destructiveChanges.xml to delete metadata. Valid values for this parameter, and their respective file names, are: - -package : package.xml (default) -pre : destructiveChangesPre.xml -post : destructiveChangesPost.xml -destroy : destructiveChanges.xml - -See https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_deploy_deleting_files.htm for information about these destructive manifest files. - -Use --manifestname to specify a custom name for the generated manifest if the pre-defined ones don’t suit your needs. You can specify either --manifesttype or --manifestname, but not both. - -# examples - -- $ sfdx force:source:manifest:create -m ApexClass - -- $ sfdx force:source:manifest:create -m ApexClass:MyApexClass --manifesttype destroy - -- $ sfdx force:source:manifest:create --sourcepath force-app --manifestname myNewManifest - -- $ sfdx force:source:manifest:create --fromorg test@myorg.com --includepackages unlocked - -# flags.includepackages - -comma-separated list of package types (managed, unlocked) whose metadata is included in the manifest; by default, metadata in packages is ignored - -# flags.fromorg - -username or alias of the org that contains the metadata components from which to build a manifest - -# flags.manifesttype - -type of manifest to create; the type determines the name of the created file - -# flags.manifestname - -name of a custom manifest file to create - -# flags.outputdir - -directory to save the created manifest - -# flags.sourcepath - -comma-separated list of paths to the local source files to include in the manifest - -# flags.metadata - -comma-separated list of names of metadata components to include in the manifest - -# success - -successfully wrote %s - -# successOutputDir - -successfully wrote %s to %s diff --git a/messages/delete.md b/messages/delete.md deleted file mode 100644 index d6ae12c06..000000000 --- a/messages/delete.md +++ /dev/null @@ -1,118 +0,0 @@ -# description - -delete source from your project and from a non-source-tracked org -IMPORTANT: Where possible, we changed noninclusive terms to align with our company value of Equality. We maintained certain terms to avoid any effect on customer implementations. - -Use this command to delete components from orgs that don’t have source tracking. -To remove deleted items from scratch orgs, which have change tracking, use "sfdx force:source:push". - -# examples - -- $ sfdx force:source:delete -m - -- $ sfdx force:source:delete -p path/to/source - -# flags.sourcepath - -comma-separated list of source file paths to delete - -# flags.metadata - -comma-separated list of names of metadata components to delete - -# flags.noprompt - -do not prompt for delete confirmation - -# flags.wait - -wait time for command to finish in minutes - -# flags.checkonly - -validate delete command but do not delete from the org or delete files locally - -# flags.testLevel - -deployment testing level - -# flags.runTests - -tests to run if --testlevel RunSpecifiedTests - -# flags.tracksource - -If the delete succeeds, update the source tracking information, similar to push - -# flags.forceoverwrite - -ignore conflict warnings and overwrite changes to the org - -# flags.verbose - -verbose output of delete result - -# flagsLong.checkonly - -- Validates the deleted metadata and runs all Apex tests, but prevents the deletion from being saved to the org. - -- If you change a field type from Master-Detail to Lookup or vice versa, that change isn’t supported when using the --checkonly parameter to test a deletion (validation). This kind of change isn’t supported for test deletions to avoid the risk of data loss or corruption. If a change that isn’t supported for test deletions is included in a deletion package, the test deletion fails and issues an error. - -- If your deletion package changes a field type from Master-Detail to Lookup or vice versa, you can still validate the changes prior to deploying to Production by performing a full deletion to another test Sandbox. A full deletion includes a validation of the changes as part of the deletion process. - -- Note: A Metadata API deletion that includes Master-Detail relationships deletes all detail records in the Recycle Bin in the following cases. - -- 1. For a deletion with a new Master-Detail field, soft delete (send to the Recycle Bin) all detail records before proceeding to delete the Master-Detail field, or the deletion fails. During the deletion, detail records are permanently deleted from the Recycle Bin and cannot be recovered. - -- 2. For a deletion that converts a Lookup field relationship to a Master-Detail relationship, detail records must reference a master record or be soft-deleted (sent to the Recycle Bin) for the deletion to succeed. However, a successful deletion permanently deletes any detail records in the Recycle Bin. - -# flagsLong.metadata - -- A comma-separated list of names of metadata components to delete from your project and your org. - -- If you specify this parameter, don’t specify --sourcepath. - -# flagsLong.sourcepath - -- A comma-separated list of paths to the local metadata to delete. The supplied paths can be a single file (in which case the operation is applied to only one file) or a folder (in which case the operation is applied to all metadata types in the directory and its sub-directories). - -- If you specify this parameter, don’t specify --metadata. - -# flagsLong.wait - -Number of minutes to wait for the command to complete and display results to the terminal window. If the command continues to run after the wait period, the CLI returns control of the terminal window to you. - -# flagsLong.testLevel - -- Specifies which level of deployment tests to run. Valid values are: - -- NoTestRun—No tests are run. This test level applies only to deployments to development environments, such as sandbox, Developer Edition, or trial orgs. This test level is the default for development environments. - -- RunLocalTests—All tests in your org are run, except the ones that originate from installed managed and unlocked packages. This test level is the default for production deployments that include Apex classes or triggers. - -- RunAllTestsInOrg—All tests in your org are run, including tests of managed packages. - -- If you don’t specify a test level, the default behavior depends on the contents of your deployment package. For more information, see “Running Tests in a Deployment” in the Metadata API Developer Guide. - -# localPrompt - -This operation will delete the following files on your computer and in your org: -%s - -# remotePrompt - -This operation will delete the following metadata in your org: -%s - -# deployPrompt - -This operation will deploy the following: -%s - -# areYouSure - -Are you sure you want to proceed (y/n)? - -# areYouSureCheckOnly - -Are you sure you want to proceed (this is only a check and won't actually delete anything) (y/n)? diff --git a/messages/deploy.md b/messages/deploy.md index bedb89147..26083ee60 100644 --- a/messages/deploy.md +++ b/messages/deploy.md @@ -259,3 +259,7 @@ You currently have files deleted locally. The deploy command will NOT delete the # asyncCoverageJunitWarning You requested an async deploy with code coverage or JUnit results. The reports will be available when the deploy completes. + +# deprecation + +The '<%= command.id %>' command will be deprecated. Try using the %s command instead. diff --git a/messages/ignored_list.md b/messages/ignored_list.md index 206da26ea..974336afc 100644 --- a/messages/ignored_list.md +++ b/messages/ignored_list.md @@ -15,3 +15,7 @@ file or directory of files that the command checks for foreceignored files # invalidSourcePath File or directory '%s' doesn't exist in your project. Specify one that exists and rerun the command. + +# deprecation + +The '<%= command.id %>' command will be deprecated. Try using the %s command instead. diff --git a/messages/md.cancel.md b/messages/md.cancel.md index 523e65125..8e2d1e175 100644 --- a/messages/md.cancel.md +++ b/messages/md.cancel.md @@ -40,3 +40,7 @@ job ID of the deployment you want to cancel; defaults to your most recent CLI de # CancelFailed The cancel command failed due to: %s + +# deprecation + +The '<%= command.id %>' command will be deprecated. Try using the %s command instead. diff --git a/messages/md.convert.md b/messages/md.convert.md deleted file mode 100644 index b084b0ca4..000000000 --- a/messages/md.convert.md +++ /dev/null @@ -1,58 +0,0 @@ -# description - -convert metadata from the Metadata API format into the source format -Converts metadata retrieved via Metadata API into the source format used in Salesforce DX projects. - -To use Salesforce CLI to work with components that you retrieved via Metadata API, first convert your files from the metadata format to the source format using "sfdx force:mdapi:convert". - -To convert files from the source format back to the metadata format, so that you can deploy them using "sfdx force:mdapi:deploy", run "sfdx force:source:convert". - -# examples - -- $ sfdx force:mdapi:convert -r path/to/metadata - -- $ sfdx force:mdapi:convert -r path/to/metadata -d path/to/outputdir - -# flags.rootdir - -the root directory containing the Metadata API–formatted metadata - -# flags.outputdir - -the output directory to store the source–formatted files - -# flags.manifest - -file path to manifest (package.xml) of metadata types to convert. - -# flags.metadatapath - -comma-separated list of metadata file paths to convert - -# flags.metadata - -comma-separated list of metadata component names to convert - -# flagsLong.rootdir - -The root directory that contains the metadata you retrieved using Metadata API. - -# flagsLong.outputdir - -The directory to store your files in after they’re converted to the source format. Can be an absolute or relative path. - -# flagsLong.manifest - -- The complete path to the manifest (package.xml) file that specifies the metadata types to convert. - -- If you specify this parameter, don’t specify --metadata or --sourcepath. - -# flagsLong.metadatapath - -- A comma-separated list of paths to the local metadata files to convert. The supplied paths can be to a single file (in which case the operation is applied to only one file) or to a folder (in which case the operation is applied to all metadata types in the directory and its sub-directories). - -- If you specify this parameter, don’t specify --manifest or --metadata. If the comma-separated list you’re supplying contains spaces, enclose the entire comma-separated list in one set of double quotes. - -# flagsLong.metadata - -A comma-separated list of metadata component names to convert. diff --git a/messages/md.deploy.md b/messages/md.deploy.md index 81af37f6c..5a9d7d2be 100644 --- a/messages/md.deploy.md +++ b/messages/md.deploy.md @@ -195,3 +195,7 @@ The deployment has been canceled by %s. # asyncCoverageJunitWarning You requested an async deploy with code coverage or JUnit results. The reports will be available when the deploy completes. + +# deprecation + +The '<%= command.id %>' command will be deprecated. Try using the %s command instead. diff --git a/messages/md.deployreport.md b/messages/md.deployreport.md index 205d13923..7939ef792 100644 --- a/messages/md.deployreport.md +++ b/messages/md.deployreport.md @@ -59,3 +59,7 @@ The number of minutes to wait for the command to complete. The default is –1 ( # usernameOutput Using specified username %s + +# deprecation + +The '<%= command.id %>' command will be deprecated. Try using the %s command instead. diff --git a/messages/md.retrieve.md b/messages/md.retrieve.md index 42d4fa20c..c2fda84ad 100644 --- a/messages/md.retrieve.md +++ b/messages/md.retrieve.md @@ -140,3 +140,7 @@ The jobid command parameter was not provided, neither directly nor from a previo To check the status of this retrieve, run "sfdx force:mdapi:retrieve:report %s". If the retrieve request has completed, the retrieved metadata zip file will be written to the retrieve target dir. + +# deprecation + +The '<%= command.id %>' command will be deprecated. Try using the %s command instead. diff --git a/messages/pull.md b/messages/pull.md index 359bc4c04..9e458ff8f 100644 --- a/messages/pull.md +++ b/messages/pull.md @@ -53,3 +53,7 @@ Retrieved Source Warnings # retrieveTimeout Your retrieve request did not complete within the specified wait time [%s minutes]. Try again with a longer wait time. + +# deprecation + +The '<%= command.id %>' command will be deprecated. Try using the %s command instead. diff --git a/messages/push.md b/messages/push.md index a2db03d3b..8c579ffd9 100644 --- a/messages/push.md +++ b/messages/push.md @@ -49,3 +49,7 @@ Push failed. %s # sequentialFail Check the order of your dependencies and ensure all metadata is included. + +# deprecation + +The '<%= command.id %>' command will be deprecated. Try using the %s command instead. diff --git a/messages/report.md b/messages/report.md index 42e0302ea..a6e770ca5 100644 --- a/messages/report.md +++ b/messages/report.md @@ -56,3 +56,7 @@ The job ID (asyncId) of the deployment you want to check. If not specified, the # mdapiDeployFailed The metadata deploy operation failed. + +# deprecation + +The '<%= command.id %>' command will be deprecated. Try using the %s command instead. diff --git a/messages/retrieve.md b/messages/retrieve.md index 00ed02c60..b5f3cfd6a 100644 --- a/messages/retrieve.md +++ b/messages/retrieve.md @@ -183,3 +183,7 @@ The retrieve target directory [%s] overlaps one of your package directories. Spe # apiVersionMsgDetailed %s v%s metadata from %s using the v%s SOAP API + +# deprecation + +The '<%= command.id %>' command will be deprecated. Try using the %s command instead. diff --git a/messages/status.md b/messages/status.md index f56fb17a7..73889b0d0 100644 --- a/messages/status.md +++ b/messages/status.md @@ -51,3 +51,7 @@ Source Status # noResults No local or remote changes found. + +# deprecation + +The '<%= command.id %>' command will be deprecated. Try using the %s command instead. diff --git a/messages/tracking.md b/messages/tracking.md index 106e5e502..3e0ed81fa 100644 --- a/messages/tracking.md +++ b/messages/tracking.md @@ -1,34 +1,3 @@ -# resetDescription - -reset local and remote source tracking - -WARNING: This command deletes or overwrites all existing source tracking files. Use with extreme caution. - -Resets local and remote source tracking so that the CLI no longer registers differences between your local files and those in the org. When you next run force:source:status, the CLI returns no results, even though conflicts might actually exist. The CLI then resumes tracking new source changes as usual. - -Use the --revision parameter to reset source tracking to a specific revision number of an org source member. To get the revision number, query the SourceMember Tooling API object with the force:data:soql:query command. For example: -$ sfdx force:data:soql:query -q "SELECT MemberName, MemberType, RevisionCounter FROM SourceMember" -t - -# clearDescription - -clear all local source tracking information - -WARNING: This command deletes or overwrites all existing source tracking files. Use with extreme caution. - -Clears all local source tracking information. When you next run force:source:status, the CLI displays all local and remote files as changed, and any files with the same name are listed as conflicts. - -# nopromptDescription - -do not prompt for source tracking override confirmation - -# revisionDescription - -reset to a specific SourceMember revision counter number - -# promptMessage - -WARNING: This operation will modify all your local source tracking files. The operation can have unintended consequences on all the force:source commands. Are you sure you want to proceed (y/n)? - # conflictMsg We couldn't complete the operation due to conflicts. Verify that you want to keep the existing versions, then run the command again with the --forceoverwrite (-f) option. diff --git a/package.json b/package.json index 57f88e1b6..9922db60a 100644 --- a/package.json +++ b/package.json @@ -1,46 +1,46 @@ { "name": "@salesforce/plugin-source", "description": "Commands to interact with source formatted metadata", - "version": "2.5.4", + "version": "2.8.0", "author": "Salesforce", "main": "lib/index.js", "bugs": "https://github.com/forcedotcom/cli/issues", "dependencies": { - "@oclif/core": "^2.3.0", + "@oclif/core": "^2.6.3", "@salesforce/apex-node": "^1.6.0", - "@salesforce/core": "^3.33.2", + "@salesforce/core": "^3.33.6", "@salesforce/kit": "^1.9.0", - "@salesforce/sf-plugins-core": "^2.2.1", - "@salesforce/source-deploy-retrieve": "^7.10.1", - "@salesforce/source-tracking": "^2.2.21", + "@salesforce/sf-plugins-core": "^2.2.4", + "@salesforce/source-deploy-retrieve": "^7.11.3", + "@salesforce/source-tracking": "^2.2.24", "chalk": "^4.1.2", - "got": "^11.8.3", - "jsforce": "^2.0.0-beta.19", + "got": "^11.8.6", + "jsforce": "^2.0.0-beta.20", "proxy-agent": "^5.0.0", "proxy-from-env": "^1.1.0", "tslib": "^2" }, "devDependencies": { - "@oclif/plugin-command-snapshot": "^3.3.4", - "@oclif/plugin-help": "^5.2.2", - "@salesforce/cli-plugins-testkit": "^3.2.23", - "@salesforce/dev-config": "^3.0.1", - "@salesforce/dev-scripts": "^3.1.1", + "@oclif/plugin-command-snapshot": "^3.3.7", + "@oclif/plugin-help": "^5.2.6", + "@salesforce/cli-plugins-testkit": "^3.2.24", + "@salesforce/dev-config": "^3.1.0", + "@salesforce/dev-scripts": "^4.1.2", "@salesforce/plugin-command-reference": "^2.3.2", "@salesforce/plugin-config": "^2.3.2", - "@salesforce/plugin-info": "^2.4.2", - "@salesforce/plugin-templates": "^55.4.1", + "@salesforce/plugin-info": "^2.5.1", + "@salesforce/plugin-templates": "^55.4.4", "@salesforce/plugin-user": "^2.3.2", "@salesforce/prettier-config": "^0.0.2", "@salesforce/source-testkit": "^2.0.40", "@salesforce/ts-sinon": "1.4.2", - "@swc/core": "^1.3.32", + "@swc/core": "^1.3.37", "@types/archiver": "^5.1.1", "@types/debug": "^4.1.7", "@types/proxy-from-env": "^1.0.1", "@types/shelljs": "^0.8.11", "@typescript-eslint/eslint-plugin": "^5.42.1", - "@typescript-eslint/parser": "^5.49.0", + "@typescript-eslint/parser": "^5.54.0", "archiver": "^5.3.0", "chai": "^4.3.4", "chai-each": "^0.0.1", @@ -54,13 +54,13 @@ "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.27.5", "eslint-plugin-jsdoc": "^39.8.0", - "eslint-plugin-sf-plugin": "^1.8.1", + "eslint-plugin-sf-plugin": "^1.14.0", "fast-glob": "^3.2.12", "husky": "^7.0.4", "mocha": "^9.1.3", "nyc": "^15.1.0", "oclif": "^3.6.1", - "prettier": "^2.8.3", + "prettier": "^2.8.4", "pretty-quick": "^3.1.3", "shelljs": "^0.8.5", "shx": "0.3.4", @@ -107,12 +107,6 @@ "subtopics": { "deploy": { "description": "interact with an active deploy request" - }, - "manifest": { - "description": "create a manifest to use in a deploy/retrieve" - }, - "tracking": { - "description": "reset and clear source tracking" } } }, @@ -137,55 +131,157 @@ }, "repository": "salesforcecli/plugin-source", "scripts": { - "build": "sf-build", + "build": "wireit", "clean": "sf-clean", "clean-all": "sf-clean all", "clean:lib": "shx rm -rf lib && shx rm -rf coverage && shx rm -rf .nyc_output && shx rm -f oclif.manifest.json", - "compile": "sf-compile", + "compile": "wireit", "docs": "sf-docs", - "format": "sf-format", - "lint": "eslint src/**/*", + "format": "wireit", + "lint": "wireit", "postpack": "shx rm -f oclif.manifest.json", "prepack": "sf-prepack", "prepare": "sf-install", - "pretest": "echo 0", - "test": "echo 0", + "test": "wireit", "test:nuts": "ts-node ./test/nuts/generateNuts.ts && nyc mocha \"**/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0", - "test:nuts:commands:other": "mocha \"test/nuts/ignored_list.nut.ts\" --slow 4500 --timeout 1200000 --retries 0 --parallel", - "test:nuts:convert": "cross-env PLUGIN_SOURCE_SEED_FILTER=convert ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0", - "test:nuts:delete": "mocha \"test/nuts/delete.nut.ts\" --slow 4500 --timeout 1200000 --retries 0", - "test:nuts:deploy": "cross-env PLUGIN_SOURCE_SEED_FILTER=deploy PLUGIN_SOURCE_SEED_EXCLUDE=async ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0", - "test:nuts:deploy:async": "cross-env PLUGIN_SOURCE_SEED_FILTER=deploy.async ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0", - "test:nuts:deploy:destructive": "mocha \"test/nuts/deployDestructive.nut.ts\" --slow 3000 --timeout 1200000 --retries 0", - "test:nuts:deploy:manifest": "cross-env PLUGIN_SOURCE_SEED_FILTER=deploy.manifest ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0", - "test:nuts:deploy:metadata": "cross-env PLUGIN_SOURCE_SEED_FILTER=deploy.metadata ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0", - "test:nuts:deploy:quick": "cross-env PLUGIN_SOURCE_SEED_FILTER=deploy.quick ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0", - "test:nuts:deploy:rest": "mocha \"test/nuts/REST/*.nut.ts\" --slow 3000 --timeout 1200000 --retries 0 --parallel", - "test:nuts:deploy:sourcepath": "cross-env PLUGIN_SOURCE_SEED_FILTER=deploy.sourcepath ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0", - "test:nuts:deploy:testlevel": "cross-env PLUGIN_SOURCE_SEED_FILTER=deploy.testlevel ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0", - "test:nuts:manifest:create": "mocha \"test/nuts/create.nut.ts\" --slow 4500 --timeout 1200000 --retries 0", - "test:nuts:mdapi": "mocha \"test/nuts/mdapi.nut.ts\" --slow 3000 --timeout 1200000 --retries 0", - "test:nuts:retrieve": "cross-env PLUGIN_SOURCE_SEED_FILTER=retrieve ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0", - "test:nuts:retrieve:metadata": "cross-env PLUGIN_SOURCE_SEED_FILTER=retrieve.metadata ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0", - "test:nuts:specialTypes": "mocha \"test/nuts/territory2.nut.ts\" \"test/nuts/folderTypes.nut.ts\" \"test/nuts/translation.nut.ts\" \"test/nuts/nestedLwc.nut.ts\" \"test/nuts/partialBundleDelete.nut.ts\" --slow 4500 --timeout 1200000 --retries 0 --parallel", - "test:nuts:specialTypes:folders": "mocha \"test/nuts/folderTypes.nut.ts\" --slow 4500 --timeout 1200000", - "test:nuts:specialTypes:nestedLwc": "mocha \"test/nuts/nestedLwc.nut.ts\" --slow 3000 --timeout 1200000 --retries 0", - "test:nuts:specialTypes:territory2": "mocha \"test/nuts/territory2.nut.ts\" --slow 4500 --timeout 1200000 --retries 0", - "test:nuts:specialTypes:translations": "mocha \"test/nuts/translation.nut.ts\" --slow 4500 --timeout 1200000 --retries 0", - "test:nuts:tracking": "mocha \"test/nuts/trackingCommands/*.nut.ts\" --slow 3000 --timeout 1200000 --parallel --retries 0", - "test:nuts:tracking:basics": "mocha \"test/nuts/trackingCommands/basics.nut.ts\" --slow 3000 --timeout 1200000 --retries 0", - "test:nuts:tracking:conflicts": "mocha \"test/nuts/trackingCommands/conflicts.nut.ts\" --slow 3000 --timeout 1200000 --retries 0", - "test:nuts:tracking:flag": "mocha \"test/nuts/trackingCommands/deployRetrieveDelete.nut.ts\" --slow 3000 --timeout 1200000 --retries 0", - "test:nuts:tracking:forceignore": "mocha \"test/nuts/trackingCommands/forceIgnore.nut.ts\" --slow 3000 --timeout 1200000 --retries 0", - "test:nuts:tracking:lwc": "mocha \"test/nuts/trackingCommands/lwc.nut.ts\" --slow 3000 --timeout 1200000 --retries 0", - "test:nuts:tracking:mpd": "mocha \"test/nuts/trackingCommands/mpd*\" --slow 3000 --timeout 1200000 --retries 0 -parallel", - "test:nuts:tracking:remote": "mocha \"test/nuts/trackingCommands/remoteChanges.nut.ts\" --slow 3000 --timeout 1200000 --retries 0", - "test:nuts:tracking:resetClear": "mocha \"test/nuts/trackingCommands/resetClear.nut.ts\" --slow 3000 --timeout 1200000 --retries 0", + "test:nuts:commands:other": "mocha \"test/nuts/ignored_list.nut.ts\" --slow 4500 --timeout 1200000 --retries 0 --parallel --jobs 20", + "test:nuts:delete": "mocha \"test/nuts/delete.nut.ts\" --slow 4500 --timeout 1200000 --retries 0 --jobs 20", + "test:nuts:deploy": "cross-env PLUGIN_SOURCE_SEED_FILTER=deploy PLUGIN_SOURCE_SEED_EXCLUDE=async ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0 --jobs 20", + "test:nuts:deploy:async": "cross-env PLUGIN_SOURCE_SEED_FILTER=deploy.async ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0 --jobs 20", + "test:nuts:deploy:destructive": "mocha \"test/nuts/deployDestructive.nut.ts\" --slow 3000 --timeout 1200000 --retries 0 --jobs 20", + "test:nuts:deploy:manifest": "cross-env PLUGIN_SOURCE_SEED_FILTER=deploy.manifest ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0 --jobs 20", + "test:nuts:deploy:metadata": "cross-env PLUGIN_SOURCE_SEED_FILTER=deploy.metadata ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0 --jobs 20", + "test:nuts:deploy:quick": "cross-env PLUGIN_SOURCE_SEED_FILTER=deploy.quick ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0 --jobs 20", + "test:nuts:deploy:rest": "mocha \"test/nuts/REST/*.nut.ts\" --slow 3000 --timeout 1200000 --retries 0 --parallel --jobs 20", + "test:nuts:deploy:sourcepath": "cross-env PLUGIN_SOURCE_SEED_FILTER=deploy.sourcepath ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0 --jobs 20", + "test:nuts:deploy:testlevel": "cross-env PLUGIN_SOURCE_SEED_FILTER=deploy.testlevel ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0 --jobs 20", + "test:nuts:mdapi": "mocha \"test/nuts/mdapi.nut.ts\" --slow 3000 --timeout 1200000 --retries 0 --jobs 20", + "test:nuts:retrieve": "cross-env PLUGIN_SOURCE_SEED_FILTER=retrieve ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0 --jobs 20", + "test:nuts:retrieve:metadata": "cross-env PLUGIN_SOURCE_SEED_FILTER=retrieve.metadata ts-node ./test/nuts/generateNuts.ts && mocha \"test/nuts/generated/*.nut.ts\" --slow 4500 --timeout 1200000 --parallel --retries 0 --jobs 20", + "test:nuts:specialTypes": "mocha \"test/nuts/territory2.nut.ts\" \"test/nuts/folderTypes.nut.ts\" \"test/nuts/translation.nut.ts\" \"test/nuts/nestedLwc.nut.ts\" \"test/nuts/partialBundleDelete.nut.ts\" --slow 4500 --timeout 1200000 --retries 0 --parallel --jobs 20", + "test:nuts:specialTypes:folders": "mocha \"test/nuts/folderTypes.nut.ts\" --slow 4500 --timeout 1200000 --jobs 20", + "test:nuts:specialTypes:nestedLwc": "mocha \"test/nuts/nestedLwc.nut.ts\" --slow 3000 --timeout 1200000 --retries 0 --jobs 20 ", + "test:nuts:specialTypes:territory2": "mocha \"test/nuts/territory2.nut.ts\" --slow 4500 --timeout 1200000 --retries 0 --jobs 20", + "test:nuts:specialTypes:translations": "mocha \"test/nuts/translation.nut.ts\" --slow 4500 --timeout 1200000 --retries 0 --jobs 20", + "test:nuts:tracking": "mocha \"test/nuts/trackingCommands/*.nut.ts\" --slow 3000 --timeout 1200000 --parallel --retries 0 --jobs 20", + "test:nuts:tracking:basics": "mocha \"test/nuts/trackingCommands/basics.nut.ts\" --slow 3000 --timeout 1200000 --retries 0 --jobs 20", + "test:nuts:tracking:conflicts": "mocha \"test/nuts/trackingCommands/conflicts.nut.ts\" --slow 3000 --timeout 1200000 --retries 0 --jobs 20", + "test:nuts:tracking:flag": "mocha \"test/nuts/trackingCommands/deployRetrieveDelete.nut.ts\" --slow 3000 --timeout 1200000 --retries 0 --jobs 20", + "test:nuts:tracking:forceignore": "mocha \"test/nuts/trackingCommands/forceIgnore.nut.ts\" --slow 3000 --timeout 1200000 --retries 0 --jobs 20", + "test:nuts:tracking:lwc": "mocha \"test/nuts/trackingCommands/lwc.nut.ts\" --slow 3000 --timeout 1200000 --retries 0 --jobs 20", + "test:nuts:tracking:mpd": "mocha \"test/nuts/trackingCommands/mpd*\" --slow 3000 --timeout 1200000 --retries 0 -parallel --jobs 20", + "test:nuts:tracking:remote": "mocha \"test/nuts/trackingCommands/remoteChanges.nut.ts\" --slow 3000 --timeout 1200000 --retries 0 --jobs 20", "test:only": "wireit", "test:watch": "mocha --watch \"./test/**/*.test.ts\"", "version": "oclif readme" }, "publishConfig": { "access": "public" + }, + "wireit": { + "build": { + "dependencies": [ + "compile", + "lint" + ] + }, + "compile": { + "command": "tsc -p . --pretty --incremental", + "files": [ + "src/**/*.ts", + "tsconfig.json", + "messages/**" + ], + "output": [ + "lib/**", + "*.tsbuildinfo" + ], + "clean": "if-file-deleted" + }, + "format": { + "command": "prettier --write \"+(src|test|schemas)/**/*.+(ts|js|json)|command-snapshot.json\"", + "files": [ + "src/**/*.ts", + "test/**/*.ts", + "schemas/**/*.json", + "command-snapshot.json", + ".prettier*" + ], + "output": [] + }, + "lint": { + "command": "eslint src test --color --cache --cache-location .eslintcache", + "files": [ + "src/**/*.ts", + "test/**/*.ts", + "messages/**", + ".eslint*" + ], + "output": [] + }, + "test:compile": { + "command": "tsc -p \"./test\" --pretty", + "files": [ + "test/**/*.ts", + "tsconfig.json", + "test/tsconfig.json" + ], + "output": [] + }, + "test": { + "dependencies": [ + "test:compile", + "test:only", + "test:command-reference", + "test:deprecation-policy", + "lint", + "test:json-schema" + ] + }, + "test:only": { + "command": "nyc mocha \"test/**/*.test.ts\"", + "env": { + "FORCE_COLOR": "2" + }, + "files": [ + "test/**/*.ts", + "src/**/*.ts", + "tsconfig.json", + ".mocha*", + "test/tsconfig.json", + "!*.nut.ts", + ".nycrc" + ], + "output": [] + }, + "test:command-reference": { + "command": "\"./bin/dev\" commandreference:generate --erroronwarnings", + "files": [ + "src/**/*.ts", + "messages/**", + "package.json" + ], + "output": [ + "tmp/root" + ] + }, + "test:deprecation-policy": { + "command": "\"./bin/dev\" snapshot:compare", + "files": [ + "src/**/*.ts" + ], + "output": [], + "dependencies": [ + "compile" + ] + }, + "test:json-schema": { + "command": "\"./bin/dev\" schema:compare", + "files": [ + "src/**/*.ts", + "schemas" + ], + "output": [] + } } } diff --git a/schemas/force-source-convert.json b/schemas/force-source-convert.json deleted file mode 100644 index daa538cc5..000000000 --- a/schemas/force-source-convert.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$ref": "#/definitions/ConvertCommandResult", - "definitions": { - "ConvertCommandResult": { - "type": "object", - "properties": { - "location": { - "type": "string" - } - }, - "required": ["location"], - "additionalProperties": false - } - } -} diff --git a/schemas/force-source-delete.json b/schemas/force-source-delete.json deleted file mode 100644 index 912b852c4..000000000 --- a/schemas/force-source-delete.json +++ /dev/null @@ -1,610 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$ref": "#/definitions/DeployCommandResult", - "definitions": { - "DeployCommandResult": { - "type": "object", - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/RequestStatus" - }, - "success": { - "type": "boolean" - }, - "done": { - "type": "boolean" - }, - "canceledBy": { - "type": "string" - }, - "canceledByName": { - "type": "string" - }, - "checkOnly": { - "type": "boolean" - }, - "completedDate": { - "type": "string" - }, - "createdBy": { - "type": "string" - }, - "createdByName": { - "type": "string" - }, - "createdDate": { - "type": "string" - }, - "details": { - "$ref": "#/definitions/DeployDetails" - }, - "errorMessage": { - "type": "string" - }, - "errorStatusCode": { - "type": "string" - }, - "ignoreWarnings": { - "type": "boolean" - }, - "lastModifiedDate": { - "type": "string" - }, - "numberComponentErrors": { - "type": "number" - }, - "numberComponentsDeployed": { - "type": "number" - }, - "numberComponentsTotal": { - "type": "number" - }, - "numberTestErrors": { - "type": "number" - }, - "numberTestsCompleted": { - "type": "number" - }, - "numberTestsTotal": { - "type": "number" - }, - "runTestsEnabled": { - "type": "boolean" - }, - "rollbackOnError": { - "type": "boolean" - }, - "startDate": { - "type": "string" - }, - "stateDetail": { - "type": "string" - }, - "coverage": { - "$ref": "#/definitions/CoverageResultsFileInfo" - }, - "junit": { - "type": "string" - }, - "deletedSource": { - "type": "array", - "items": { - "$ref": "#/definitions/FileResponse" - } - }, - "deployedSource": { - "type": "array", - "items": { - "$ref": "#/definitions/FileResponse" - } - }, - "outboundFiles": { - "type": "array", - "items": { - "type": "string" - } - }, - "deploys": { - "type": "array", - "items": { - "$ref": "#/definitions/MetadataApiDeployStatus" - } - }, - "deletes": { - "type": "array", - "items": { - "$ref": "#/definitions/MetadataApiDeployStatus" - } - }, - "replacements": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "required": [ - "checkOnly", - "createdBy", - "createdByName", - "createdDate", - "deployedSource", - "deploys", - "details", - "done", - "id", - "ignoreWarnings", - "lastModifiedDate", - "numberComponentErrors", - "numberComponentsDeployed", - "numberComponentsTotal", - "numberTestErrors", - "numberTestsCompleted", - "numberTestsTotal", - "outboundFiles", - "rollbackOnError", - "runTestsEnabled", - "status", - "success" - ] - }, - "RequestStatus": { - "type": "string", - "enum": ["Pending", "InProgress", "Succeeded", "SucceededPartial", "Failed", "Canceling", "Canceled"] - }, - "DeployDetails": { - "type": "object", - "properties": { - "componentFailures": { - "anyOf": [ - { - "$ref": "#/definitions/DeployMessage" - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/DeployMessage" - } - } - ] - }, - "componentSuccesses": { - "anyOf": [ - { - "$ref": "#/definitions/DeployMessage" - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/DeployMessage" - } - } - ] - }, - "runTestResult": { - "$ref": "#/definitions/RunTestResult" - } - }, - "additionalProperties": false - }, - "DeployMessage": { - "type": "object", - "properties": { - "changed": { - "type": ["string", "boolean"], - "enum": ["true", "false", true, false] - }, - "columnNumber": { - "type": "string" - }, - "componentType": { - "type": "string" - }, - "created": { - "type": ["string", "boolean"], - "enum": ["true", "false", true, false] - }, - "createdDate": { - "type": "string" - }, - "deleted": { - "type": ["string", "boolean"], - "enum": ["true", "false", true, false] - }, - "fileName": { - "type": "string" - }, - "fullName": { - "type": "string" - }, - "id": { - "type": "string" - }, - "lineNumber": { - "type": "string" - }, - "problem": { - "type": "string" - }, - "problemType": { - "type": "string", - "enum": ["Warning", "Error"] - }, - "success": { - "type": ["string", "boolean"], - "enum": ["true", "false", true, false] - } - }, - "required": ["changed", "created", "createdDate", "deleted", "fileName", "fullName", "success"], - "additionalProperties": false - }, - "RunTestResult": { - "type": "object", - "properties": { - "codeCoverage": { - "anyOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/CodeCoverage" - } - }, - { - "$ref": "#/definitions/CodeCoverage" - } - ] - }, - "codeCoverageWarnings": { - "anyOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/CodeCoverageWarnings" - } - }, - { - "$ref": "#/definitions/CodeCoverageWarnings" - } - ] - }, - "failures": { - "anyOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/Failures" - } - }, - { - "$ref": "#/definitions/Failures" - } - ] - }, - "numFailures": { - "type": "string" - }, - "numTestsRun": { - "type": "string" - }, - "successes": { - "anyOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/Successes" - } - }, - { - "$ref": "#/definitions/Successes" - } - ] - }, - "totalTime": { - "type": "string" - } - }, - "required": ["numFailures", "numTestsRun", "totalTime"], - "additionalProperties": false - }, - "CodeCoverage": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "locationsNotCovered": { - "anyOf": [ - { - "type": "array", - "items": { - "$ref": "#/definitions/LocationsNotCovered" - } - }, - { - "$ref": "#/definitions/LocationsNotCovered" - } - ] - }, - "name": { - "type": "string" - }, - "numLocations": { - "type": "string" - }, - "numLocationsNotCovered": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "required": ["id", "name", "numLocations", "numLocationsNotCovered", "type"], - "additionalProperties": false - }, - "LocationsNotCovered": { - "type": "object", - "properties": { - "column": { - "type": "string" - }, - "line": { - "type": "string" - }, - "numExecutions": { - "type": "string" - }, - "time": { - "type": "string" - } - }, - "required": ["column", "line", "numExecutions", "time"], - "additionalProperties": false - }, - "CodeCoverageWarnings": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "message": { - "type": "string" - }, - "namespace": { - "type": "string" - } - }, - "required": ["id", "message", "namespace"], - "additionalProperties": false - }, - "Failures": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "message": { - "type": "string" - }, - "methodName": { - "type": "string" - }, - "name": { - "type": "string" - }, - "packageName": { - "type": "string" - }, - "stackTrace": { - "type": "string" - }, - "time": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "required": ["id", "message", "methodName", "name", "packageName", "stackTrace", "time", "type"], - "additionalProperties": false - }, - "Successes": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "methodName": { - "type": "string" - }, - "name": { - "type": "string" - }, - "time": { - "type": "string" - } - }, - "required": ["id", "methodName", "name", "time"], - "additionalProperties": false - }, - "CoverageResultsFileInfo": { - "type": "object", - "additionalProperties": false - }, - "FileResponse": { - "anyOf": [ - { - "$ref": "#/definitions/FileResponseSuccess" - }, - { - "$ref": "#/definitions/FileResponseFailure" - } - ] - }, - "FileResponseSuccess": { - "type": "object", - "properties": { - "fullName": { - "type": "string" - }, - "type": { - "type": "string" - }, - "filePath": { - "type": "string" - }, - "state": { - "type": "string", - "enum": ["Created", "Changed", "Unchanged", "Deleted"] - } - }, - "required": ["fullName", "state", "type"], - "additionalProperties": false - }, - "FileResponseFailure": { - "type": "object", - "properties": { - "fullName": { - "type": "string" - }, - "type": { - "type": "string" - }, - "filePath": { - "type": "string" - }, - "state": { - "type": "string", - "const": "Failed" - }, - "lineNumber": { - "type": "number" - }, - "columnNumber": { - "type": "number" - }, - "error": { - "type": "string" - }, - "problemType": { - "type": "string", - "enum": ["Warning", "Error"] - } - }, - "required": ["error", "fullName", "problemType", "state", "type"], - "additionalProperties": false - }, - "MetadataApiDeployStatus": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/RequestStatus" - }, - "success": { - "type": "boolean" - }, - "done": { - "type": "boolean" - }, - "canceledBy": { - "type": "string" - }, - "canceledByName": { - "type": "string" - }, - "checkOnly": { - "type": "boolean" - }, - "completedDate": { - "type": "string" - }, - "createdBy": { - "type": "string" - }, - "createdByName": { - "type": "string" - }, - "createdDate": { - "type": "string" - }, - "details": { - "$ref": "#/definitions/DeployDetails" - }, - "errorMessage": { - "type": "string" - }, - "errorStatusCode": { - "type": "string" - }, - "ignoreWarnings": { - "type": "boolean" - }, - "lastModifiedDate": { - "type": "string" - }, - "numberComponentErrors": { - "type": "number" - }, - "numberComponentsDeployed": { - "type": "number" - }, - "numberComponentsTotal": { - "type": "number" - }, - "numberTestErrors": { - "type": "number" - }, - "numberTestsCompleted": { - "type": "number" - }, - "numberTestsTotal": { - "type": "number" - }, - "runTestsEnabled": { - "type": "boolean" - }, - "rollbackOnError": { - "type": "boolean" - }, - "startDate": { - "type": "string" - }, - "stateDetail": { - "type": "string" - } - }, - "required": [ - "checkOnly", - "createdBy", - "createdByName", - "createdDate", - "details", - "done", - "id", - "ignoreWarnings", - "lastModifiedDate", - "numberComponentErrors", - "numberComponentsDeployed", - "numberComponentsTotal", - "numberTestErrors", - "numberTestsCompleted", - "numberTestsTotal", - "rollbackOnError", - "runTestsEnabled", - "status", - "success" - ], - "additionalProperties": false, - "description": "Raw response returned from a checkDeployStatus call to the Metadata API" - } - } -} diff --git a/schemas/force-source-manifest-create.json b/schemas/force-source-manifest-create.json deleted file mode 100644 index 706fcfc8a..000000000 --- a/schemas/force-source-manifest-create.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$ref": "#/definitions/CreateCommandResult", - "definitions": { - "CreateCommandResult": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "path": { - "type": "string" - } - }, - "required": ["name", "path"], - "additionalProperties": false - } - } -} diff --git a/schemas/force-source-tracking-clear.json b/schemas/force-source-tracking-clear.json deleted file mode 100644 index 573718012..000000000 --- a/schemas/force-source-tracking-clear.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$ref": "#/definitions/SourceTrackingClearResult", - "definitions": { - "SourceTrackingClearResult": { - "type": "object", - "properties": { - "clearedFiles": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": ["clearedFiles"], - "additionalProperties": false - } - } -} diff --git a/schemas/force-source-tracking-reset.json b/schemas/force-source-tracking-reset.json deleted file mode 100644 index 73722a498..000000000 --- a/schemas/force-source-tracking-reset.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$ref": "#/definitions/SourceTrackingResetResult", - "definitions": { - "SourceTrackingResetResult": { - "type": "object", - "properties": { - "sourceMembersSynced": { - "type": "number" - }, - "localPathsSynced": { - "type": "number" - } - }, - "required": ["sourceMembersSynced", "localPathsSynced"], - "additionalProperties": false - } - } -} diff --git a/src/commands/force/mdapi/convert.ts b/src/commands/force/mdapi/convert.ts deleted file mode 100644 index e690a005a..000000000 --- a/src/commands/force/mdapi/convert.ts +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Copyright (c) 2020, salesforce.com, inc. - * All rights reserved. - * Licensed under the BSD 3-Clause license. - * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ - -import { Messages } from '@salesforce/core'; -import { ComponentSetBuilder, ConvertResult, MetadataConverter } from '@salesforce/source-deploy-retrieve'; -import { Optional } from '@salesforce/ts-types'; -import { - arrayWithDeprecation, - Flags, - loglevel, - orgApiVersionFlagWithDeprecations, - Ux, -} from '@salesforce/sf-plugins-core'; -import { Interfaces } from '@oclif/core'; -import { SourceCommand } from '../../../sourceCommand'; -import { ConvertCommandResult, ConvertResultFormatter } from '../../../formatters/mdapi/convertResultFormatter'; - -Messages.importMessagesDirectory(__dirname); -const messages = Messages.loadMessages('@salesforce/plugin-source', 'md.convert'); - -export class Convert extends SourceCommand { - public static aliases = ['force:mdapi:beta:convert']; - public static readonly description = messages.getMessage('description'); - public static readonly examples = messages.getMessages('examples'); - public static readonly requiresProject = true; - public static readonly flags = { - 'api-version': orgApiVersionFlagWithDeprecations, - loglevel, - rootdir: Flags.directory({ - char: 'r', - description: messages.getMessage('flags.rootdir'), - summary: messages.getMessage('flagsLong.rootdir'), - required: true, - }), - outputdir: Flags.directory({ - char: 'd', - description: messages.getMessage('flags.outputdir'), - summary: messages.getMessage('flagsLong.outputdir'), - }), - manifest: Flags.string({ - char: 'x', - description: messages.getMessage('flags.manifest'), - summary: messages.getMessage('flagsLong.manifest'), - }), - metadatapath: arrayWithDeprecation({ - char: 'p', - description: messages.getMessage('flags.metadatapath'), - summary: messages.getMessage('flagsLong.metadatapath'), - exclusive: ['manifest', 'metadata'], - }), - metadata: arrayWithDeprecation({ - char: 'm', - description: messages.getMessage('flags.metadata'), - summary: messages.getMessage('flagsLong.metadata'), - exclusive: ['manifest', 'metadatapath'], - }), - }; - - private rootDir: string; - private outputDir: string; - private convertResult: ConvertResult; - private flags: Interfaces.InferredFlags; - - public async run(): Promise { - this.flags = (await this.parse(Convert)).flags; - await this.convert(); - this.resolveSuccess(); - return this.formatResult(); - } - - protected async convert(): Promise { - this.rootDir = this.resolveRootDir(this.flags.rootdir); - this.outputDir = this.resolveOutputDir(this.flags.outputdir); - const metadatapath = this.resolveMetadataPaths(this.flags.metadatapath); - const manifest = this.resolveManifest(this.flags.manifest); - const metadata = this.flags.metadata; - - let paths: string[]; - if (metadatapath) { - paths = metadatapath; - } else if (!manifest && !metadata) { - paths = [this.rootDir]; - } - - this.componentSet = await ComponentSetBuilder.build({ - sourcepath: paths, - manifest: manifest && { - manifestPath: manifest, - directoryPaths: [this.rootDir], - }, - metadata: metadata && { - metadataEntries: metadata, - directoryPaths: [this.rootDir], - }, - }); - - const numOfComponents = this.componentSet.getSourceComponents().toArray().length; - if (numOfComponents > 0) { - this.spinner.start(`Converting ${numOfComponents} metadata components`); - - const converter = new MetadataConverter(); - this.convertResult = await converter.convert(this.componentSet, 'source', { - type: 'directory', - outputDirectory: this.outputDir, - genUniqueDir: false, - }); - this.spinner.stop(); - } - } - - // No-op. Any failure would throw an error. If no error, it's successful. - // The framework provides this behavior. - /* eslint-disable-next-line @typescript-eslint/no-empty-function, class-methods-use-this */ - protected resolveSuccess(): void {} - - protected formatResult(): ConvertCommandResult { - const formatter = new ConvertResultFormatter(new Ux({ jsonEnabled: this.jsonEnabled() }), this.convertResult); - - if (!this.jsonEnabled()) { - formatter.display(); - } - return formatter.getJson(); - } - - private resolveRootDir(rootDir: string): string { - return this.ensureFlagPath({ - flagName: 'rootdir', - path: rootDir, - type: 'dir', - throwOnENOENT: true, - }); - } - - private resolveOutputDir(outputDir?: string): string { - return this.ensureFlagPath({ - flagName: 'outputdir', - path: outputDir || this.project.getDefaultPackage().path, - type: 'dir', - }); - } - - private resolveManifest(manifestPath?: string): Optional { - if (manifestPath?.length) { - return this.ensureFlagPath({ - flagName: 'manifest', - path: manifestPath, - type: 'file', - throwOnENOENT: true, - }); - } - } - - private resolveMetadataPaths(metadataPaths: string[]): Optional { - const resolvedMetadataPaths: string[] = []; - - if (metadataPaths?.length) { - metadataPaths.forEach((mdPath) => { - if (mdPath?.length) { - resolvedMetadataPaths.push( - this.ensureFlagPath({ - flagName: 'metadatapath', - path: mdPath, - type: 'any', - throwOnENOENT: true, - }) - ); - } - }); - } - return resolvedMetadataPaths.length ? resolvedMetadataPaths : undefined; - } -} diff --git a/src/commands/force/mdapi/deploy.ts b/src/commands/force/mdapi/deploy.ts index b90dc4f65..2bfc6ad8f 100644 --- a/src/commands/force/mdapi/deploy.ts +++ b/src/commands/force/mdapi/deploy.ts @@ -32,8 +32,13 @@ const deployMessages = Messages.loadMessages('@salesforce/plugin-source', 'deplo const xorFlags = ['zipfile', 'validateddeployrequestid', 'deploydir']; export type DeployResult = MdDeployResult | DeployCommandAsyncResult; +const replacement = 'project deploy start'; export class Deploy extends DeployCommand { - public static aliases = ['force:mdapi:beta:deploy']; + public static readonly state = 'deprecated'; + public static readonly deprecationOptions = { + to: replacement, + message: messages.getMessage('deprecation', [replacement]), + }; public static readonly description = messages.getMessage('description'); public static readonly examples = messages.getMessages('examples'); public static readonly flags = { diff --git a/src/commands/force/mdapi/deploy/cancel.ts b/src/commands/force/mdapi/deploy/cancel.ts index a511fcf07..e38fb1e01 100644 --- a/src/commands/force/mdapi/deploy/cancel.ts +++ b/src/commands/force/mdapi/deploy/cancel.ts @@ -24,9 +24,16 @@ import { Messages.importMessagesDirectory(__dirname); const messages = Messages.loadMessages('@salesforce/plugin-source', 'md.cancel'); +const replacement = 'project deploy cancel'; + export class Cancel extends DeployCommand { public static readonly description = messages.getMessage('description'); public static readonly examples = messages.getMessages('examples'); + public static readonly state = 'deprecated'; + public static readonly deprecationOptions = { + to: replacement, + message: messages.getMessage('deprecation', [replacement]), + }; public static readonly flags = { 'api-version': orgApiVersionFlagWithDeprecations, loglevel, diff --git a/src/commands/force/mdapi/deploy/report.ts b/src/commands/force/mdapi/deploy/report.ts index e2ea71779..16a10b573 100644 --- a/src/commands/force/mdapi/deploy/report.ts +++ b/src/commands/force/mdapi/deploy/report.ts @@ -25,11 +25,16 @@ import { DeployProgressStatusFormatter } from '../../../../formatters/deployProg Messages.importMessagesDirectory(__dirname); const messages = Messages.loadMessages('@salesforce/plugin-source', 'md.deployreport'); +const replacement = 'project deploy report'; + export class Report extends DeployCommand { - public static aliases = ['force:mdapi:beta:deploy:report']; public static readonly description = messages.getMessage('description'); public static readonly examples = messages.getMessages('examples'); - + public static readonly state = 'deprecated'; + public static readonly deprecationOptions = { + to: replacement, + message: messages.getMessage('deprecation', [replacement]), + }; public static readonly flags = { 'api-version': orgApiVersionFlagWithDeprecations, loglevel, diff --git a/src/commands/force/mdapi/retrieve.ts b/src/commands/force/mdapi/retrieve.ts index 01fd59db9..a950020c4 100644 --- a/src/commands/force/mdapi/retrieve.ts +++ b/src/commands/force/mdapi/retrieve.ts @@ -35,8 +35,14 @@ const messages = Messages.loadMessages('@salesforce/plugin-source', 'md.retrieve const spinnerMessages = Messages.loadMessages('@salesforce/plugin-source', 'spinner'); const retrieveMessages = Messages.loadMessages('@salesforce/plugin-source', 'retrieve'); export type RetrieveCommandCombinedResult = RetrieveCommandResult | RetrieveCommandAsyncResult; +const replacement = 'project retrieve start'; + export class Retrieve extends SourceCommand { - public static aliases = ['force:mdapi:beta:retrieve']; + public static readonly state = 'deprecated'; + public static readonly deprecationOptions = { + to: replacement, + message: messages.getMessage('deprecation', [replacement]), + }; public static readonly description = messages.getMessage('retrieveCmd.description'); public static readonly examples = messages.getMessages('retrieveCmd.examples'); public static readonly flags = { diff --git a/src/commands/force/mdapi/retrieve/report.ts b/src/commands/force/mdapi/retrieve/report.ts index 6acdfe6fc..3abd3c744 100644 --- a/src/commands/force/mdapi/retrieve/report.ts +++ b/src/commands/force/mdapi/retrieve/report.ts @@ -28,9 +28,9 @@ const messages = Messages.loadMessages('@salesforce/plugin-source', 'md.retrieve const spinnerMessages = Messages.loadMessages('@salesforce/plugin-source', 'spinner'); export type ReportCommandResult = RetrieveCommandResult | RetrieveCommandAsyncResult; export class Report extends SourceCommand { - public static aliases = ['force:mdapi:beta:retrieve:report']; public static readonly description = messages.getMessage('reportCmd.description'); public static readonly examples = messages.getMessages('reportCmd.examples'); + public static readonly state = 'deprecated'; public static readonly flags = { 'api-version': orgApiVersionFlagWithDeprecations, loglevel, diff --git a/src/commands/force/source/convert.ts b/src/commands/force/source/convert.ts deleted file mode 100644 index 51744d121..000000000 --- a/src/commands/force/source/convert.ts +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (c) 2020, salesforce.com, inc. - * All rights reserved. - * Licensed under the BSD 3-Clause license. - * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ - -import { join, resolve } from 'path'; -import * as fs from 'fs'; - -import { Messages } from '@salesforce/core'; -import { ComponentSetBuilder, ConvertResult, MetadataConverter } from '@salesforce/source-deploy-retrieve'; -import { getString } from '@salesforce/ts-types'; -import { - arrayWithDeprecation, - Flags, - loglevel, - orgApiVersionFlagWithDeprecations, - Ux, -} from '@salesforce/sf-plugins-core'; -import { Interfaces } from '@oclif/core'; -import { SourceCommand } from '../../../sourceCommand'; -import { ConvertCommandResult, ConvertResultFormatter } from '../../../formatters/convertResultFormatter'; - -Messages.importMessagesDirectory(__dirname); -const messages = Messages.loadMessages('@salesforce/plugin-source', 'convert'); - -export class Convert extends SourceCommand { - public static readonly description = messages.getMessage('description'); - public static readonly examples = messages.getMessages('examples'); - public static readonly requiresProject = true; - public static readonly flags = { - 'api-version': orgApiVersionFlagWithDeprecations, - loglevel, - rootdir: Flags.directory({ - char: 'r', - description: messages.getMessage('flags.rootdir'), - }), - outputdir: Flags.directory({ - default: `metadataPackage_${Date.now()}`, - char: 'd', - description: messages.getMessage('flags.outputdir'), - }), - packagename: Flags.string({ - char: 'n', - description: messages.getMessage('flags.packagename'), - }), - manifest: Flags.string({ - char: 'x', - description: messages.getMessage('flags.manifest'), - summary: messages.getMessage('flagsLong.manifest'), - }), - sourcepath: arrayWithDeprecation({ - char: 'p', - description: messages.getMessage('flags.sourcepath'), - summary: messages.getMessage('flagsLong.sourcepath'), - exclusive: ['manifest', 'metadata'], - }), - metadata: arrayWithDeprecation({ - char: 'm', - description: messages.getMessage('flags.metadata'), - exclusive: ['manifest', 'sourcepath'], - }), - }; - - protected convertResult: ConvertResult; - private flags: Interfaces.InferredFlags; - - public async run(): Promise { - this.flags = (await this.parse(Convert)).flags; - await this.convert(); - this.resolveSuccess(); - return this.formatResult(); - } - - protected async convert(): Promise { - const paths: string[] = []; - - const { sourcepath, metadata, manifest, rootdir } = this.flags; - - if (sourcepath) { - paths.push(...sourcepath); - } - - // rootdir behaves exclusively to sourcepath, metadata, and manifest... to maintain backwards compatibility - // we will check here, instead of adding the exclusive option to the flag definition so we don't break scripts - if (rootdir && !sourcepath && !metadata && !manifest && typeof rootdir === 'string') { - // only rootdir option passed - paths.push(rootdir); - } - - // no options passed, convert the default package (usually force-app) - if (!sourcepath && !metadata && !manifest && !rootdir) { - paths.push(this.project.getDefaultPackage().path); - } - - this.componentSet = await ComponentSetBuilder.build({ - sourceapiversion: await this.getSourceApiVersion(), - sourcepath: paths, - manifest: manifest && { - manifestPath: this.flags.manifest, - directoryPaths: this.getPackageDirs(), - }, - metadata: metadata && { - metadataEntries: this.flags.metadata, - directoryPaths: this.getPackageDirs(), - }, - }); - - const packageName = this.flags.packagename; - const outputDirectory = resolve(this.flags.outputdir); - const converter = new MetadataConverter(); - this.convertResult = await converter.convert(this.componentSet, 'metadata', { - type: 'directory', - outputDirectory, - packageName, - genUniqueDir: false, - }); - - if (packageName) { - // SDR will build an output path like /output/directory/packageName/package.xml - // this was breaking from toolbelt, so to revert it we copy the directory up a level and delete the original - this.copyDir(this.convertResult.packagePath, outputDirectory); - fs.rmSync(this.convertResult.packagePath, { recursive: true }); - this.convertResult.packagePath = outputDirectory; - } - } - - // TODO: move into fs in sfdx-core - protected copyDir(src: string, dest: string): void { - fs.mkdirSync(dest, { recursive: true }); - const entries = fs.readdirSync(src, { withFileTypes: true }); - - entries.map((entry) => { - const srcPath = join(src, entry.name); - const destPath = join(dest, entry.name); - - return entry.isDirectory() ? this.copyDir(srcPath, destPath) : fs.copyFileSync(srcPath, destPath); - }); - } - - protected resolveSuccess(): void { - if (!getString(this.convertResult, 'packagePath')) { - this.setExitCode(1); - } - } - - protected formatResult(): ConvertCommandResult { - const formatter = new ConvertResultFormatter(new Ux({ jsonEnabled: this.jsonEnabled() }), this.convertResult); - - if (!this.jsonEnabled()) { - formatter.display(); - } - return formatter.getJson(); - } -} diff --git a/src/commands/force/source/delete.ts b/src/commands/force/source/delete.ts deleted file mode 100644 index 8bcfeb052..000000000 --- a/src/commands/force/source/delete.ts +++ /dev/null @@ -1,412 +0,0 @@ -/* - * Copyright (c) 2020, salesforce.com, inc. - * All rights reserved. - * Licensed under the BSD 3-Clause license. - * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ - -import * as fs from 'fs'; -import * as path from 'path'; -import * as os from 'os'; -import { Interfaces, ux } from '@oclif/core'; - -import { Lifecycle, Messages, Org } from '@salesforce/core'; -import { - ComponentSet, - ComponentSetBuilder, - ComponentStatus, - DestructiveChangesType, - FileResponse, - MetadataComponent, - RequestStatus, - SourceComponent, -} from '@salesforce/source-deploy-retrieve'; -import { Duration, env } from '@salesforce/kit'; -import { SourceTracking } from '@salesforce/source-tracking'; -import { - arrayWithDeprecation, - Flags, - loglevel, - orgApiVersionFlagWithDeprecations, - requiredOrgFlagWithDeprecations, - Ux, -} from '@salesforce/sf-plugins-core'; -import { DeployCommand, TestLevel } from '../../../deployCommand'; -import { DeployCommandResult, DeployResultFormatter } from '../../../formatters/deployResultFormatter'; -import { DeleteResultFormatter } from '../../../formatters/source/deleteResultFormatter'; -import { ProgressFormatter } from '../../../formatters/progressFormatter'; -import { DeployProgressBarFormatter } from '../../../formatters/deployProgressBarFormatter'; -import { DeployProgressStatusFormatter } from '../../../formatters/deployProgressStatusFormatter'; -import { filterConflictsByComponentSet, trackingSetup, updateTracking } from '../../../trackingFunctions'; - -const fsPromises = fs.promises; - -Messages.importMessagesDirectory(__dirname); -const messages = Messages.loadMessages('@salesforce/plugin-source', 'delete'); -const xorFlags = ['metadata', 'sourcepath']; -export class Delete extends DeployCommand { - public static readonly description = messages.getMessage('description'); - public static readonly examples = messages.getMessages('examples'); - public static readonly requiresProject = true; - public static readonly flags = { - 'api-version': orgApiVersionFlagWithDeprecations, - loglevel, - 'target-org': requiredOrgFlagWithDeprecations, - checkonly: Flags.boolean({ - char: 'c', - description: messages.getMessage('flags.checkonly'), - summary: messages.getMessage('flagsLong.checkonly'), - }), - wait: Flags.duration({ - unit: 'minutes', - char: 'w', - default: Duration.minutes(Delete.DEFAULT_WAIT_MINUTES), - min: 1, - description: messages.getMessage('flags.wait'), - summary: messages.getMessage('flagsLong.wait'), - }), - testlevel: Flags.string({ - char: 'l', - description: messages.getMessage('flags.testLevel'), - summary: messages.getMessage('flagsLong.testLevel'), - options: ['NoTestRun', 'RunLocalTests', 'RunAllTestsInOrg'], - default: 'NoTestRun', - }), - noprompt: Flags.boolean({ - char: 'r', - description: messages.getMessage('flags.noprompt'), - }), - metadata: arrayWithDeprecation({ - char: 'm', - description: messages.getMessage('flags.metadata'), - summary: messages.getMessage('flagsLong.metadata'), - exactlyOne: xorFlags, - }), - sourcepath: arrayWithDeprecation({ - char: 'p', - description: messages.getMessage('flags.sourcepath'), - summary: messages.getMessage('flagsLong.sourcepath'), - exactlyOne: xorFlags, - }), - tracksource: Flags.boolean({ - char: 't', - description: messages.getMessage('flags.tracksource'), - exclusive: ['checkonly'], - }), - forceoverwrite: Flags.boolean({ - char: 'f', - description: messages.getMessage('flags.forceoverwrite'), - dependsOn: ['tracksource'], - }), - verbose: Flags.boolean({ - description: messages.getMessage('flags.verbose'), - }), - }; - protected fileResponses: FileResponse[]; - protected tracking: SourceTracking; - protected readonly lifecycleEventNames = ['predeploy', 'postdeploy']; - private deleteResultFormatter: DeleteResultFormatter | DeployResultFormatter; - private aborted = false; - private components: MetadataComponent[]; - // create the delete FileResponse as we're parsing the comp. set to use in the output - private mixedDeployDelete: { deploy: string[]; delete: FileResponse[] } = { delete: [], deploy: [] }; - // map of component in project, to where it is stashed - private stashPath = new Map(); - private tempDir = path.join(os.tmpdir(), 'source_delete'); - private flags: Interfaces.InferredFlags; - private org: Org; - - public async run(): Promise { - this.flags = (await this.parse(Delete)).flags; - this.org = this.flags['target-org']; - await this.preChecks(); - await this.delete(); - - await this.resolveSuccess(); - const result = this.formatResult(); - // The DeleteResultFormatter will use SDR and scan the directory, if the files have been deleted, it will throw an error - // so we'll delete the files locally now - await this.deleteFilesLocally(); - // makes sure files are deleted before updating tracking files - await this.maybeUpdateTracking(); - return result; - } - - protected async preChecks(): Promise { - if (this.flags.tracksource) { - this.tracking = await trackingSetup({ - commandName: 'force:source:delete', - ignoreConflicts: true, - org: this.org, - project: this.project, - ux: new Ux({ jsonEnabled: this.jsonEnabled() }), - }); - } - } - - protected async delete(): Promise { - this.deleteResultFormatter = new DeleteResultFormatter(new Ux({ jsonEnabled: this.jsonEnabled() }), {}); - const sourcepaths = this.flags.sourcepath; - - this.componentSet = await ComponentSetBuilder.build({ - apiversion: this.flags['api-version'], - sourceapiversion: await this.getSourceApiVersion(), - sourcepath: sourcepaths, - metadata: this.flags.metadata && { - metadataEntries: this.flags.metadata, - directoryPaths: this.getPackageDirs(), - }, - }); - if (this.flags.tracksource && !this.flags.forceoverwrite) { - await filterConflictsByComponentSet({ - tracking: this.tracking, - components: this.componentSet, - ux: new Ux({ jsonEnabled: this.jsonEnabled() }), - }); - } - this.components = this.componentSet.toArray(); - - if (!this.components.length) { - // if we didn't find any components to delete, let the user know and exit - (this.deleteResultFormatter as DeleteResultFormatter).displayNoResultsFound(); - return; - } - - // create a new ComponentSet and mark everything for deletion - const cs = new ComponentSet([]); - cs.apiVersion = this.flags['api-version'] ?? (await this.org.retrieveMaxApiVersion()); - cs.sourceApiVersion = this.flags['api-version'] ?? (await this.getSourceApiVersion()); - this.components.map((component) => { - if (component instanceof SourceComponent) { - cs.add(component, DestructiveChangesType.POST); - } else { - // a remote-only delete - cs.add(new SourceComponent({ name: component.fullName, type: component.type }), DestructiveChangesType.POST); - } - }); - this.componentSet = cs; - - if (sourcepaths) { - // determine if user is trying to delete a single file from a bundle, which is actually just an fs delete operation - // and then a constructive deploy on the "new" bundle - this.components - .filter((comp) => comp.type.strategies?.adapter === 'bundle' && comp instanceof SourceComponent) - .map((bundle: SourceComponent) => { - sourcepaths.map(async (sourcepath) => { - // walkContent returns absolute paths while sourcepath will usually be relative - if (bundle.walkContent().find((content) => content.endsWith(sourcepath))) { - await this.moveBundleToManifest(bundle, sourcepath); - } - }); - }); - } - - this.aborted = !(await this.handlePrompt()); - if (this.aborted) return; - - // fire predeploy event for the delete - await Lifecycle.getInstance().emit('predeploy', this.components); - this.isRest = this.isRestDeploy(); - this.log(`*** Deleting with ${this.isRest ? 'REST' : 'SOAP'} API ***`); - - const deploy = await this.componentSet.deploy({ - usernameOrConnection: this.org.getUsername(), - apiOptions: { - rest: this.isRest, - checkOnly: this.flags.checkonly ?? false, - testLevel: this.flags.testlevel as TestLevel, - }, - }); - this.updateDeployId(deploy.id); - - if (!this.jsonEnabled()) { - const progressFormatter: ProgressFormatter = env.getBoolean('SFDX_USE_PROGRESS_BAR', true) - ? new DeployProgressBarFormatter(new Ux({ jsonEnabled: this.jsonEnabled() })) - : new DeployProgressStatusFormatter(new Ux({ jsonEnabled: this.jsonEnabled() })); - progressFormatter.progress(deploy); - } - - this.deployResult = await deploy.pollStatus({ timeout: this.flags.wait }); - await Lifecycle.getInstance().emit('postdeploy', this.deployResult); - - // result.getFileResponses() will crawl the tree, but that would throw after the delete occurs. - // Extract them here for updateTracking to use later - this.fileResponses = this.mixedDeployDelete.delete.length - ? this.mixedDeployDelete.delete - : this.deployResult.getFileResponses(); - } - - /** - * Checks the response status to determine whether the delete was successful. - */ - protected async resolveSuccess(): Promise { - const status = this.deployResult?.response?.status; - if (status !== RequestStatus.Succeeded && !this.aborted) { - this.setExitCode(1); - } - // if deploy failed OR the operation was cancelled, restore the stashed files if they exist - else if (status !== RequestStatus.Succeeded || this.aborted) { - await Promise.all( - this.mixedDeployDelete.delete.map(async (file) => { - await this.restoreFileFromStash(file.filePath); - }) - ); - } else if (this.mixedDeployDelete.delete.length) { - // successful delete -> delete the stashed file - await this.deleteStash(); - } - } - - protected formatResult(): DeployCommandResult { - const formatterOptions = { - verbose: this.flags.verbose ?? false, - }; - - this.deleteResultFormatter = this.mixedDeployDelete.deploy.length - ? new DeployResultFormatter(new Ux({ jsonEnabled: this.jsonEnabled() }), formatterOptions, this.deployResult) - : new DeleteResultFormatter(new Ux({ jsonEnabled: this.jsonEnabled() }), formatterOptions, this.deployResult); - - // Only display results to console when JSON flag is unset. - if (!this.jsonEnabled()) { - this.deleteResultFormatter.display(); - } - - if (this.mixedDeployDelete.deploy.length && !this.aborted) { - // override JSON output when we actually deployed - const json = this.deleteResultFormatter.getJson(); - json.deletedSource = this.mixedDeployDelete.delete; // to match toolbelt json output - json.outboundFiles = []; // to match toolbelt version - json.deletes = json.deploys; // to match toolbelt version - delete json.deploys; - return json; - } - - if (this.aborted) { - return { - status: 0, - result: { - deletedSource: [], - outboundFiles: [], - deletes: [{}], - }, - } as unknown as DeployCommandResult; - } - - return this.deleteResultFormatter.getJson(); - } - - private async maybeUpdateTracking(): Promise { - if (this.flags.tracksource ?? false) { - return updateTracking({ - ux: new Ux({ jsonEnabled: this.jsonEnabled() }), - result: this.deployResult, - tracking: this.tracking, - fileResponses: this.fileResponses, - }); - } - } - - private async deleteFilesLocally(): Promise { - if (!this.flags.checkonly && this.deployResult?.response?.status === RequestStatus.Succeeded) { - const promises = []; - this.components.map((component: SourceComponent) => { - // mixed delete/deploy operations have already been deleted and stashed - if (!this.mixedDeployDelete.delete.length) { - if (component.content) { - const stats = fs.statSync(component.content); - if (stats.isDirectory()) { - promises.push(fsPromises.rm(component.content, { recursive: true })); - } else { - promises.push(fsPromises.unlink(component.content)); - } - } - if (component.xml) { - promises.push(fsPromises.unlink(component.xml)); - } - } - }); - await Promise.all(promises); - } - } - - private async moveFileToStash(file: string): Promise { - await fsPromises.mkdir(path.dirname(this.stashPath.get(file)), { recursive: true }); - await fsPromises.copyFile(file, this.stashPath.get(file)); - await fsPromises.unlink(file); - } - - private async restoreFileFromStash(file: string): Promise { - await fsPromises.rename(this.stashPath.get(file), file); - } - - private async deleteStash(): Promise { - await fsPromises.rm(this.tempDir, { recursive: true, force: true }); - } - - private async moveBundleToManifest(bundle: SourceComponent, sourcepath: string): Promise { - // if one of the passed in sourcepaths is to a bundle component - const fileName = path.basename(sourcepath); - const fullName = path.join(bundle.name, fileName); - this.mixedDeployDelete.delete.push({ - state: ComponentStatus.Deleted, - fullName, - type: bundle.type.name, - filePath: sourcepath, - }); - // stash the file in case we need to restore it due to failed deploy/aborted command - this.stashPath.set(sourcepath, path.join(this.tempDir, fullName)); - await this.moveFileToStash(sourcepath); - - // re-walk the directory to avoid picking up the deleted file - this.mixedDeployDelete.deploy.push(...bundle.walkContent()); - - // now remove the bundle from destructive changes and add to manifest - // set the bundle as NOT marked for delete - this.componentSet.destructiveChangesPost.delete(`${bundle.type.id}#${bundle.fullName}`); - bundle.setMarkedForDelete(false); - this.componentSet.add(bundle); - } - - private async handlePrompt(): Promise { - if (!this.flags.noprompt) { - const remote: string[] = []; - let local: string[] = []; - const message: string[] = []; - - this.components.flatMap((component) => { - if (component instanceof SourceComponent) { - local.push(component.xml, ...component.walkContent()); - } else { - // remote only metadata - remote.push(`${component.type.name}:${component.fullName}`); - } - }); - - if (this.mixedDeployDelete.delete.length) { - local = this.mixedDeployDelete.delete.map((fr) => fr.fullName); - } - - if (this.mixedDeployDelete.deploy.length) { - message.push(messages.getMessage('deployPrompt', [[...new Set(this.mixedDeployDelete.deploy)].join('\n')])); - } - - if (remote.length) { - message.push(messages.getMessage('remotePrompt', [[...new Set(remote)].join('\n')])); - } - - if (local.length) { - if (message.length) { - // add a whitespace between remote and local - message.push('\n'); - } - message.push('\n', messages.getMessage('localPrompt', [[...new Set(local)].join('\n')])); - } - - message.push( - this.flags.checkonly ?? false ? messages.getMessage('areYouSureCheckOnly') : messages.getMessage('areYouSure') - ); - return ux.confirm(message.join('')); - } - return true; - } -} diff --git a/src/commands/force/source/deploy.ts b/src/commands/force/source/deploy.ts index 3fd4bff57..7fad643a0 100644 --- a/src/commands/force/source/deploy.ts +++ b/src/commands/force/source/deploy.ts @@ -39,9 +39,15 @@ const xorFlags = ['manifest', 'metadata', 'sourcepath', 'validateddeployrequesti export type DeployCommandCombinedResult = DeployCommandResult | DeployCommandAsyncResult; +const replacement = 'project deploy start'; export class Deploy extends DeployCommand { public static readonly description = messages.getMessage('description'); public static readonly examples = messages.getMessages('examples'); + public static readonly state = 'deprecated'; + public static readonly deprecationOptions = { + to: replacement, + message: messages.getMessage('deprecation', [replacement]), + }; public static readonly requiresProject = true; public static readonly flags = { 'api-version': orgApiVersionFlagWithDeprecations, diff --git a/src/commands/force/source/deploy/cancel.ts b/src/commands/force/source/deploy/cancel.ts index ed9d2981e..fc0482417 100644 --- a/src/commands/force/source/deploy/cancel.ts +++ b/src/commands/force/source/deploy/cancel.ts @@ -24,10 +24,15 @@ import { Messages.importMessagesDirectory(__dirname); const messages = Messages.loadMessages('@salesforce/plugin-source', 'cancel'); +const replacement = 'project deploy cancel'; export class Cancel extends DeployCommand { public static readonly description = messages.getMessage('description'); public static readonly examples = messages.getMessages('examples'); - public static readonly requiresUsername = true; + public static readonly state = 'deprecated'; + public static readonly deprecationOptions = { + to: replacement, + message: messages.getMessage('deprecation', [replacement]), + }; public static readonly flags = { 'api-version': orgApiVersionFlagWithDeprecations, loglevel, diff --git a/src/commands/force/source/deploy/report.ts b/src/commands/force/source/deploy/report.ts index 63e7eec15..3c67d1063 100644 --- a/src/commands/force/source/deploy/report.ts +++ b/src/commands/force/source/deploy/report.ts @@ -31,10 +31,16 @@ import { ResultFormatterOptions } from '../../../../formatters/resultFormatter'; Messages.importMessagesDirectory(__dirname); const messages = Messages.loadMessages('@salesforce/plugin-source', 'report'); +const replacement = 'project deploy report'; + export class Report extends DeployCommand { public static readonly description = messages.getMessage('description'); public static readonly examples = messages.getMessages('examples'); - public static readonly requiresUsername = true; + public static readonly state = 'deprecated'; + public static readonly deprecationOptions = { + to: replacement, + message: messages.getMessage('deprecation', [replacement]), + }; public static readonly flags = { 'api-version': orgApiVersionFlagWithDeprecations, loglevel, diff --git a/src/commands/force/source/ignored/list.ts b/src/commands/force/source/ignored/list.ts index c9e461569..062cad62c 100644 --- a/src/commands/force/source/ignored/list.ts +++ b/src/commands/force/source/ignored/list.ts @@ -19,12 +19,17 @@ export type SourceIgnoredResults = { ignoredFiles: string[]; }; +const replacement = 'project deploy preview --only-ignored'; export class SourceIgnoredCommand extends SfCommand { public static readonly summary = messages.getMessage('description'); public static readonly description = messages.getMessage('description'); public static readonly requiresProject = true; public static readonly examples = []; - + public static readonly state = 'deprecated'; + public static readonly deprecationOptions = { + to: replacement, + message: messages.getMessage('deprecation', [replacement]), + }; public static readonly flags = { sourcepath: Flags.file({ char: 'p', diff --git a/src/commands/force/source/manifest/create.ts b/src/commands/force/source/manifest/create.ts deleted file mode 100644 index a58b7e8f8..000000000 --- a/src/commands/force/source/manifest/create.ts +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (c) 2020, salesforce.com, inc. - * All rights reserved. - * Licensed under the BSD 3-Clause license. - * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ -import { join } from 'path'; -import * as fs from 'fs'; -import { Messages } from '@salesforce/core'; -import { ComponentSetBuilder } from '@salesforce/source-deploy-retrieve'; -import { arrayWithDeprecation, Flags, loglevel, orgApiVersionFlagWithDeprecations } from '@salesforce/sf-plugins-core'; -import { Interfaces } from '@oclif/core'; -import { SourceCommand } from '../../../../sourceCommand'; - -Messages.importMessagesDirectory(__dirname); -const messages = Messages.loadMessages('@salesforce/plugin-source', 'create'); - -const manifestTypes: Record = { - pre: 'destructiveChangesPre.xml', - post: 'destructiveChangesPost.xml', - destroy: 'destructiveChanges.xml', - package: 'package.xml', -}; - -const packageTypes: Record = { - managed: ['beta', 'deleted', 'deprecated', 'installed', 'released'], - unlocked: ['deprecatedEditable', 'installedEditable'], -}; - -export type CreateCommandResult = { - name: string; - path: string; -}; - -const xorFlags = ['metadata', 'sourcepath', 'fromorg']; -export class Create extends SourceCommand { - public static readonly description = messages.getMessage('description'); - public static readonly examples = messages.getMessages('examples'); - public static readonly requiresProject = true; - public static readonly flags = { - 'api-version': orgApiVersionFlagWithDeprecations, - loglevel, - metadata: arrayWithDeprecation({ - char: 'm', - description: messages.getMessage('flags.metadata'), - exactlyOne: xorFlags, - }), - sourcepath: arrayWithDeprecation({ - char: 'p', - description: messages.getMessage('flags.sourcepath'), - exactlyOne: xorFlags, - }), - manifestname: Flags.string({ - char: 'n', - description: messages.getMessage('flags.manifestname'), - exclusive: ['manifesttype'], - }), - manifesttype: Flags.string({ - description: messages.getMessage('flags.manifesttype'), - options: Object.keys(manifestTypes), - char: 't', - }), - includepackages: arrayWithDeprecation({ - description: messages.getMessage('flags.includepackages'), - options: Object.keys(packageTypes), - char: 'c', - dependsOn: ['fromorg'], - }), - fromorg: Flags.string({ - description: messages.getMessage('flags.fromorg'), - exactlyOne: xorFlags, - }), - outputdir: Flags.string({ - char: 'o', - description: messages.getMessage('flags.outputdir'), - }), - }; - private manifestName: string; - private outputDir: string; - private outputPath: string; - private includepackages: string[]; - private flags: Interfaces.InferredFlags; - - public async run(): Promise { - this.flags = (await this.parse(Create)).flags; - await this.createManifest(); - this.resolveSuccess(); - return this.formatResult(); - } - - protected async createManifest(): Promise { - // convert the manifesttype into one of the "official" manifest names - // if no manifesttype flag passed, use the manifestname flag - // if no manifestname flag, default to 'package.xml' - this.manifestName = manifestTypes[this.flags.manifesttype] || this.flags.manifestname || 'package.xml'; - this.outputDir = this.flags.outputdir; - this.includepackages = this.flags.includepackages; - - let exclude: string[] = []; - if (this.includepackages) { - Object.keys(packageTypes).forEach( - (type) => (exclude = !this.includepackages.includes(type) ? exclude.concat(packageTypes[type]) : exclude) - ); - } else { - exclude = Object.values(packageTypes).flat(); - } - - const componentSet = await ComponentSetBuilder.build({ - apiversion: this.flags['api-version'] ?? (await this.getSourceApiVersion()), - sourcepath: this.flags.sourcepath, - metadata: this.flags.metadata && { - metadataEntries: this.flags.metadata, - directoryPaths: this.getPackageDirs(), - }, - org: this.flags.fromorg && { - username: this.flags.fromorg, - exclude, - }, - }); - - // add the .xml suffix if the user just provided a file name - this.manifestName = this.manifestName.endsWith('.xml') ? this.manifestName : this.manifestName + '.xml'; - - if (this.outputDir) { - await fs.promises.mkdir(this.outputDir, { recursive: true }); - this.outputPath = join(this.outputDir, this.manifestName); - } else { - this.outputPath = this.manifestName; - } - - return fs.promises.writeFile(this.outputPath, await componentSet.getPackageXml()); - } - - // noop this method because any errors will be reported by the createManifest method - // eslint-disable-next-line @typescript-eslint/no-empty-function, class-methods-use-this - protected resolveSuccess(): void {} - - protected formatResult(): CreateCommandResult { - if (!this.jsonEnabled()) { - if (this.outputDir) { - this.log(messages.getMessage('successOutputDir', [this.manifestName, this.outputDir])); - } else { - this.log(messages.getMessage('success', [this.manifestName])); - } - } - return { path: this.outputPath, name: this.manifestName }; - } -} diff --git a/src/commands/force/source/pull.ts b/src/commands/force/source/pull.ts index 971e150ea..fa6892ad5 100644 --- a/src/commands/force/source/pull.ts +++ b/src/commands/force/source/pull.ts @@ -25,9 +25,14 @@ Messages.importMessagesDirectory(__dirname); const messages = Messages.loadMessages('@salesforce/plugin-source', 'pull'); const retrieveMessages = Messages.loadMessages('@salesforce/plugin-source', 'retrieve'); +const replacement = 'project retrieve start'; + export default class Pull extends SourceCommand { - public static aliases = ['force:source:beta:pull']; - public static deprecateAliases = true; + public static readonly state = 'deprecated'; + public static readonly deprecationOptions = { + to: replacement, + message: messages.getMessage('deprecation', [replacement]), + }; public static description = messages.getMessage('description'); public static help = messages.getMessage('help'); public static readonly flags = { diff --git a/src/commands/force/source/push.ts b/src/commands/force/source/push.ts index 1b304890c..9bdefff87 100644 --- a/src/commands/force/source/push.ts +++ b/src/commands/force/source/push.ts @@ -30,8 +30,13 @@ Messages.importMessagesDirectory(__dirname); const messages = Messages.loadMessages('@salesforce/plugin-source', 'push'); const deployMessages = Messages.loadMessages('@salesforce/plugin-source', 'deployCommand'); +const replacement = 'project deploy start'; + export default class Push extends DeployCommand { - public static aliases = ['force:source:beta:push']; + public static readonly deprecationOptions = { + to: replacement, + message: messages.getMessage('deprecation', [replacement]), + }; public static description = messages.getMessage('description'); public static help = messages.getMessage('help'); public static requiresProject = true; diff --git a/src/commands/force/source/retrieve.ts b/src/commands/force/source/retrieve.ts index 36e21c1ef..389951626 100644 --- a/src/commands/force/source/retrieve.ts +++ b/src/commands/force/source/retrieve.ts @@ -16,6 +16,7 @@ import { RequestStatus, RetrieveVersionData, RetrieveResult, + RegistryAccess, } from '@salesforce/source-deploy-retrieve'; import { SourceTracking } from '@salesforce/source-tracking'; import { Interfaces } from '@oclif/core'; @@ -41,11 +42,18 @@ const messages = Messages.loadMessages('@salesforce/plugin-source', 'retrieve'); const spinnerMessages = Messages.loadMessages('@salesforce/plugin-source', 'spinner'); const retrieveMessages = Messages.loadMessages('@salesforce/plugin-source', 'retrieve'); +const replacement = 'project retrieve start'; + export class Retrieve extends SourceCommand { public static readonly description = messages.getMessage('description'); public static readonly examples = messages.getMessages('examples'); public static readonly requiresProject = true; public static readonly requiresUsername = true; + public static readonly state = 'deprecated'; + public static readonly deprecationOptions = { + to: replacement, + message: messages.getMessage('deprecation', [replacement]), + }; public static readonly flags = { 'api-version': orgApiVersionFlagWithDeprecations, loglevel, @@ -109,6 +117,7 @@ export class Retrieve extends SourceCommand { protected tracking: SourceTracking; private resolvedTargetDir: string; private flags: Interfaces.InferredFlags; + private registry = new RegistryAccess(); public async run(): Promise { this.flags = (await this.parse(Retrieve)).flags; @@ -175,7 +184,10 @@ export class Retrieve extends SourceCommand { if (this.flags.manifest || this.flags.metadata) { if (this.wantsToRetrieveCustomFields()) { this.warn(messages.getMessage('wantsToRetrieveCustomFields')); - this.componentSet.add({ fullName: ComponentSet.WILDCARD, type: { id: 'customobject', name: 'CustomObject' } }); + this.componentSet.add({ + fullName: ComponentSet.WILDCARD, + type: this.registry.getTypeByName('CustomObject'), + }); } } if (this.flags.tracksource) { @@ -267,12 +279,12 @@ export class Retrieve extends SourceCommand { private wantsToRetrieveCustomFields(): boolean { const hasCustomField = this.componentSet.has({ - type: { name: 'CustomField', id: 'customfield' }, + type: this.registry.getTypeByName('CustomField'), fullName: ComponentSet.WILDCARD, }); const hasCustomObject = this.componentSet.has({ - type: { name: 'CustomObject', id: 'customobject' }, + type: this.registry.getTypeByName('CustomObject'), fullName: ComponentSet.WILDCARD, }); return hasCustomField && !hasCustomObject; diff --git a/src/commands/force/source/status.ts b/src/commands/force/source/status.ts index 00ca4143c..5d90cf757 100644 --- a/src/commands/force/source/status.ts +++ b/src/commands/force/source/status.ts @@ -24,12 +24,16 @@ const messages = Messages.loadMessages('@salesforce/plugin-source', 'status'); export type StatusCommandResult = StatusResult[]; +const replacement = 'project retrieve/deploy preview'; export default class Status extends SfCommand { - public static readonly deprecateAliases = true; - public static aliases = ['force:source:beta:status']; public static readonly summary = messages.getMessage('description'); public static readonly description = messages.getMessage('description'); public static readonly examples = messages.getMessages('examples'); + public static readonly state = 'deprecated'; + public static readonly deprecationOptions = { + to: replacement, + message: messages.getMessage('deprecation', [replacement]), + }; public static readonly flags = { 'api-version': orgApiVersionFlagWithDeprecations, loglevel, diff --git a/src/commands/force/source/tracking/clear.ts b/src/commands/force/source/tracking/clear.ts deleted file mode 100644 index c73237520..000000000 --- a/src/commands/force/source/tracking/clear.ts +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2020, salesforce.com, inc. - * All rights reserved. - * Licensed under the BSD 3-Clause license. - * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ - -import { Messages } from '@salesforce/core'; -import * as chalk from 'chalk'; -import { SourceTracking, throwIfInvalid } from '@salesforce/source-tracking'; -import { - Flags, - loglevel, - orgApiVersionFlagWithDeprecations, - requiredOrgFlagWithDeprecations, - SfCommand, -} from '@salesforce/sf-plugins-core'; - -Messages.importMessagesDirectory(__dirname); -const messages = Messages.loadMessages('@salesforce/plugin-source', 'tracking'); - -export type SourceTrackingClearResult = { - clearedFiles: string[]; -}; - -export class Clear extends SfCommand { - public static readonly deprecateAliases = true; - public static aliases = ['force:source:beta:tracking:clear']; - public static readonly summary = messages.getMessage('clearDescription'); - public static readonly description = messages.getMessage('clearDescription'); - public static readonly requiresProject = true; - public static readonly examples = []; - - public static readonly flags = { - 'api-version': orgApiVersionFlagWithDeprecations, - loglevel, - 'target-org': requiredOrgFlagWithDeprecations, - noprompt: Flags.boolean({ - char: 'p', - summary: messages.getMessage('nopromptDescription'), - required: false, - }), - }; - - public async run(): Promise { - const { flags } = await this.parse(Clear); - throwIfInvalid({ - org: flags['target-org'], - projectPath: this.project.getPath(), - toValidate: 'plugin-source', - command: 'force:source:tracking:clear', - }); - let clearedFiles: string[] = []; - if (flags.noprompt || (await this.confirm(chalk.dim(messages.getMessage('promptMessage'))))) { - const sourceTracking = await SourceTracking.create({ - project: this.project, - org: flags['target-org'], - }); - clearedFiles = await Promise.all([sourceTracking.clearLocalTracking(), sourceTracking.clearRemoteTracking()]); - this.log('Cleared local tracking files.'); - } - return { clearedFiles }; - } -} diff --git a/src/commands/force/source/tracking/reset.ts b/src/commands/force/source/tracking/reset.ts deleted file mode 100644 index 070779f0b..000000000 --- a/src/commands/force/source/tracking/reset.ts +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2020, salesforce.com, inc. - * All rights reserved. - * Licensed under the BSD 3-Clause license. - * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ - -import { Messages } from '@salesforce/core'; -import * as chalk from 'chalk'; -import { SourceTracking, throwIfInvalid } from '@salesforce/source-tracking'; -import { - Flags, - loglevel, - orgApiVersionFlagWithDeprecations, - requiredOrgFlagWithDeprecations, - SfCommand, -} from '@salesforce/sf-plugins-core'; - -Messages.importMessagesDirectory(__dirname); -const messages = Messages.loadMessages('@salesforce/plugin-source', 'tracking'); - -export type SourceTrackingResetResult = { - sourceMembersSynced: number; - localPathsSynced: number; -}; - -export class Reset extends SfCommand { - public static readonly deprecateAliases = true; - public static aliases = ['force:source:beta:tracking:reset']; - public static readonly summary = messages.getMessage('resetDescription'); - public static readonly description = messages.getMessage('resetDescription'); - public static readonly requiresProject = true; - public static readonly examples = []; - - public static readonly flags = { - 'target-org': requiredOrgFlagWithDeprecations, - 'api-version': orgApiVersionFlagWithDeprecations, - loglevel, - revision: Flags.integer({ - char: 'r', - summary: messages.getMessage('revisionDescription'), - min: 0, - }), - noprompt: Flags.boolean({ - char: 'p', - summary: messages.getMessage('nopromptDescription'), - }), - }; - - public async run(): Promise { - const { flags } = await this.parse(Reset); - throwIfInvalid({ - org: flags['target-org'], - projectPath: this.project.getPath(), - toValidate: 'plugin-source', - command: 'force:source:tracking:clear', - }); - - if (flags.noprompt || (await this.confirm(chalk.dim(messages.getMessage('promptMessage'))))) { - const sourceTracking = await SourceTracking.create({ - project: this.project, - org: flags['target-org'], - }); - - const [remoteResets, localResets] = await Promise.all([ - sourceTracking.resetRemoteTracking(flags.revision), - sourceTracking.resetLocalTracking(), - ]); - - this.log(`Reset local tracking files${flags.revision ? ` to revision ${flags.revision}` : ''}.`); - - return { - sourceMembersSynced: remoteResets, - localPathsSynced: localResets.length, - }; - } - - return { - sourceMembersSynced: 0, - localPathsSynced: 0, - }; - } -} diff --git a/src/formatters/convertResultFormatter.ts b/src/formatters/convertResultFormatter.ts deleted file mode 100644 index 8f3ff997d..000000000 --- a/src/formatters/convertResultFormatter.ts +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2020, salesforce.com, inc. - * All rights reserved. - * Licensed under the BSD 3-Clause license. - * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ - -import { resolve } from 'path'; - -import { Messages, SfError } from '@salesforce/core'; -import { ConvertResult } from '@salesforce/source-deploy-retrieve'; -import { Ux } from '@salesforce/sf-plugins-core'; -import { ResultFormatter } from './resultFormatter'; - -Messages.importMessagesDirectory(__dirname); -const messages = Messages.loadMessages('@salesforce/plugin-source', 'convert'); - -export type ConvertCommandResult = { - location: string; -}; - -export class ConvertResultFormatter extends ResultFormatter { - protected result: ConvertResult; - - public constructor(ux: Ux, result: ConvertResult) { - super(ux); - this.result = result; - } - - public getJson(): ConvertCommandResult { - return { - location: resolve(this.result.packagePath), - }; - } - - public display(): void { - if (this.isSuccess()) { - this.ux.log(messages.getMessage('success', [this.result.packagePath])); - } else { - throw new SfError(messages.getMessage('convertFailed'), 'ConvertFailed'); - } - } -} diff --git a/src/formatters/deployProgressStatusFormatter.ts b/src/formatters/deployProgressStatusFormatter.ts index 41fb4ffeb..dae5e531b 100644 --- a/src/formatters/deployProgressStatusFormatter.ts +++ b/src/formatters/deployProgressStatusFormatter.ts @@ -10,18 +10,26 @@ import { MetadataApiDeploy, MetadataApiDeployStatus } from '@salesforce/source-d import { Duration } from '@salesforce/kit'; import { Ux } from '@salesforce/sf-plugins-core'; import { ProgressFormatter } from './progressFormatter'; +import { ResultFormatterOptions } from './resultFormatter'; export class DeployProgressStatusFormatter extends ProgressFormatter { private previousComponents = -1; private previousTests = -1; - public constructor(ux: Ux) { + public constructor(ux: Ux, private options?: ResultFormatterOptions) { super(ux); } // This can be used to print the progress of the deployment. public progress(deploy: MetadataApiDeploy): void { deploy.onUpdate((data) => { - // Printing status only when number of components or tests gets changed in progress. - if (data.numberComponentsDeployed > this.previousComponents || data.numberTestsCompleted > this.previousTests) { + // Print status when: + // 1. Number of deployed components increases + // 2. Number of tests completed increases + // 3. Command is running in verbose mode (for updates on each poll) + if ( + data.numberComponentsDeployed > this.previousComponents || + data.numberTestsCompleted > this.previousTests || + this.options?.verbose + ) { this.printDeployStatus(data); this.previousComponents = data.numberComponentsDeployed; this.previousTests = data.numberTestsCompleted; diff --git a/src/formatters/deployResultFormatter.ts b/src/formatters/deployResultFormatter.ts index e4de0fe9d..8200f9846 100644 --- a/src/formatters/deployResultFormatter.ts +++ b/src/formatters/deployResultFormatter.ts @@ -16,6 +16,7 @@ import { DeployResult, Failures, FileResponse, + FileResponseFailure, MetadataApiDeployStatus, RequestStatus, Successes, @@ -153,7 +154,12 @@ export class DeployResultFormatter extends ResultFormatter { this.ux.log(''); this.ux.styledHeader(chalk.blue('Deployed Source')); this.ux.table( - successes.map((success) => ({ fullName: success.fullName, type: success.type, filePath: success.filePath })), + successes.map((success) => ({ + state: success.state, + fullName: success.fullName, + type: success.type, + filePath: success.filePath, + })), { fullName: { header: 'FULL NAME' }, type: { header: 'TYPE' }, @@ -216,10 +222,15 @@ export class DeployResultFormatter extends ResultFormatter { this.ux.log(''); this.ux.styledHeader(chalk.red(`Component Failures [${failures.length}]`)); this.ux.table( - failures.map((entry: FileResponse & DeployMessage) => ({ + failures.map((entry: FileResponseFailure) => ({ fullName: entry.fullName, problemType: entry.problemType, filePath: entry.filePath, + columnNumber: entry.columnNumber, + error: entry.error, + lineNumber: entry.lineNumber, + state: entry.state, + type: entry.type, })), { problemType: { header: 'Type' }, diff --git a/src/formatters/mdapi/convertResultFormatter.ts b/src/formatters/mdapi/convertResultFormatter.ts deleted file mode 100644 index a36dd1315..000000000 --- a/src/formatters/mdapi/convertResultFormatter.ts +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2020, salesforce.com, inc. - * All rights reserved. - * Licensed under the BSD 3-Clause license. - * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ - -import * as path from 'path'; -import { ConvertResult } from '@salesforce/source-deploy-retrieve'; -import { Ux } from '@salesforce/sf-plugins-core'; -import { ResultFormatter } from '../resultFormatter'; - -type ConvertEntry = { - fullName: string; - type: string; - filePath: string; - state: 'Add'; -}; - -export type ConvertCommandResult = ConvertEntry[]; - -export class ConvertResultFormatter extends ResultFormatter { - protected result: ConvertResult; - private convertResults: ConvertCommandResult; - - public constructor(ux: Ux, result: ConvertResult) { - super(ux); - this.result = result; - } - - public getJson(): ConvertCommandResult { - if (!this.convertResults) { - this.convertResults = []; - this.result?.converted.forEach((component) => { - if (component.xml) { - this.convertResults.push({ - fullName: component.fullName, - type: component.type.name, - filePath: path.relative('.', component.xml), - state: 'Add', - }); - } - if (component.content) { - this.convertResults.push({ - fullName: component.fullName, - type: component.type.name, - filePath: path.relative('.', component.content), - state: 'Add', - }); - } - }); - } - - return this.convertResults; - } - - public display(): void { - const convertData = this.getJson(); - if (convertData?.length) { - this.ux.table( - convertData.map((entry) => ({ - state: entry.state, - fullName: entry.fullName, - type: entry.type, - filePath: entry.filePath, - })), - { - state: { header: 'STATE' }, - fullName: { header: 'FULL NAME' }, - type: { header: 'TYPE' }, - filePath: { header: 'PROJECT PATH' }, - } - ); - } else { - this.ux.log('No metadata found to convert'); - } - } -} diff --git a/src/formatters/retrieveResultFormatter.ts b/src/formatters/retrieveResultFormatter.ts index b6339dbfe..6666f4286 100644 --- a/src/formatters/retrieveResultFormatter.ts +++ b/src/formatters/retrieveResultFormatter.ts @@ -103,11 +103,13 @@ export class RetrieveResultFormatter extends RetrieveFormatter { fullName: retrieved.fullName, type: retrieved.type, filePath: retrieved.filePath, + state: retrieved.state, })), { fullName: { header: 'FULL NAME' }, type: { header: 'TYPE' }, filePath: { header: 'PROJECT PATH' }, + state: { header: 'STATE' }, } ); } diff --git a/src/formatters/source/deleteResultFormatter.ts b/src/formatters/source/deleteResultFormatter.ts deleted file mode 100644 index f2b45f94b..000000000 --- a/src/formatters/source/deleteResultFormatter.ts +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2020, salesforce.com, inc. - * All rights reserved. - * Licensed under the BSD 3-Clause license. - * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ -import { DeployMessage, DeployResult, FileResponse } from '@salesforce/source-deploy-retrieve'; -import * as chalk from 'chalk'; -import { ensureArray } from '@salesforce/kit'; -import { Ux } from '@salesforce/sf-plugins-core'; -import { DeployCommandResult, DeployResultFormatter } from '../deployResultFormatter'; -import { ResultFormatterOptions } from '../resultFormatter'; - -export class DeleteResultFormatter extends DeployResultFormatter { - public constructor(ux: Ux, options: ResultFormatterOptions, result?: DeployResult) { - super(ux, options, result); - } - - /** - * Get the JSON output from the DeployResult. - * - * @returns a JSON formatted result matching the provided type. - */ - public getJson(): DeployCommandResult { - const json = this.getResponse() as DeployCommandResult; - json.deletedSource = this.fileResponses; // to match toolbelt json output - json.outboundFiles = []; // to match toolbelt version - json.deletes = [Object.assign({}, this.getResponse())]; // to match toolbelt version - - return json; - } - - public displayNoResultsFound(): void { - // matches toolbelt - this.ux.styledHeader(chalk.blue('Deleted Source')); - this.ux.log('No results found'); - } - - protected displaySuccesses(): void { - if (this.isSuccess()) { - const successes: Array = []; - const fileResponseSuccesses: Map = new Map(); - - if (this.fileResponses?.length) { - const fileResponses: FileResponse[] = []; - this.fileResponses.map((f: FileResponse) => { - fileResponses.push(f); - fileResponseSuccesses.set(`${f.type}#${f.fullName}`, f); - }); - this.sortFileResponses(fileResponses); - this.asRelativePaths(fileResponses); - successes.push(...fileResponses); - } - - const deployMessages = ensureArray(this.result?.response?.details?.componentSuccesses).filter( - (item) => !item.fileName.includes('package.xml') - ); - if (deployMessages.length >= successes.length) { - // if there's additional successes in the API response, find the success and add it to the output - deployMessages.map((deployMessage) => { - if (!fileResponseSuccesses.has(`${deployMessage.componentType}#${deployMessage.fullName}`)) { - successes.push( - Object.assign(deployMessage, { - type: deployMessage.componentType, - }) - ); - } - }); - } - - this.ux.log(''); - this.ux.styledHeader(chalk.blue('Deleted Source')); - this.ux.table( - successes.map((entry: FileResponse) => ({ - fullName: entry.fullName, - type: entry.type, - filePath: entry.filePath, - })), - { - fullName: { header: 'FULL NAME' }, - type: { header: 'TYPE' }, - filePath: { header: 'PROJECT PATH' }, - } - ); - } - } -} diff --git a/src/stash.ts b/src/stash.ts index 893938966..d29851eea 100644 --- a/src/stash.ts +++ b/src/stash.ts @@ -53,7 +53,6 @@ export class Stash { 'force:source:deploy': Stash.KEYS.SOURCE_DEPLOY, 'force:source:deploy:cancel': Stash.KEYS.SOURCE_DEPLOY, 'force:source:deploy:report': Stash.KEYS.SOURCE_DEPLOY, - 'force:source:delete': Stash.KEYS.SOURCE_DEPLOY, 'force:mdapi:retrieve': Stash.KEYS.MDAPI_RETRIEVE, 'force:mdapi:retrieve:report': Stash.KEYS.MDAPI_RETRIEVE, 'force:mdapi:beta:retrieve': Stash.KEYS.MDAPI_RETRIEVE, diff --git a/test/commands/mdapi/cancel.test.ts b/test/commands/mdapi/cancel.test.ts index a85e2d3e9..b47eaf9ed 100644 --- a/test/commands/mdapi/cancel.test.ts +++ b/test/commands/mdapi/cancel.test.ts @@ -8,11 +8,12 @@ import { join } from 'path'; import * as sinon from 'sinon'; import { expect } from 'chai'; -import { fromStub, spyMethod, stubInterface, stubMethod } from '@salesforce/ts-sinon'; -import { ConfigFile, Org, SfProject } from '@salesforce/core'; -import { Config } from '@oclif/core'; -import { UX } from '@salesforce/command'; +import { spyMethod, stubMethod } from '@salesforce/ts-sinon'; +import { ConfigFile } from '@salesforce/core'; + import { MetadataApiDeploy } from '@salesforce/source-deploy-retrieve'; +import { MockTestOrgData, TestContext } from '@salesforce/core/lib/testSetup'; +import { stubSfCommandUx, stubUx } from '@salesforce/sf-plugins-core'; import { Cancel } from '../../../src/commands/force/mdapi/deploy/cancel'; import { DeployCancelResultFormatter } from '../../../src/formatters/deployCancelResultFormatter'; import { DeployCommandResult } from '../../../src/formatters/deployResultFormatter'; @@ -20,8 +21,11 @@ import { getDeployResult } from '../source/deployResponses'; import { Stash } from '../../../src/stash'; describe('force:mdapi:deploy:cancel', () => { - const sandbox = sinon.createSandbox(); - const username = 'cancel-test@org.com'; + Cancel.id = 'force:mdapi:deploy:cancel'; + + const $$ = new TestContext(); + let testOrg: MockTestOrgData; + const defaultDir = join('my', 'default', 'package'); const stashedDeployId = 'IMA000STASHID'; @@ -29,116 +33,83 @@ describe('force:mdapi:deploy:cancel', () => { const expectedResults = deployResult.response as DeployCommandResult; expectedResults.deployedSource = deployResult.getFileResponses(); expectedResults.outboundFiles = []; - expectedResults.deploys = [deployResult.response]; // Stubs - const oclifConfigStub = fromStub(stubInterface(sandbox)); - let checkDeployStatusStub: sinon.SinonStub; + let pollStub: sinon.SinonStub; let cancelStub: sinon.SinonStub; - let uxLogStub: sinon.SinonStub; - - class TestCancel extends Cancel { - public async runIt() { - await this.init(); - // oclif would normally populate this, but UT don't have it - this.id ??= 'force:mdapi:deploy:cancel'; - return this.run(); - } - public setOrg(org: Org) { - this.org = org; - } - public setProject(project: SfProject) { - this.project = project; - } - - // eslint-disable-next-line class-methods-use-this - public createDeploy(): MetadataApiDeploy { - cancelStub = sandbox.stub(MetadataApiDeploy.prototype, 'cancel'); - return MetadataApiDeploy.prototype; - } - } - - const runCancelCmd = async (params: string[]) => { - // @ts-expect-error type mismatch between oclif/core v1 and v2 - const cmd = new TestCancel(params, oclifConfigStub); - stubMethod(sandbox, cmd, 'assignProject').callsFake(() => { - const SfProjectStub = fromStub( - stubInterface(sandbox, { - getUniquePackageDirectories: () => [{ fullPath: defaultDir }], - }) - ); - cmd.setProject(SfProjectStub); - }); - stubMethod(sandbox, cmd, 'assignOrg').callsFake(() => { - const orgStub = fromStub( - stubInterface(sandbox, { - getUsername: () => username, - getConnection: () => ({ - metadata: { - checkDeployStatus: checkDeployStatusStub, - }, - }), - }) - ); - cmd.setOrg(orgStub); - }); - uxLogStub = stubMethod(sandbox, UX.prototype, 'log'); - stubMethod(sandbox, ConfigFile.prototype, 'readSync'); - stubMethod(sandbox, ConfigFile.prototype, 'get').returns({ jobid: stashedDeployId }); - checkDeployStatusStub = sandbox.stub().resolves(expectedResults); + let sfCommandUxStubs: ReturnType; + let stubUxStubs: ReturnType; - return cmd.runIt(); - }; + beforeEach(async () => { + // to suppress the output of the ux in test results + sfCommandUxStubs = stubSfCommandUx($$.SANDBOX); + // because we're constructing a Ux and passing it to the formatter + stubUxStubs = stubUx($$.SANDBOX); + // stash uses the ID. Oclif doesn't have it set on static run, so we add it manually + testOrg = new MockTestOrgData(); + await $$.stubAuths(testOrg); + await $$.stubConfig({ 'target-org': testOrg.username }); - afterEach(() => { - sandbox.restore(); + stubMethod($$.SANDBOX, ConfigFile.prototype, 'get').returns({ jobid: stashedDeployId }); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + pollStub = $$.SANDBOX.stub(Cancel.prototype, 'poll').resolves({ response: expectedResults }); + stubMethod($$.SANDBOX, Cancel.prototype, 'createDeploy').returns(MetadataApiDeploy.prototype); + cancelStub = $$.SANDBOX.stub(MetadataApiDeploy.prototype, 'cancel'); + $$.setConfigStubContents('sfdx-project.json', { + packageDirectories: [{ fullPath: defaultDir, path: defaultDir, name: 'default' }], + }); }); it('should use stashed deploy ID', async () => { - const getStashSpy = spyMethod(sandbox, Stash, 'get'); - const result = await runCancelCmd(['--json']); + const getStashSpy = spyMethod($$.SANDBOX, Stash, 'get'); + const result = await Cancel.run(['--json']); + expect(result).to.deep.equal(expectedResults); expect(getStashSpy.called).to.equal(true); - expect(checkDeployStatusStub.firstCall.args[0]).to.equal(stashedDeployId); + expect(pollStub.firstCall.args[1]).to.equal(stashedDeployId); expect(cancelStub.calledOnce).to.equal(true); + expect(sfCommandUxStubs.log.callCount).to.equal(0); + expect(stubUxStubs.log.callCount).to.equal(0); }); it('should display stashed deploy ID', async () => { - const result = await runCancelCmd([]); + const result = await Cancel.run([]); expect(result).to.deep.equal(expectedResults); - expect(uxLogStub.firstCall.args[0]).to.contain(stashedDeployId); }); it('should use the jobid flag', async () => { - const getStashSpy = spyMethod(sandbox, Stash, 'get'); - const result = await runCancelCmd(['--json', '--jobid', expectedResults.id]); + const getStashSpy = spyMethod($$.SANDBOX, Stash, 'get'); + const result = await Cancel.run(['--json', '--jobid', expectedResults.id]); + expect(result).to.deep.equal(expectedResults); expect(getStashSpy.called).to.equal(false); - expect(checkDeployStatusStub.firstCall.args[0]).to.equal(expectedResults.id); + expect(pollStub.firstCall.args[1]).to.equal(expectedResults.id); expect(cancelStub.calledOnce).to.equal(true); }); it('should display the jobid flag', async () => { - const result = await runCancelCmd(['--jobid', expectedResults.id]); + const result = await Cancel.run(['--jobid', expectedResults.id]); expect(result).to.deep.equal(expectedResults); - expect(uxLogStub.firstCall.args[0]).to.contain(expectedResults.id); + expect(stubUxStubs.log.args.flat()).to.deep.include(`Successfully canceled ${expectedResults.id}`); }); it('should display output with no --json', async () => { - const displayStub = sandbox.stub(DeployCancelResultFormatter.prototype, 'display'); - const getJsonStub = sandbox.stub(DeployCancelResultFormatter.prototype, 'getJson'); - await runCancelCmd([]); + const displayStub = $$.SANDBOX.stub(DeployCancelResultFormatter.prototype, 'display'); + const getJsonStub = $$.SANDBOX.stub(DeployCancelResultFormatter.prototype, 'getJson'); + await Cancel.run([]); expect(displayStub.calledOnce).to.equal(true); expect(getJsonStub.calledOnce).to.equal(true); - expect(uxLogStub.called).to.equal(true); }); it('should NOT display output with --json', async () => { - const displayStub = sandbox.stub(DeployCancelResultFormatter.prototype, 'display'); - const getJsonStub = sandbox.stub(DeployCancelResultFormatter.prototype, 'getJson'); - await runCancelCmd(['--json']); + const displayStub = $$.SANDBOX.stub(DeployCancelResultFormatter.prototype, 'display'); + const getJsonStub = $$.SANDBOX.stub(DeployCancelResultFormatter.prototype, 'getJson'); + await Cancel.run(['--json']); + expect(displayStub.calledOnce).to.equal(false); expect(getJsonStub.calledOnce).to.equal(true); - expect(uxLogStub.called).to.equal(false); + expect(sfCommandUxStubs.log.callCount).to.equal(0); + expect(stubUxStubs.log.callCount).to.equal(0); }); }); diff --git a/test/commands/mdapi/convert.test.ts b/test/commands/mdapi/convert.test.ts deleted file mode 100644 index acb866003..000000000 --- a/test/commands/mdapi/convert.test.ts +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Copyright (c) 2020, salesforce.com, inc. - * All rights reserved. - * Licensed under the BSD 3-Clause license. - * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ - -import * as fs from 'fs'; -import { join, resolve } from 'path'; -import * as sinon from 'sinon'; -import { assert, expect } from 'chai'; -import { fromStub, stubInterface, stubMethod } from '@salesforce/ts-sinon'; -import { Config } from '@oclif/core'; -import { UX } from '@salesforce/command'; -import { SfProject } from '@salesforce/core'; -import { ComponentSetBuilder, MetadataConverter } from '@salesforce/source-deploy-retrieve'; -import { Convert } from '../../../src/commands/force/mdapi/convert'; -import { FsError } from '../../../src/types'; - -const testConvertResult = { - converted: [ - { - fullName: 'TestProductController', - type: { - name: 'ApexClass', - }, - xml: join('myPkg', 'src', 'classes', 'TestProductController.cls-meta.xml'), - }, - { - fullName: 'TestProductController', - type: { - name: 'ApexClass', - }, - content: join('myPkg', 'src', 'classes', 'TestProductController.cls'), - }, - ], -}; - -const expectedConvertResult = [ - { - fullName: 'TestProductController', - type: 'ApexClass', - filePath: join('myPkg', 'src', 'classes', 'TestProductController.cls-meta.xml'), - state: 'Add', - }, - { - fullName: 'TestProductController', - type: 'ApexClass', - filePath: join('myPkg', 'src', 'classes', 'TestProductController.cls'), - state: 'Add', - }, -]; - -const commandName = 'mdapi:convert'; - -describe(`force:${commandName}`, () => { - const sandbox = sinon.createSandbox(); - - const oclifConfigStub = fromStub(stubInterface(sandbox)); - - const defaultDir = join('my', 'default', 'package'); - let uxLogStub: sinon.SinonStub; - let uxTableStub: sinon.SinonStub; - let uxStartSpinnerStub: sinon.SinonStub; - let uxStopSpinnerStub: sinon.SinonStub; - let fsStatStub: sinon.SinonStub; - let fsMkdirStub: sinon.SinonStub; - let convertStub: sinon.SinonStub; - let csBuilderStub: sinon.SinonStub; - - class TestConvert extends Convert { - public async runIt() { - await this.init(); - return this.run(); - } - public setProject(project: SfProject) { - this.project = project; - } - } - - const runConvertCmd = async (params: string[]) => { - // @ts-expect-error type mismatch between oclif/core v1 and v2 - const cmd = new TestConvert(params, oclifConfigStub); - stubMethod(sandbox, cmd, 'assignProject').callsFake(() => { - const SfProjectStub = fromStub( - stubInterface(sandbox, { - getDefaultPackage: () => ({ path: defaultDir }), - }) - ); - cmd.setProject(SfProjectStub); - }); - stubMethod(sandbox, cmd, 'assignOrg'); - - return cmd.runIt(); - }; - - beforeEach(() => { - fsMkdirStub = sandbox.stub(fs, 'mkdirSync'); - fsStatStub = sandbox.stub(fs, 'statSync'); - - uxLogStub = stubMethod(sandbox, UX.prototype, 'log'); - uxTableStub = stubMethod(sandbox, UX.prototype, 'table'); - uxStartSpinnerStub = stubMethod(sandbox, UX.prototype, 'startSpinner'); - uxStopSpinnerStub = stubMethod(sandbox, UX.prototype, 'stopSpinner'); - - convertStub = sandbox.stub(MetadataConverter.prototype, 'convert'); - csBuilderStub = sandbox.stub(ComponentSetBuilder, 'build'); - }); - - afterEach(() => { - sandbox.restore(); - }); - - it('should error when rootdir is not a directory', async () => { - const fileName = ' imaFile.txt '; // spaces ensure trim() is done - const trimmedFileName = fileName.trim(); - fsStatStub.returns({ isDirectory: () => false }); - try { - await runConvertCmd(['--rootdir', fileName]); - assert(false, `expected ${commandName} to error`); - } catch (e: unknown) { - expect((e as Error).name).to.equal('InvalidFlagPath'); - expect((e as Error).message).to.include(trimmedFileName); - } - }); - - it('should error when outputdir is not a directory', async () => { - const rootdir = 'rootdir'; - const resolvedRootDir = resolve(rootdir); - const fileName = ' imaFile.txt '; // spaces ensure trim() is done - const trimmedFileName = fileName.trim(); - const resolvedFilePath = resolve(trimmedFileName); - fsStatStub.withArgs(resolvedRootDir).returns({ isDirectory: () => true }); - fsStatStub.withArgs(resolvedFilePath).returns({ isDirectory: () => false }); - try { - await runConvertCmd(['--rootdir', rootdir, '--outputdir', fileName]); - assert(false, `expected ${commandName} to error`); - } catch (e: unknown) { - expect((e as Error).name).to.equal('InvalidFlagPath'); - expect((e as Error).message).to.include(trimmedFileName); - expect((e as Error).message).to.include('outputdir'); - } - }); - - it('should error when metadatapath does not exist', async () => { - const rootdir = 'rootdir'; - const resolvedRootDir = resolve(rootdir); - const fileName = ' nonexistant.txt '; // spaces ensure trim() is done - const trimmedFileName = fileName.trim(); - const resolvedFilePath = resolve(trimmedFileName); - const resolvedOutputDir = resolve(defaultDir); - fsStatStub.withArgs(defaultDir).returns({ isDirectory: () => true }); - fsStatStub.withArgs(resolvedRootDir).returns({ isDirectory: () => true }); - fsStatStub.withArgs(resolvedOutputDir).returns({ isDirectory: () => true }); - const err = new Error('') as FsError; - err.code = 'ENOENT'; - fsStatStub.withArgs(resolvedFilePath).throws(err); - try { - await runConvertCmd(['--rootdir', rootdir, '--metadatapath', fileName]); - assert(false, `expected ${commandName} to error`); - } catch (e: unknown) { - expect((e as Error).name).to.equal('InvalidFlagPath'); - expect((e as Error).message).to.include(trimmedFileName); - expect((e as Error).message).to.include('metadatapath'); - expect(fsMkdirStub.called).to.be.false; - } - }); - - it('should error when manifest does not exist', async () => { - const rootdir = 'rootdir'; - const resolvedRootDir = resolve(rootdir); - const fileName = ' nonexistant.txt '; // spaces ensure trim() is done - const trimmedFileName = fileName.trim(); - const resolvedFilePath = resolve(trimmedFileName); - const resolvedOutputDir = resolve(defaultDir); - fsStatStub.withArgs(defaultDir).returns({ isDirectory: () => true }); - fsStatStub.withArgs(resolvedRootDir).returns({ isDirectory: () => true }); - fsStatStub.withArgs(resolvedOutputDir).returns({ isDirectory: () => true }); - const err = new Error('') as FsError; - err.code = 'ENOENT'; - fsStatStub.withArgs(resolvedFilePath).throws(err); - try { - await runConvertCmd(['--rootdir', rootdir, '--manifest', fileName]); - assert(false, `expected ${commandName} to error`); - } catch (e: unknown) { - expect((e as Error).name).to.equal('InvalidFlagPath'); - expect((e as Error).message).to.include(trimmedFileName); - expect((e as Error).message).to.include('manifest'); - expect(fsMkdirStub.called).to.be.false; - } - }); - - it('should create the outputdir when it does not exist', async () => { - const rootdir = 'rootdir'; - const resolvedRootDir = resolve(rootdir); - const dirName = 'mdGoesHere'; - const resolvedOutputDir = resolve(dirName); - fsStatStub.withArgs(resolvedRootDir).returns({ isDirectory: () => true }); - const err = new Error('') as FsError; - err.code = 'ENOENT'; - fsStatStub.withArgs(resolvedOutputDir).throws(err); - csBuilderStub.resolves({ - getSourceComponents: () => ({ toArray: () => [] }), - }); - const result = await runConvertCmd(['--rootdir', 'rootdir', '--outputdir', resolvedOutputDir]); - expect(result).to.deep.equal([]); - expect(fsMkdirStub.called).to.be.true; - expect(fsMkdirStub.firstCall.args[0]).to.equal(resolvedOutputDir); - }); - - it('should return an empty array when no metadata converted (json)', async () => { - csBuilderStub.resolves({ - getSourceComponents: () => ({ toArray: () => [] }), - }); - fsStatStub.returns({ isDirectory: () => true }); - const result = await runConvertCmd(['--rootdir', 'rootdir', '--json']); - expect(result).to.deep.equal([]); - expect(convertStub.called).to.be.false; - expect(uxStartSpinnerStub.called).to.be.false; - expect(uxStopSpinnerStub.called).to.be.false; - expect(uxLogStub.called).to.be.false; - expect(uxTableStub.called).to.be.false; - }); - - it('should report when no metadata converted (display)', async () => { - csBuilderStub.resolves({ - getSourceComponents: () => ({ toArray: () => [] }), - }); - fsStatStub.returns({ isDirectory: () => true }); - const result = await runConvertCmd(['--rootdir', 'rootdir']); - expect(result).to.deep.equal([]); - expect(convertStub.called).to.be.false; - expect(uxStartSpinnerStub.called).to.be.false; - expect(uxStopSpinnerStub.called).to.be.false; - expect(uxLogStub.calledWith('No metadata found to convert')).to.be.true; - expect(uxTableStub.called).to.be.false; - }); - - it('should return an array of metadata converted (json)', async () => { - const mockCompSet = { - getSourceComponents: () => ({ toArray: () => ['firstComp', 'secondComp'] }), - }; - fsStatStub.returns({ isDirectory: () => true }); - csBuilderStub.resolves(mockCompSet); - convertStub.resolves(testConvertResult); - const result = await runConvertCmd(['--rootdir', 'rootdir', '--json']); - expect(result).to.deep.equal(expectedConvertResult); - expect(convertStub.called).to.be.true; - expect(convertStub.firstCall.args[0]).to.equal(mockCompSet); - expect(convertStub.firstCall.args[1]).to.equal('source'); - expect(uxStartSpinnerStub.called).to.be.true; - expect(uxStopSpinnerStub.called).to.be.true; - expect(uxLogStub.called).to.be.false; - expect(uxTableStub.called).to.be.false; - }); - - it('should report a table of metadata converted (display)', async () => { - const mockCompSet = { - getSourceComponents: () => ({ toArray: () => ['firstComp', 'secondComp'] }), - }; - fsStatStub.returns({ isDirectory: () => true }); - csBuilderStub.resolves(mockCompSet); - convertStub.resolves(testConvertResult); - const result = await runConvertCmd(['--rootdir', 'rootdir']); - expect(result).to.deep.equal(expectedConvertResult); - expect(convertStub.called).to.be.true; - expect(convertStub.firstCall.args[0]).to.equal(mockCompSet); - expect(convertStub.firstCall.args[1]).to.equal('source'); - expect(uxStartSpinnerStub.called).to.be.true; - expect(uxStartSpinnerStub.firstCall.args[0]).to.equal('Converting 2 metadata components'); - expect(uxStopSpinnerStub.called).to.be.true; - expect(uxLogStub.called).to.be.false; - expect(uxTableStub.called).to.be.true; - }); -}); diff --git a/test/commands/mdapi/retrieve.test.ts b/test/commands/mdapi/retrieve.test.ts index 0d25f1019..4f0ab407d 100644 --- a/test/commands/mdapi/retrieve.test.ts +++ b/test/commands/mdapi/retrieve.test.ts @@ -9,19 +9,23 @@ import * as fs from 'fs'; import * as path from 'path'; import * as sinon from 'sinon'; import { expect } from 'chai'; -import { Lifecycle, Org, SfProject } from '@salesforce/core'; +import { Lifecycle, SfProject } from '@salesforce/core'; import { fromStub, stubInterface, stubMethod } from '@salesforce/ts-sinon'; import { Config } from '@oclif/core'; -import { UX } from '@salesforce/command'; + import { ComponentSetBuilder, ComponentSetOptions, RetrieveOptions } from '@salesforce/source-deploy-retrieve'; import { Duration } from '@salesforce/kit'; +import { SfCommand, Ux } from '@salesforce/sf-plugins-core'; +import { MockTestOrgData, TestContext } from '@salesforce/core/lib/testSetup'; import { Retrieve } from '../../../src/commands/force/mdapi/retrieve'; import { Stash, StashData } from '../../../src/stash'; import { getRetrieveResult } from '../source/retrieveResponses'; describe('force:mdapi:retrieve', () => { - const sandbox = sinon.createSandbox(); - const username = 'retrieve-test@org.com'; + const $$ = new TestContext(); + const testOrg = new MockTestOrgData(); + const sandbox = $$.SANDBOX; + testOrg.username = 'retrieve-test@org.com'; const packageXml = 'package.xml'; const retrievetargetdir = path.resolve('retrieve-target-dir'); const oclifConfigStub = fromStub(stubInterface(sandbox)); @@ -35,8 +39,8 @@ describe('force:mdapi:retrieve', () => { let retrieveStub: sinon.SinonStub; let pollStub: sinon.SinonStub; let lifecycleEmitStub: sinon.SinonStub; - let stopSpinnerStub: sinon.SinonStub; let uxLogStub: sinon.SinonStub; + let sfCommandLogStub: sinon.SinonStub; let uxStyledHeaderStub: sinon.SinonStub; let uxTableStub: sinon.SinonStub; let stashSetStub: sinon.SinonStub; @@ -45,50 +49,29 @@ describe('force:mdapi:retrieve', () => { class TestRetrieve extends Retrieve { public async runIt() { - await this.init(); // oclif would normally populate this, but UT don't have it this.id ??= 'force:mdapi:retrieve'; + // required for deprecation warnings to work correctly + this.ctor.id ??= 'force:mdpi:retrive'; + await this.init(); return this.run(); } - public setOrg(org: Org) { - this.org = org; - } - public setUx(ux: UX) { - this.ux = ux; - } } const runRetrieveCmd = async (params: string[]) => { - // @ts-expect-error type mismatch between oclif/core v1 and v2 const cmd = new TestRetrieve(params, oclifConfigStub); - stubMethod(sandbox, cmd, 'assignOrg').callsFake(() => { - const orgStub = fromStub( - stubInterface(sandbox, { - getUsername: () => username, - }) - ); - cmd.setOrg(orgStub); - }); - stopSpinnerStub = stubMethod(sandbox, UX.prototype, 'stopSpinner'); - uxLogStub = stubMethod(sandbox, UX.prototype, 'log'); - uxStyledHeaderStub = stubMethod(sandbox, UX.prototype, 'styledHeader'); - uxTableStub = stubMethod(sandbox, UX.prototype, 'table'); - cmd.setUx( - fromStub( - stubInterface(sandbox, { - stopSpinner: stopSpinnerStub, - log: uxLogStub, - styledHeader: uxStyledHeaderStub, - table: uxTableStub, - }) - ) - ); + uxLogStub = stubMethod(sandbox, Ux.prototype, 'log'); + sfCommandLogStub = stubMethod(sandbox, SfCommand.prototype, 'log'); + uxStyledHeaderStub = stubMethod(sandbox, Ux.prototype, 'styledHeader'); + uxTableStub = stubMethod(sandbox, Ux.prototype, 'table'); return cmd.runIt(); }; - beforeEach(() => { + beforeEach(async () => { + await $$.stubAuths(testOrg); + await $$.stubConfig({ 'target-org': testOrg.username }); sandbox.stub(fs, 'mkdirSync'); fsStatStub = sandbox.stub(fs, 'statSync'); fsStatStub.withArgs(retrievetargetdir).returns({ isDirectory: () => true }); @@ -115,6 +98,7 @@ describe('force:mdapi:retrieve', () => { }); afterEach(() => { + $$.restore(); sandbox.restore(); }); @@ -135,7 +119,7 @@ describe('force:mdapi:retrieve', () => { // Ensure ComponentSet.retrieve() args const ensureRetrieveArgs = (overrides?: Partial) => { const defaultRetrieveArgs = { - usernameOrConnection: username, + usernameOrConnection: testOrg.username, output: path.resolve(retrievetargetdir), format: 'metadata', packageOptions: undefined, @@ -220,7 +204,7 @@ describe('force:mdapi:retrieve', () => { it('should pass along packagenames', async () => { const packagenames = 'foo,bar'; - const result = await runRetrieveCmd(['--retrievetargetdir', retrievetargetdir, '-p', packagenames, '--json']); + const result = await runRetrieveCmd(['--retrievetargetdir', retrievetargetdir, '-p', 'foo', '-p', 'bar', '--json']); expect(result).to.deep.equal(expectedDefaultResult); ensureCreateComponentSetArgs({ sourcepath: undefined, packagenames: packagenames.split(',') }); ensureRetrieveArgs({ packageOptions: packagenames.split(',') }); @@ -288,8 +272,8 @@ describe('force:mdapi:retrieve', () => { const result = await runRetrieveCmd(['-r', retrievetargetdir]); expect(result).to.deep.equal(expectedDefaultResult); expect(uxLogStub.called).to.be.true; - expect(uxLogStub.firstCall.args[0]).to.equal(`Retrieve ID: ${expectedDefaultResult.id}`); - expect(uxLogStub.secondCall.args[0]).to.contain('Wrote retrieve zip to'); + expect(sfCommandLogStub.firstCall.args[0]).to.equal(`Retrieve ID: ${expectedDefaultResult.id}`); + expect(uxLogStub.firstCall.args[0]).to.contain('Wrote retrieve zip to'); expect(uxStyledHeaderStub.called).to.be.false; expect(uxTableStub.called).to.be.false; }); @@ -298,8 +282,8 @@ describe('force:mdapi:retrieve', () => { const result = await runRetrieveCmd(['-r', retrievetargetdir, '--verbose']); expect(result).to.deep.equal(expectedDefaultResult); expect(uxLogStub.called).to.be.true; - expect(uxLogStub.firstCall.args[0]).to.equal(`Retrieve ID: ${expectedDefaultResult.id}`); - expect(uxLogStub.secondCall.args[0]).to.contain('Wrote retrieve zip to'); + expect(sfCommandLogStub.firstCall.args[0]).to.equal(`Retrieve ID: ${expectedDefaultResult.id}`); + expect(uxLogStub.firstCall.args[0]).to.contain('Wrote retrieve zip to'); expect(uxStyledHeaderStub.called).to.be.true; expect(uxTableStub.called).to.be.true; expect(uxStyledHeaderStub.firstCall.args[0]).to.contain('Components Retrieved'); @@ -321,7 +305,5 @@ describe('force:mdapi:retrieve', () => { ensureStashSet(); expect(fsStatStub.called).to.be.true; expect(pollStub.called, 'should not poll for status with --wait 0').to.be.false; - expect(stopSpinnerStub.called).to.be.true; - expect(stopSpinnerStub.firstCall.args[0]).to.equal('queued'); }); }); diff --git a/test/commands/mdapi/retrieveReport.test.ts b/test/commands/mdapi/retrieveReport.test.ts index 6126c021d..0544ddcf6 100644 --- a/test/commands/mdapi/retrieveReport.test.ts +++ b/test/commands/mdapi/retrieveReport.test.ts @@ -9,18 +9,21 @@ import * as fs from 'fs'; import * as path from 'path'; import * as sinon from 'sinon'; import { expect } from 'chai'; -import { Org } from '@salesforce/core'; import { fromStub, stubInterface, stubMethod } from '@salesforce/ts-sinon'; import { Config } from '@oclif/core'; -import { UX } from '@salesforce/command'; + import { MetadataApiRetrieve } from '@salesforce/source-deploy-retrieve'; +import { SfCommand, Ux } from '@salesforce/sf-plugins-core'; +import { MockTestOrgData, TestContext } from '@salesforce/core/lib/testSetup'; import { Report } from '../../../src/commands/force/mdapi/retrieve/report'; import { Stash } from '../../../src/stash'; import { getRetrieveResult, getRetrieveResponse } from '../source/retrieveResponses'; describe('force:mdapi:retrieve:report', () => { - const sandbox = sinon.createSandbox(); - const username = 'report-test@org.com'; + const $$ = new TestContext(); + const testOrg = new MockTestOrgData(); + const sandbox = $$.SANDBOX; + testOrg.username = 'report-test@org.com'; const retrievetargetdir = path.resolve('retrieve-target-dir'); const oclifConfigStub = fromStub(stubInterface(sandbox)); const retrieveResult = getRetrieveResult('success'); @@ -37,8 +40,8 @@ describe('force:mdapi:retrieve:report', () => { let checkStatusStub: sinon.SinonStub; let postStub: sinon.SinonStub; let pollStatusStub: sinon.SinonStub; - let stopSpinnerStub: sinon.SinonStub; let uxLogStub: sinon.SinonStub; + let sfCommandLogStub: sinon.SinonStub; let uxStyledHeaderStub: sinon.SinonStub; let uxTableStub: sinon.SinonStub; let stashSetStub: sinon.SinonStub; @@ -47,50 +50,30 @@ describe('force:mdapi:retrieve:report', () => { class TestReport extends Report { public async runIt() { - await this.init(); - // set a Command.id for use with Stash + // oclif would normally populate this, but UT don't have it this.id ??= 'force:mdapi:retrieve:report'; + // required for deprecation warnings to work correctly + this.ctor.id ??= 'force:mdapi:retrieve:report'; + await this.init(); return this.run(); } - public setOrg(org: Org) { - this.org = org; - } - public setUx(ux: UX) { - this.ux = ux; - } } const runReportCmd = async (params: string[]) => { - // @ts-expect-error type mismatch between oclif/core v1 and v2 const cmd = new TestReport(params, oclifConfigStub); - stubMethod(sandbox, cmd, 'assignOrg').callsFake(() => { - const orgStub = fromStub( - stubInterface(sandbox, { - getUsername: () => username, - }) - ); - cmd.setOrg(orgStub); - }); - stopSpinnerStub = stubMethod(sandbox, UX.prototype, 'stopSpinner'); - uxLogStub = stubMethod(sandbox, UX.prototype, 'log'); - uxStyledHeaderStub = stubMethod(sandbox, UX.prototype, 'styledHeader'); - uxTableStub = stubMethod(sandbox, UX.prototype, 'table'); - cmd.setUx( - fromStub( - stubInterface(sandbox, { - stopSpinner: stopSpinnerStub, - log: uxLogStub, - styledHeader: uxStyledHeaderStub, - table: uxTableStub, - }) - ) - ); + uxLogStub = stubMethod(sandbox, Ux.prototype, 'log'); + sfCommandLogStub = stubMethod(sandbox, SfCommand.prototype, 'log'); + uxStyledHeaderStub = stubMethod(sandbox, Ux.prototype, 'styledHeader'); + uxTableStub = stubMethod(sandbox, SfCommand.prototype, 'table'); return cmd.runIt(); }; - beforeEach(() => { + beforeEach(async () => { + await $$.stubAuths(testOrg); + await $$.stubConfig({ 'target-org': testOrg.username }); + sandbox.stub(fs, 'mkdirSync'); fsStatStub = sandbox.stub(fs, 'statSync'); fsStatStub.returns({ isDirectory: () => true }); @@ -102,6 +85,7 @@ describe('force:mdapi:retrieve:report', () => { }); afterEach(() => { + $$.restore(); sandbox.restore(); }); @@ -187,9 +171,7 @@ describe('force:mdapi:retrieve:report', () => { expect(uxLogStub.called).to.be.true; expect(uxLogStub.firstCall.args[0]).to.equal(`Wrote retrieve zip to ${defaultZipFilePath}`); expect(uxStyledHeaderStub.called).to.be.true; - expect(uxTableStub.called).to.be.true; expect(uxStyledHeaderStub.firstCall.args[0]).to.contain('Components Retrieved'); - expect(uxTableStub.firstCall.args[0]).to.deep.equal(expectedDefaultResult.fileProperties); }); it('should return an async result with --wait 0', async () => { @@ -209,7 +191,7 @@ describe('force:mdapi:retrieve:report', () => { expect(postStub.called).to.be.false; expect(fsStatStub.called).to.be.true; expect(pollStatusStub.called, 'should not poll for status with --wait 0').to.be.false; - expect(stopSpinnerStub.called).to.be.true; + expect(sfCommandLogStub.called).to.be.true; }); it('should return a normal result with --wait 0', async () => { @@ -223,6 +205,5 @@ describe('force:mdapi:retrieve:report', () => { expect(postStub.called).to.be.true; expect(fsStatStub.called).to.be.true; expect(pollStatusStub.called, 'should not poll for status with --wait 0').to.be.false; - expect(stopSpinnerStub.called).to.be.true; }); }); diff --git a/test/commands/source/cancel.test.ts b/test/commands/source/cancel.test.ts index 6a72decfc..da47eb279 100644 --- a/test/commands/source/cancel.test.ts +++ b/test/commands/source/cancel.test.ts @@ -9,10 +9,11 @@ import { join } from 'path'; import * as sinon from 'sinon'; import { expect } from 'chai'; import { fromStub, spyMethod, stubInterface, stubMethod } from '@salesforce/ts-sinon'; -import { ConfigFile, Org, SfProject } from '@salesforce/core'; +import { ConfigFile, SfProject } from '@salesforce/core'; import { Config } from '@oclif/core'; -import { UX } from '@salesforce/command'; import { MetadataApiDeploy } from '@salesforce/source-deploy-retrieve'; +import { MockTestOrgData, TestContext } from '@salesforce/core/lib/testSetup'; +import { Ux } from '@salesforce/sf-plugins-core'; import { Cancel } from '../../../src/commands/force/source/deploy/cancel'; import { DeployCancelResultFormatter } from '../../../src/formatters/deployCancelResultFormatter'; import { DeployCommandResult } from '../../../src/formatters/deployResultFormatter'; @@ -20,8 +21,10 @@ import { Stash } from '../../../src/stash'; import { getDeployResult } from './deployResponses'; describe('force:source:deploy:cancel', () => { - const sandbox = sinon.createSandbox(); - const username = 'cancel-test@org.com'; + const $$ = new TestContext(); + const testOrg = new MockTestOrgData(); + const sandbox = $$.SANDBOX; + testOrg.username = 'cancel-test@org.com'; const defaultDir = join('my', 'default', 'package'); const stashedDeployId = 'IMA000STASHID'; @@ -33,23 +36,19 @@ describe('force:source:deploy:cancel', () => { // Stubs const oclifConfigStub = fromStub(stubInterface(sandbox)); - let checkDeployStatusStub: sinon.SinonStub; + let pollStub: sinon.SinonStub; let cancelStub: sinon.SinonStub; let uxLogStub: sinon.SinonStub; class TestCancel extends Cancel { public async runIt() { - await this.init(); // oclif would normally populate this, but UT don't have it this.id ??= 'force:source:deploy:cancel'; + // required for deprecation warnings to work correctly + this.ctor.id ??= 'force:source:deploy:cancel'; + await this.init(); return this.run(); } - public setOrg(org: Org) { - this.org = org; - } - public setProject(project: SfProject) { - this.project = project; - } // eslint-disable-next-line class-methods-use-this public createDeploy(): MetadataApiDeploy { @@ -59,38 +58,26 @@ describe('force:source:deploy:cancel', () => { } const runCancelCmd = async (params: string[]) => { - // @ts-expect-error type mismatch between oclif/core v1 and v2 const cmd = new TestCancel(params, oclifConfigStub); - stubMethod(sandbox, cmd, 'assignProject').callsFake(() => { - const SfProjectStub = fromStub( - stubInterface(sandbox, { - getUniquePackageDirectories: () => [{ fullPath: defaultDir }], - }) - ); - cmd.setProject(SfProjectStub); - }); - stubMethod(sandbox, cmd, 'assignOrg').callsFake(() => { - const orgStub = fromStub( - stubInterface(sandbox, { - getUsername: () => username, - getConnection: () => ({ - metadata: { - checkDeployStatus: checkDeployStatusStub, - }, - }), - }) - ); - cmd.setOrg(orgStub); - }); - uxLogStub = stubMethod(sandbox, UX.prototype, 'log'); - stubMethod(sandbox, ConfigFile.prototype, 'readSync'); + cmd.project = SfProject.getInstance(); + sandbox.stub(cmd.project, 'getUniquePackageDirectories').returns([{ fullPath: defaultDir, path: '', name: '' }]); + + uxLogStub = stubMethod(sandbox, Ux.prototype, 'log'); stubMethod(sandbox, ConfigFile.prototype, 'get').returns({ jobid: stashedDeployId }); - checkDeployStatusStub = sandbox.stub().resolves(expectedResults); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + pollStub = sandbox.stub(cmd, 'poll').resolves({ response: expectedResults }); return cmd.runIt(); }; + beforeEach(async () => { + await $$.stubAuths(testOrg); + await $$.stubConfig({ 'target-org': testOrg.username }); + }); + afterEach(() => { + $$.restore(); sandbox.restore(); }); @@ -99,14 +86,13 @@ describe('force:source:deploy:cancel', () => { const result = await runCancelCmd(['--json']); expect(result).to.deep.equal(expectedResults); expect(getStashSpy.called).to.equal(true); - expect(checkDeployStatusStub.firstCall.args[0]).to.equal(stashedDeployId); + expect(pollStub.firstCall.args[1]).to.equal(stashedDeployId); expect(cancelStub.calledOnce).to.equal(true); }); it('should display stashed deploy ID', async () => { const result = await runCancelCmd([]); expect(result).to.deep.equal(expectedResults); - expect(uxLogStub.firstCall.args[0]).to.contain(stashedDeployId); }); it('should use the jobid flag', async () => { @@ -114,7 +100,7 @@ describe('force:source:deploy:cancel', () => { const result = await runCancelCmd(['--json', '--jobid', expectedResults.id]); expect(result).to.deep.equal(expectedResults); expect(getStashSpy.called).to.equal(false); - expect(checkDeployStatusStub.firstCall.args[0]).to.equal(expectedResults.id); + expect(pollStub.firstCall.args[1]).to.equal(expectedResults.id); expect(cancelStub.calledOnce).to.equal(true); }); @@ -130,7 +116,6 @@ describe('force:source:deploy:cancel', () => { await runCancelCmd([]); expect(displayStub.calledOnce).to.equal(true); expect(getJsonStub.calledOnce).to.equal(true); - expect(uxLogStub.called).to.equal(true); }); it('should NOT display output with --json', async () => { diff --git a/test/commands/source/convert.test.ts b/test/commands/source/convert.test.ts deleted file mode 100644 index 38dc30da2..000000000 --- a/test/commands/source/convert.test.ts +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (c) 2020, salesforce.com, inc. - * All rights reserved. - * Licensed under the BSD 3-Clause license. - * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ - -import { join, resolve } from 'path'; -import { ComponentSetBuilder, ComponentSetOptions, MetadataConverter } from '@salesforce/source-deploy-retrieve'; -import * as sinon from 'sinon'; -import { expect } from 'chai'; -import { fromStub, stubInterface, stubMethod } from '@salesforce/ts-sinon'; -import { Config } from '@oclif/core'; -import { SfProject } from '@salesforce/core'; -import { Convert } from '../../../src/commands/force/source/convert'; - -describe('force:source:convert', () => { - const sandbox = sinon.createSandbox(); - - let buildComponentSetStub: sinon.SinonStub; - - const defaultDir = join('my', 'default', 'package'); - const myApp = join('new', 'package', 'directory'); - const packageXml = 'package.xml'; - const oclifConfigStub = fromStub(stubInterface(sandbox)); - let resolveProjectConfigStub: sinon.SinonStub; - - class TestConvert extends Convert { - public async runIt() { - await this.init(); - return this.run(); - } - public setProject(project: SfProject) { - this.project = project; - } - } - - const runConvertCmd = async (params: string[]) => { - // @ts-expect-error type mismatch between oclif/core v1 and v2 - const cmd = new TestConvert(params, oclifConfigStub); - stubMethod(sandbox, cmd, 'assignProject').callsFake(() => { - const SfProjectStub = fromStub( - stubInterface(sandbox, { - getDefaultPackage: () => ({ path: defaultDir }), - getUniquePackageDirectories: () => [{ fullPath: defaultDir }], - resolveProjectConfig: resolveProjectConfigStub, - }) - ); - cmd.setProject(SfProjectStub); - }); - stubMethod(sandbox, cmd, 'assignOrg'); - return cmd.runIt(); - }; - - // Ensure correct ComponentSetBuilder options - const ensureCreateComponentSetArgs = (overrides?: Partial) => { - const defaultArgs = { - sourcepath: [], - manifest: undefined, - metadata: undefined, - sourceapiversion: undefined, - }; - const expectedArgs = { ...defaultArgs, ...overrides }; - - expect(buildComponentSetStub.calledOnce).to.equal(true); - expect(buildComponentSetStub.firstCall.args[0]).to.deep.equal(expectedArgs); - }; - - beforeEach(() => { - resolveProjectConfigStub = sandbox.stub(); - sandbox.stub(MetadataConverter.prototype, 'convert').resolves({ packagePath: 'temp' }); - buildComponentSetStub = stubMethod(sandbox, ComponentSetBuilder, 'build').resolves({ - deploy: sinon.stub(), - getPackageXml: () => packageXml, - }); - }); - - afterEach(() => { - sandbox.restore(); - }); - - it('should pass along sourcepath', async () => { - const sourcepath = 'somepath'; - const result = await runConvertCmd(['--sourcepath', sourcepath, '--json']); - expect(result).to.deep.equal({ location: resolve('temp') }); - ensureCreateComponentSetArgs({ sourcepath: [sourcepath] }); - }); - - it('should pass along sourceApiVersion', async () => { - const sourceApiVersion = '50.0'; - resolveProjectConfigStub.resolves({ sourceApiVersion }); - const result = await runConvertCmd(['--json']); - expect(result).to.deep.equal({ location: resolve('temp') }); - ensureCreateComponentSetArgs({ - sourcepath: [defaultDir], - sourceapiversion: sourceApiVersion, - }); - }); - - it('should call default package dir if no args', async () => { - const result = await runConvertCmd(['--json']); - expect(result).to.deep.equal({ location: resolve('temp') }); - ensureCreateComponentSetArgs({ sourcepath: [defaultDir] }); - }); - - it('should call with metadata', async () => { - const metadata = 'ApexClass'; - const result = await runConvertCmd(['--metadata', metadata, '--json']); - expect(result).to.deep.equal({ location: resolve('temp') }); - ensureCreateComponentSetArgs({ - metadata: { - metadataEntries: [metadata], - directoryPaths: [defaultDir], - }, - }); - }); - - it('should call with package.xml', async () => { - const result = await runConvertCmd(['--manifest', packageXml, '--json']); - expect(result).to.deep.equal({ location: resolve('temp') }); - ensureCreateComponentSetArgs({ - manifest: { - manifestPath: packageXml, - directoryPaths: [defaultDir], - }, - }); - }); - - it('should call root dir with rootdir flag', async () => { - const result = await runConvertCmd(['--rootdir', myApp, '--json']); - expect(result).to.deep.equal({ location: resolve('temp') }); - ensureCreateComponentSetArgs({ sourcepath: [myApp] }); - }); - - describe('rootdir should be overwritten by any other flag', () => { - it('sourcepath', async () => { - const result = await runConvertCmd(['--rootdir', myApp, '--sourcepath', defaultDir, '--json']); - expect(result).to.deep.equal({ location: resolve('temp') }); - ensureCreateComponentSetArgs({ sourcepath: [defaultDir] }); - }); - - it('metadata', async () => { - const metadata = 'ApexClass,CustomObject'; - const result = await runConvertCmd(['--rootdir', myApp, '--metadata', metadata, '--json']); - expect(result).to.deep.equal({ location: resolve('temp') }); - ensureCreateComponentSetArgs({ - metadata: { - metadataEntries: metadata.split(','), - directoryPaths: [defaultDir], - }, - }); - }); - - it('package', async () => { - const result = await runConvertCmd(['--rootdir', myApp, '--manifest', packageXml, '--json']); - expect(result).to.deep.equal({ location: resolve('temp') }); - ensureCreateComponentSetArgs({ - manifest: { - manifestPath: packageXml, - directoryPaths: [defaultDir], - }, - }); - }); - }); -}); diff --git a/test/commands/source/delete.test.ts b/test/commands/source/delete.test.ts deleted file mode 100644 index 6bdaf4b96..000000000 --- a/test/commands/source/delete.test.ts +++ /dev/null @@ -1,247 +0,0 @@ -/* - * Copyright (c) 2020, salesforce.com, inc. - * All rights reserved. - * Licensed under the BSD 3-Clause license. - * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ - -import * as fs from 'fs'; -import { join } from 'path'; -import * as sinon from 'sinon'; -import { expect } from 'chai'; -import { - ComponentSet, - ComponentSetBuilder, - ComponentSetOptions, - SourceComponent, -} from '@salesforce/source-deploy-retrieve'; -import { Lifecycle, Org, SfProject } from '@salesforce/core'; -import { fromStub, stubInterface, stubMethod } from '@salesforce/ts-sinon'; -import { Config } from '@oclif/core'; -import { UX } from '@salesforce/command'; -import { Delete } from '../../../src/commands/force/source/delete'; -import { exampleDeleteResponse, exampleSourceComponent } from './testConsts'; - -const fsPromises = fs.promises; - -describe('force:source:delete', () => { - const sandbox = sinon.createSandbox(); - const username = 'delete-test@org.com'; - const defaultPackagePath = 'defaultPackagePath'; - let confirm = true; - - const oclifConfigStub = fromStub(stubInterface(sandbox)); - - // Stubs - let buildComponentSetStub: sinon.SinonStub; - let lifecycleEmitStub: sinon.SinonStub; - let resolveProjectConfigStub: sinon.SinonStub; - let fsUnlink: sinon.SinonStub; - let moveToStashStub: sinon.SinonStub; - let restoreFromStashStub: sinon.SinonStub; - let deleteStashStub: sinon.SinonStub; - - class TestDelete extends Delete { - public async runIt() { - await this.init(); - // oclif would normally populate this, but UT don't have it - this.id ??= 'force:source:delete'; - return this.run(); - } - public setOrg(org: Org) { - this.org = org; - } - public setProject(project: SfProject) { - this.project = project; - } - } - - const runDeleteCmd = async (params: string[]) => { - // @ts-expect-error type mismatch between oclif/core v1 and v2 - const cmd = new TestDelete(params, oclifConfigStub); - stubMethod(sandbox, SfProject, 'resolveProjectPath').resolves(join('path', 'to', 'package')); - stubMethod(sandbox, cmd, 'assignProject').callsFake(() => { - const SfProjectStub = fromStub( - stubInterface(sandbox, { - getDefaultPackage: () => ({ fullPath: defaultPackagePath }), - getUniquePackageDirectories: () => [{ fullPath: defaultPackagePath }], - resolveProjectConfig: resolveProjectConfigStub, - }) - ); - cmd.setProject(SfProjectStub); - }); - stubMethod(sandbox, cmd, 'assignOrg').callsFake(() => { - const orgStub = fromStub( - stubInterface(sandbox, { - getUsername: () => username, - }) - ); - cmd.setOrg(orgStub); - }); - stubMethod(sandbox, UX.prototype, 'log'); - stubMethod(sandbox, ComponentSet.prototype, 'deploy').resolves({ - id: '123', - pollStatus: () => exampleDeleteResponse, - }); - stubMethod(sandbox, cmd, 'handlePrompt').returns(confirm); - fsUnlink = stubMethod(sandbox, fsPromises, 'unlink').resolves(true); - moveToStashStub = stubMethod(sandbox, cmd, 'moveFileToStash'); - restoreFromStashStub = stubMethod(sandbox, cmd, 'restoreFileFromStash'); - deleteStashStub = stubMethod(sandbox, cmd, 'deleteStash'); - - return cmd.runIt(); - }; - - beforeEach(() => { - resolveProjectConfigStub = sandbox.stub(); - buildComponentSetStub = stubMethod(sandbox, ComponentSetBuilder, 'build').resolves({ - toArray: () => [new SourceComponent(exampleSourceComponent)], - }); - lifecycleEmitStub = sandbox.stub(Lifecycle.prototype, 'emit'); - }); - - afterEach(() => { - sandbox.restore(); - }); - - // Ensure SourceCommand.createComponentSet() args - const ensureCreateComponentSetArgs = (overrides?: Partial) => { - const defaultArgs = { - sourcepath: undefined, - metadata: undefined, - apiversion: undefined, - sourceapiversion: undefined, - }; - const expectedArgs = { ...defaultArgs, ...overrides }; - - expect(buildComponentSetStub.calledOnce).to.equal(true); - expect(buildComponentSetStub.firstCall.args[0]).to.deep.equal(expectedArgs); - }; - - // Ensure Lifecycle hooks are called properly - const ensureHookArgs = () => { - const failureMsg = 'Lifecycle.emit() should be called for predeploy and postdeploy'; - expect(lifecycleEmitStub.calledTwice, failureMsg).to.equal(true); - expect(lifecycleEmitStub.firstCall.args[0]).to.equal('predeploy'); - expect(lifecycleEmitStub.secondCall.args[0]).to.equal('postdeploy'); - }; - - it('should pass along sourcepath', async () => { - const sourcepath = ['somepath']; - stubMethod(sandbox, fs, 'statSync').returns({ isDirectory: () => false }); - await runDeleteCmd(['--sourcepath', sourcepath[0], '--json', '-r']); - ensureCreateComponentSetArgs({ sourcepath }); - ensureHookArgs(); - // deleting the component and its xml - expect(fsUnlink.callCount).to.equal(2); - }); - - it('should pass along metadata', async () => { - const metadata = ['ApexClass:MyClass']; - stubMethod(sandbox, fs, 'statSync').returns({ isDirectory: () => false }); - await runDeleteCmd(['--metadata', metadata[0], '--json', '-r']); - ensureCreateComponentSetArgs({ - metadata: { - metadataEntries: metadata, - directoryPaths: [defaultPackagePath], - }, - }); - ensureHookArgs(); - }); - - it('should pass along apiversion', async () => { - const metadata = ['ApexClass:MyClass']; - stubMethod(sandbox, fs, 'statSync').returns({ isDirectory: () => false }); - - await runDeleteCmd(['--metadata', metadata[0], '--json', '-r', '--apiversion', '52.0']); - ensureCreateComponentSetArgs({ - metadata: { - metadataEntries: metadata, - directoryPaths: [defaultPackagePath], - }, - apiversion: '52.0', - }); - ensureHookArgs(); - }); - - it('should pass along sourceapiversion', async () => { - const sourceApiVersion = '50.0'; - const metadata = ['ApexClass:MyClass']; - - resolveProjectConfigStub.resolves({ sourceApiVersion }); - stubMethod(sandbox, fs, 'statSync').returns({ isDirectory: () => false }); - - await runDeleteCmd(['--metadata', metadata[0], '--json', '-r']); - ensureCreateComponentSetArgs({ - sourceapiversion: sourceApiVersion, - metadata: { - metadataEntries: metadata, - directoryPaths: [defaultPackagePath], - }, - }); - ensureHookArgs(); - }); - - const stubLWC = (): string => { - buildComponentSetStub.restore(); - const comp = new SourceComponent({ - name: 'mylwc', - type: { - id: 'lightningcomponentbundle', - name: 'LightningComponentBundle', - strategies: { - adapter: 'bundle', - }, - }, - }); - stubMethod(sandbox, ComponentSetBuilder, 'build').resolves({ - toArray: () => [comp], - }); - const helperPath = join('dreamhouse-lwc', 'force-app', 'main', 'default', 'lwc', 'mylwc', 'helper.js'); - - stubMethod(sandbox, comp, 'walkContent').returns([ - join('dreamhouse-lwc', 'force-app', 'main', 'default', 'lwc', 'mylwc', 'mylwc.js'), - helperPath, - ]); - - stubMethod(sandbox, fs, 'statSync').returns({ isDirectory: () => false }); - return helperPath; - }; - - it('will use stash and delete stash upon successful delete', async () => { - const sourcepath = stubLWC(); - const result = await runDeleteCmd(['--sourcepath', sourcepath, '--json', '-r']); - // successful delete will move files to the stash, delete the stash, and won't restore from it - expect(moveToStashStub.calledOnce).to.be.true; - expect(deleteStashStub.calledOnce).to.be.true; - expect(restoreFromStashStub.called).to.be.false; - expect(result.deletedSource).to.deep.equal([ - { - filePath: sourcepath, - fullName: join('mylwc', 'helper.js'), - state: 'Deleted', - type: 'LightningComponentBundle', - }, - ]); - }); - - it('restores from stash during aborted delete', async () => { - const sourcepath = stubLWC(); - - confirm = false; - const result = await runDeleteCmd(['--sourcepath', sourcepath, '--json', '-r']); - // aborted delete will move files to the stash, and restore from it - expect(moveToStashStub.calledOnce).to.be.true; - expect(deleteStashStub.called).to.be.false; - expect(restoreFromStashStub.calledOnce).to.be.true; - // ensure JSON output from aborted delete - expect(result).to.deep.equal({ - result: { - deletedSource: [], - deletes: [{}], - outboundFiles: [], - }, - status: 0, - }); - }); -}); diff --git a/test/commands/source/deploy.test.ts b/test/commands/source/deploy.test.ts index ebb58181a..2f8e36849 100644 --- a/test/commands/source/deploy.test.ts +++ b/test/commands/source/deploy.test.ts @@ -10,9 +10,10 @@ import * as sinon from 'sinon'; import { expect } from 'chai'; import { ComponentSetBuilder, ComponentSetOptions, MetadataApiDeployOptions } from '@salesforce/source-deploy-retrieve'; import { fromStub, stubInterface, stubMethod } from '@salesforce/ts-sinon'; -import { ConfigAggregator, Lifecycle, Messages, Org, SfProject } from '@salesforce/core'; -import { UX } from '@salesforce/command'; +import { ConfigAggregator, Lifecycle, Messages, SfProject } from '@salesforce/core'; import { Config } from '@oclif/core'; +import { SfCommand } from '@salesforce/sf-plugins-core'; +import { MockTestOrgData, TestContext } from '@salesforce/core/lib/testSetup'; import { Deploy } from '../../../src/commands/force/source/deploy'; import { DeployCommandResult, DeployResultFormatter } from '../../../src/formatters/deployResultFormatter'; import { @@ -27,8 +28,10 @@ import { exampleSourceComponent } from './testConsts'; Messages.importMessagesDirectory(__dirname); describe('force:source:deploy', () => { - const sandbox = sinon.createSandbox(); - const username = 'deploy-test@org.com'; + const $$ = new TestContext(); + const testOrg = new MockTestOrgData(); + const sandbox = $$.SANDBOX; + testOrg.username = 'deploy-test@org.com'; const packageXml = 'package.xml'; const defaultDir = join('my', 'default', 'package'); const oclifConfigStub = fromStub(stubInterface(sandbox)); @@ -70,49 +73,36 @@ describe('force:source:deploy', () => { class TestDeploy extends Deploy { public async runIt() { - await this.init(); // oclif would normally populate this, but UT don't have it this.id ??= 'force:source:deploy'; + // required for deprecation warnings to work correctly + this.ctor.id ??= 'force:source:deploy'; + await this.init(); return this.run(); } - public setOrg(org: Org) { - this.org = org; - } - public setProject(project: SfProject) { - this.project = project; - } } - const runDeployCmd = async (params: string[]) => { - // @ts-expect-error type mismatch between oclif/core v1 and v2 + const runDeployCmd = async (params: string[], options?: { sourceApiVersion?: string }) => { const cmd = new TestDeploy(params, oclifConfigStub); - stubMethod(sandbox, cmd, 'assignProject').callsFake(() => { - const SfProjectStub = fromStub( - stubInterface(sandbox, { - getUniquePackageDirectories: () => [{ fullPath: defaultDir }], - resolveProjectConfig: resolveProjectConfigStub, - }) - ); - cmd.setProject(SfProjectStub); - }); - stubMethod(sandbox, cmd, 'assignOrg').callsFake(() => { - const orgStub = fromStub( - stubInterface(sandbox, { - getUsername: () => username, - }) - ); - cmd.setOrg(orgStub); - }); + cmd.project = SfProject.getInstance(); + sandbox.stub(cmd.project, 'getDefaultPackage').returns({ name: '', path: '', fullPath: defaultDir }); + sandbox.stub(cmd.project, 'getUniquePackageDirectories').returns([{ fullPath: defaultDir, path: '', name: '' }]); + sandbox.stub(cmd.project, 'getPackageDirectories').returns([{ fullPath: defaultDir, path: '', name: '' }]); + sandbox.stub(cmd.project, 'resolveProjectConfig').resolves({ sourceApiVersion: options?.sourceApiVersion }); + initProgressBarStub = stubMethod(sandbox, cmd, 'initProgressBar'); progressBarStub = stubMethod(sandbox, DeployProgressBarFormatter.prototype, 'progress'); progressStatusStub = stubMethod(sandbox, DeployProgressStatusFormatter.prototype, 'progress'); - stubMethod(sandbox, UX.prototype, 'log'); + stubMethod(sandbox, SfCommand.prototype, 'log'); stubMethod(sandbox, Deploy.prototype, 'deployRecentValidation').resolves({}); formatterDisplayStub = stubMethod(sandbox, DeployResultFormatter.prototype, 'display'); return cmd.runIt(); }; - beforeEach(() => { + beforeEach(async () => { + await $$.stubAuths(testOrg); + await $$.stubConfig({ 'target-org': testOrg.username }); + resolveProjectConfigStub = sandbox.stub(); pollStub = sandbox.stub().resolves(deployResult); deployStub = sandbox.stub().resolves({ @@ -128,6 +118,7 @@ describe('force:source:deploy', () => { }); afterEach(() => { + $$.restore(); sandbox.restore(); }); @@ -149,7 +140,7 @@ describe('force:source:deploy', () => { // Ensure ComponentSet.deploy() args const ensureDeployArgs = (overrides?: Partial) => { const expectedDeployArgs = { - usernameOrConnection: username, + usernameOrConnection: testOrg.username, apiOptions: { ignoreWarnings: false, rollbackOnError: true, @@ -245,7 +236,7 @@ describe('force:source:deploy', () => { const sourceApiVersion = '50.0'; resolveProjectConfigStub.resolves({ sourceApiVersion }); const manifest = 'package.xml'; - const result = await runDeployCmd(['--manifest', manifest, '--json']); + const result = await runDeployCmd(['--manifest', manifest, '--json'], { sourceApiVersion }); expect(result).to.deep.equal(expectedResults); ensureCreateComponentSetArgs({ sourceapiversion: sourceApiVersion, @@ -384,7 +375,6 @@ describe('force:source:deploy', () => { it('should use SOAP by default', async () => { delete process.env.SFDX_REST_DEPLOY; const sourcepath = ['somepath']; - // @ts-expect-error type mismatch between oclif/core v1 and v2 const cmd = new TestDeploy(['--sourcepath', sourcepath[0]], oclifConfigStub); // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore private method @@ -395,7 +385,6 @@ describe('force:source:deploy', () => { try { process.env.SFDX_REST_DEPLOY = 'false'; const sourcepath = ['somepath']; - // @ts-expect-error type mismatch between oclif/core v1 and v2 const cmd = new TestDeploy(['--sourcepath', sourcepath[0]], oclifConfigStub); // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore private method @@ -409,7 +398,6 @@ describe('force:source:deploy', () => { try { process.env.SFDX_REST_DEPLOY = 'true'; const sourcepath = ['somepath']; - // @ts-expect-error type mismatch between oclif/core v1 and v2 const cmd = new TestDeploy(['--sourcepath', sourcepath[0]], oclifConfigStub); // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore private method @@ -423,7 +411,6 @@ describe('force:source:deploy', () => { try { process.env.SFDX_REST_DEPLOY = 'true'; const sourcepath = ['somepath']; - // @ts-expect-error type mismatch between oclif/core v1 and v2 const cmd = new TestDeploy(['--sourcepath', sourcepath[0], '--soapdeploy'], oclifConfigStub); // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore private method @@ -435,7 +422,6 @@ describe('force:source:deploy', () => { it('should use SOAP from flag', async () => { const sourcepath = ['somepath']; - // @ts-expect-error type mismatch between oclif/core v1 and v2 const cmd = new TestDeploy(['--sourcepath', sourcepath[0], '--soapdeploy'], oclifConfigStub); // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore private method @@ -446,7 +432,6 @@ describe('force:source:deploy', () => { stubMethod(sandbox, ConfigAggregator, 'create').resolves(ConfigAggregator.prototype); stubMethod(sandbox, ConfigAggregator.prototype, 'getPropertyValue').returns('false'); const sourcepath = ['somepath']; - // @ts-expect-error type mismatch between oclif/core v1 and v2 const cmd = new TestDeploy(['--sourcepath', sourcepath[0], '--soapdeploy'], oclifConfigStub); // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore private method @@ -459,7 +444,6 @@ describe('force:source:deploy', () => { stubMethod(sandbox, ConfigAggregator, 'create').resolves(ConfigAggregator.prototype); stubMethod(sandbox, ConfigAggregator.prototype, 'getPropertyValue').returns('false'); const sourcepath = ['somepath']; - // @ts-expect-error type mismatch between oclif/core v1 and v2 const cmd = new TestDeploy(['--sourcepath', sourcepath[0], '--soapdeploy'], oclifConfigStub); // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore private method diff --git a/test/commands/source/deployCommand.test.ts b/test/commands/source/deployCommand.test.ts index dfeb81995..423eeee58 100644 --- a/test/commands/source/deployCommand.test.ts +++ b/test/commands/source/deployCommand.test.ts @@ -5,24 +5,8 @@ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ import * as path from 'path'; -import { SfError } from '@salesforce/core'; -import { assert, expect } from 'chai'; -import { DeployCommand, getCoverageFormattersOptions } from '../../../src/deployCommand'; - -describe('test static method for valid deploy IDs', () => { - it('valid deployId returns true', () => { - expect(DeployCommand.isValidDeployId('0Af000000012345')).to.be.true; - }); - - it('valid deployId throws', () => { - try { - DeployCommand.isValidDeployId('00D000000012345'); - assert.fail('should have thrown'); - } catch (e) { - expect((e as SfError).name).to.equal('invalidDeployId'); - } - }); -}); +import { expect } from 'chai'; +import { getCoverageFormattersOptions } from '../../../src/deployCommand'; describe('coverage functions', () => { describe('getCoverageFormattersOptions', () => { diff --git a/test/commands/source/progressBarFormatter.test.ts b/test/commands/source/progressBarFormatter.test.ts index 688b5dcae..52aa4f37c 100644 --- a/test/commands/source/progressBarFormatter.test.ts +++ b/test/commands/source/progressBarFormatter.test.ts @@ -5,20 +5,19 @@ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ import { EventEmitter } from 'events'; -import { Logger } from '@salesforce/core'; -import { UX } from '@salesforce/command'; import { MetadataApiDeploy } from '@salesforce/source-deploy-retrieve'; import { spyMethod } from '@salesforce/ts-sinon'; import { assert, expect } from 'chai'; -import * as sinon from 'sinon'; +import { Ux } from '@salesforce/sf-plugins-core'; +import { TestContext } from '@salesforce/core/lib/testSetup'; import { DeployProgressBarFormatter } from '../../../src/formatters/deployProgressBarFormatter'; import { ProgressBar } from '../../../src/types'; describe('Progress Bar Events', () => { - const sandbox = sinon.createSandbox(); + const sandbox = new TestContext().SANDBOX; const username = 'me@my.org'; const deploy = new MetadataApiDeploy({ usernameOrConnection: username, id: '123' }); - const progressBarFormatter = new DeployProgressBarFormatter(new Logger('testing'), UX.prototype); + const progressBarFormatter = new DeployProgressBarFormatter(Ux.prototype); const initSpy = spyMethod(sandbox, progressBarFormatter, 'initProgressBar'); let bar: ProgressBar; let events: EventEmitter; diff --git a/test/commands/source/report.test.ts b/test/commands/source/report.test.ts index 6f1f8278a..15c53d4ec 100644 --- a/test/commands/source/report.test.ts +++ b/test/commands/source/report.test.ts @@ -6,14 +6,15 @@ */ import { join } from 'path'; -import * as fs from 'fs'; import * as sinon from 'sinon'; -import { assert, expect } from 'chai'; +import { expect } from 'chai'; import { fromStub, spyMethod, stubInterface, stubMethod } from '@salesforce/ts-sinon'; -import { ConfigFile, Org, SfProject } from '@salesforce/core'; +import { ConfigFile, SfProject } from '@salesforce/core'; import { Config } from '@oclif/core'; -import { UX } from '@salesforce/command'; -import { MetadataApiDeploy } from '@salesforce/source-deploy-retrieve'; + +import { MetadataApiDeploy, MetadataApiDeployStatus } from '@salesforce/source-deploy-retrieve'; +import { Ux } from '@salesforce/sf-plugins-core'; +import { MockTestOrgData, TestContext } from '@salesforce/core/lib/testSetup'; import { Report } from '../../../src/commands/force/source/deploy/report'; import { DeployReportResultFormatter } from '../../../src/formatters/deployReportResultFormatter'; import { DeployCommandResult } from '../../../src/formatters/deployResultFormatter'; @@ -23,8 +24,10 @@ import { Stash } from '../../../src/stash'; import { getDeployResult, getDeployResponse } from './deployResponses'; describe('force:source:report', () => { - const sandbox = sinon.createSandbox(); - const username = 'report-test@org.com'; + const $$ = new TestContext(); + const testOrg = new MockTestOrgData(); + const sandbox = $$.SANDBOX; + testOrg.username = 'report-test@org.com'; const defaultDir = join('my', 'default', 'package'); const stashedDeployId = 'IMA000STASHID'; @@ -39,21 +42,16 @@ describe('force:source:report', () => { let checkDeployStatusStub: sinon.SinonStub; let uxLogStub: sinon.SinonStub; let pollStatusStub: sinon.SinonStub; - let readSyncStub: sinon.SinonStub; class TestReport extends Report { public async runIt() { - await this.init(); // oclif would normally populate this, but UT don't have it this.id ??= 'force:source:deploy:report'; + // required for deprecation warnings to work correctly + this.ctor.id ??= 'force:source:deploy:report'; + await this.init(); return this.run(); } - public setOrg(org: Org) { - this.org = org; - } - public setProject(project: SfProject) { - this.project = project; - } // eslint-disable-next-line class-methods-use-this public createDeploy(): MetadataApiDeploy { @@ -61,43 +59,31 @@ describe('force:source:report', () => { } } - const runReportCmd = async (params: string[]) => { - // @ts-expect-error type mismatch between oclif/core v1 and v2 + const runReportCmd = async (params: string[], result?: MetadataApiDeployStatus) => { const cmd = new TestReport(params, oclifConfigStub); - stubMethod(sandbox, cmd, 'assignProject').callsFake(() => { - const SfProjectStub = fromStub( - stubInterface(sandbox, { - getUniquePackageDirectories: () => [{ fullPath: defaultDir }], - }) - ); - cmd.setProject(SfProjectStub); - }); - stubMethod(sandbox, cmd, 'assignOrg').callsFake(() => { - const orgStub = fromStub( - stubInterface(sandbox, { - getUsername: () => username, - getConnection: () => ({ - metadata: { - checkDeployStatus: checkDeployStatusStub, - }, - }), - }) - ); - cmd.setOrg(orgStub); - }); - uxLogStub = stubMethod(sandbox, UX.prototype, 'log'); + cmd.project = SfProject.getInstance(); + sandbox + .stub(cmd.project, 'getUniquePackageDirectories') + .returns([{ fullPath: defaultDir, path: defaultDir, name: '' }]); + + uxLogStub = stubMethod(sandbox, Ux.prototype, 'log'); stubMethod(sandbox, ConfigFile.prototype, 'get').returns({ jobid: stashedDeployId }); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + checkDeployStatusStub = sandbox.stub(cmd, 'report').resolves({ response: result ?? expectedResults }); return cmd.runIt(); }; - beforeEach(() => { - readSyncStub = stubMethod(sandbox, ConfigFile.prototype, 'readSync'); + beforeEach(async () => { + await $$.stubAuths(testOrg); + await $$.stubConfig({ 'target-org': testOrg.username }); + pollStatusStub = sandbox.stub(MetadataApiDeploy.prototype, 'pollStatus'); - checkDeployStatusStub = sandbox.stub().resolves(expectedResults); }); afterEach(() => { + $$.restore(); sandbox.restore(); }); @@ -106,45 +92,28 @@ describe('force:source:report', () => { const result = await runReportCmd(['--json']); expect(result).to.deep.equal(expectedResults); expect(getStashSpy.called).to.equal(true); - expect(checkDeployStatusStub.firstCall.args[0]).to.equal(stashedDeployId); + expect(checkDeployStatusStub.firstCall.args[1]).to.equal(stashedDeployId); }); it('should display stashed deploy ID', async () => { const progressBarStub = sandbox.stub(DeployProgressBarFormatter.prototype, 'progress').returns(); const result = await runReportCmd([]); expect(result).to.deep.equal(expectedResults); - expect(uxLogStub.firstCall.args[0]).to.contain(stashedDeployId); expect(progressBarStub.calledOnce).to.equal(true); }); - it('should rename corrupt stash.json and throw an error', async () => { - const jsonParseError = new Error(); - jsonParseError.name = 'JsonParseError'; - readSyncStub.throws(jsonParseError); - const renameSyncStub = stubMethod(sandbox, fs, 'renameSync'); - try { - await runReportCmd(['--json']); - assert(false, 'Expected report command to throw a JsonParseError'); - } catch (error: unknown) { - const err = error as Error; - expect(err.name).to.equal('InvalidStashFile'); - expect(renameSyncStub.calledOnce).to.be.true; - } - }); - it('should use the jobid flag', async () => { const getStashSpy = spyMethod(sandbox, Stash, 'get'); const result = await runReportCmd(['--json', '--jobid', expectedResults.id]); expect(result).to.deep.equal(expectedResults); expect(getStashSpy.called).to.equal(false); - expect(checkDeployStatusStub.firstCall.args[0]).to.equal(expectedResults.id); + expect(checkDeployStatusStub.firstCall.args[1]).to.equal(expectedResults.id); }); it('should display the jobid flag', async () => { const progressBarStub = sandbox.stub(DeployProgressBarFormatter.prototype, 'progress').returns(); const result = await runReportCmd(['--jobid', expectedResults.id]); expect(result).to.deep.equal(expectedResults); - expect(uxLogStub.firstCall.args[0]).to.contain(expectedResults.id); expect(progressBarStub.calledOnce).to.equal(true); }); @@ -155,7 +124,7 @@ describe('force:source:report', () => { await runReportCmd([]); expect(displayStub.calledOnce).to.equal(true); expect(getJsonStub.calledOnce).to.equal(true); - expect(uxLogStub.called).to.equal(true); + expect(uxLogStub.called).to.equal(false); expect(progressBarStub.calledOnce).to.equal(true); }); @@ -183,7 +152,7 @@ describe('force:source:report', () => { pollStatusStub.throws(Error('The client has timed out')); checkDeployStatusStub.reset(); checkDeployStatusStub.resolves(inProgressDeployResult); - const result = await runReportCmd(['--json', '--wait', '1']); + const result = await runReportCmd(['--json', '--wait', '1'], inProgressDeployResult); expect(result).to.deep.equal(inProgressDeployResult); }); }); diff --git a/test/commands/source/retrieve.test.ts b/test/commands/source/retrieve.test.ts index eb008e78c..f8093f804 100644 --- a/test/commands/source/retrieve.test.ts +++ b/test/commands/source/retrieve.test.ts @@ -17,10 +17,11 @@ import { MetadataType, RetrieveOptions, } from '@salesforce/source-deploy-retrieve'; -import { Lifecycle, Messages, Org, SfProject } from '@salesforce/core'; +import { Lifecycle, Messages, SfProject } from '@salesforce/core'; import { fromStub, stubInterface, stubMethod } from '@salesforce/ts-sinon'; import { Config } from '@oclif/core'; -import { UX } from '@salesforce/command'; +import { SfCommand, Ux } from '@salesforce/sf-plugins-core'; +import { MockTestOrgData, TestContext } from '@salesforce/core/lib/testSetup'; import { Retrieve } from '../../../src/commands/force/source/retrieve'; import { RetrieveCommandResult, RetrieveResultFormatter } from '../../../src/formatters/retrieveResultFormatter'; import { getRetrieveResult } from './retrieveResponses'; @@ -30,8 +31,10 @@ Messages.importMessagesDirectory(__dirname); const messages = Messages.loadMessages('@salesforce/plugin-source', 'retrieve'); describe('force:source:retrieve', () => { - const sandbox = sinon.createSandbox(); - const username = 'retrieve-test@org.com'; + const $$ = new TestContext(); + const testOrg = new MockTestOrgData(); + const sandbox = $$.SANDBOX; + testOrg.username = 'retrieve-test@org.com'; const packageXml = 'package.xml'; const defaultPackagePath = 'defaultPackagePath'; @@ -50,60 +53,41 @@ describe('force:source:retrieve', () => { let retrieveStub: sinon.SinonStub; let pollStub: sinon.SinonStub; let lifecycleEmitStub: sinon.SinonStub; - let resolveProjectConfigStub: sinon.SinonStub; let warnStub: sinon.SinonStub; class TestRetrieve extends Retrieve { public async runIt() { + // oclif would normally populate this, but UT don't have it + this.id ??= 'force:source:retrieve'; + // required for deprecation warnings to work correctly + this.ctor.id ??= 'force:source:retrieve'; await this.init(); return this.run(); } - - public setOrg(org: Org) { - this.org = org; - } - - public setProject(project: SfProject) { - this.project = project; - } } - const runRetrieveCmd = async (params: string[]) => { - // @ts-expect-error type mismatch between oclif/core v1 and v2 + const runRetrieveCmd = async (params: string[], options?: { sourceApiVersion?: string }) => { const cmd = new TestRetrieve(params, oclifConfigStub); - stubMethod(sandbox, SfProject, 'resolveProjectPath').resolves(join('path', 'to', 'package')); - stubMethod(sandbox, cmd, 'assignProject').callsFake(() => { - const SfProjectStub = fromStub( - stubInterface(sandbox, { - getDefaultPackage: () => ({ fullPath: defaultPackagePath }), - getUniquePackageDirectories: () => [{ fullPath: defaultPackagePath }], - getPackageDirectories: () => [{ fullPath: defaultPackagePath }], - resolveProjectConfig: resolveProjectConfigStub, - }) - ); - cmd.setProject(SfProjectStub); - }); - stubMethod(sandbox, cmd, 'assignOrg').callsFake(() => { - const orgStub = fromStub( - stubInterface(sandbox, { - getUsername: () => username, - }) - ); - cmd.setOrg(orgStub); - }); + cmd.project = SfProject.getInstance(); + sandbox.stub(cmd.project, 'getDefaultPackage').returns({ name: '', path: '', fullPath: defaultPackagePath }); + sandbox + .stub(cmd.project, 'getUniquePackageDirectories') + .returns([{ fullPath: defaultPackagePath, path: '', name: '' }]); + sandbox.stub(cmd.project, 'getPackageDirectories').returns([{ fullPath: defaultPackagePath, path: '', name: '' }]); + sandbox.stub(cmd.project, 'resolveProjectConfig').resolves({ sourceApiVersion: options?.sourceApiVersion }); + // keep the stdout from showing up in the test output - stubMethod(sandbox, UX.prototype, 'log'); - stubMethod(sandbox, UX.prototype, 'setSpinnerStatus'); - stubMethod(sandbox, UX.prototype, 'startSpinner'); - stubMethod(sandbox, UX.prototype, 'stopSpinner'); - stubMethod(sandbox, UX.prototype, 'styledHeader'); - stubMethod(sandbox, UX.prototype, 'table'); + stubMethod(sandbox, Ux.prototype, 'log'); + stubMethod(sandbox, Ux.prototype, 'styledHeader'); + stubMethod(sandbox, Ux.prototype, 'table'); stubMethod(sandbox, Retrieve.prototype, 'moveResultsForRetrieveTargetDir'); return cmd.runIt(); }; - beforeEach(() => { - resolveProjectConfigStub = sandbox.stub(); + beforeEach(async () => { + await $$.stubAuths(testOrg); + await $$.stubConfig({ 'target-org': testOrg.username }); + pollStub = sandbox.stub().resolves(retrieveResult); retrieveStub = sandbox.stub().resolves({ pollStatus: pollStub, @@ -116,10 +100,11 @@ describe('force:source:retrieve', () => { has: () => false, }); lifecycleEmitStub = sandbox.stub(Lifecycle.prototype, 'emit'); - warnStub = stubMethod(sandbox, UX.prototype, 'warn'); + warnStub = stubMethod(sandbox, SfCommand.prototype, 'warn'); }); afterEach(() => { + $$.restore(); sandbox.restore(); }); @@ -142,7 +127,7 @@ describe('force:source:retrieve', () => { // Ensure ComponentSet.retrieve() args const ensureRetrieveArgs = (overrides?: Partial) => { const defaultRetrieveArgs = { - usernameOrConnection: username, + usernameOrConnection: testOrg.username, merge: true, output: defaultPackagePath, packageOptions: undefined, @@ -233,9 +218,8 @@ describe('force:source:retrieve', () => { it('should pass along sourceapiversion', async () => { const sourceApiVersion = '50.0'; - resolveProjectConfigStub.resolves({ sourceApiVersion }); const manifest = 'package.xml'; - const result = await runRetrieveCmd(['--manifest', manifest, '--json']); + const result = await runRetrieveCmd(['--manifest', manifest, '--json'], { sourceApiVersion }); expect(result).to.deep.equal(expectedResults); ensureCreateComponentSetArgs({ sourceapiversion: sourceApiVersion, @@ -252,7 +236,10 @@ describe('force:source:retrieve', () => { const manifest = 'package.xml'; const packagenames = ['package1']; const result = await runRetrieveCmd(['--manifest', manifest, '--packagenames', packagenames[0], '--json']); - expectedResults.packages.push({ name: packagenames[0], path: join('path', 'to', 'package', packagenames[0]) }); + expectedResults.packages.push({ + name: packagenames[0], + path: join(await SfProject.resolveProjectPath(), packagenames[0]), + }); expect(result).to.deep.equal(expectedResults); ensureCreateComponentSetArgs({ packagenames, @@ -270,10 +257,19 @@ describe('force:source:retrieve', () => { it('should pass along multiple packagenames', async () => { const manifest = 'package.xml'; const packagenames = ['package1', 'package2']; - const result = await runRetrieveCmd(['--manifest', manifest, '--packagenames', packagenames.join(','), '--json']); - packagenames.forEach((pkg) => { - expectedResults.packages.push({ name: pkg, path: join('path', 'to', 'package', pkg) }); - }); + const result = await runRetrieveCmd([ + '--manifest', + manifest, + '--packagenames', + 'package1', + '--packagenames', + 'package2', + '--json', + ]); + for (const pkg of packagenames) { + // eslint-disable-next-line no-await-in-loop + expectedResults.packages.push({ name: pkg, path: join(await SfProject.resolveProjectPath(), pkg) }); + } expect(result).to.deep.equal(expectedResults); ensureCreateComponentSetArgs({ packagenames, @@ -315,7 +311,7 @@ describe('force:source:retrieve', () => { expect(component) .to.be.a('object') .and.to.have.property('type') - .and.to.deep.equal({ id: 'customobject', name: 'CustomObject' }); + .and.to.deep.include({ id: 'customobject', name: 'CustomObject' }); expect(component).and.to.have.property('fullName').and.to.be.equal(ComponentSet.WILDCARD); }, has: (component: ComponentLike) => { @@ -332,7 +328,7 @@ describe('force:source:retrieve', () => { }); await runRetrieveCmd(['--metadata', metadata]); expect(warnStub.calledOnce); - expect(warnStub.firstCall.firstArg).to.equal(messages.getMessage('wantsToRetrieveCustomFields')); + expect(warnStub.secondCall.firstArg).to.equal(messages.getMessage('wantsToRetrieveCustomFields')); }); it('should not warn users when retrieving CustomField,CustomObject with --metadata', async () => { @@ -362,7 +358,7 @@ describe('force:source:retrieve', () => { }, }); await runRetrieveCmd(['--metadata', metadata]); - expect(warnStub.callCount).to.be.equal(0); + expect(warnStub.callCount).to.be.equal(1); }); it('should warn users when retrieving CustomField with --manifest', async () => { @@ -376,7 +372,7 @@ describe('force:source:retrieve', () => { expect(component) .to.be.a('object') .and.to.have.property('type') - .and.to.deep.equal({ id: 'customobject', name: 'CustomObject' }); + .and.to.deep.include({ id: 'customobject', name: 'CustomObject' }); expect(component).and.to.have.property('fullName').and.to.be.equal(ComponentSet.WILDCARD); }, has: (component: ComponentLike) => { @@ -393,7 +389,7 @@ describe('force:source:retrieve', () => { }); await runRetrieveCmd(['--manifest', manifest]); expect(warnStub.calledOnce); - expect(warnStub.firstCall.firstArg).to.equal(messages.getMessage('wantsToRetrieveCustomFields')); + expect(warnStub.secondCall.firstArg).to.equal(messages.getMessage('wantsToRetrieveCustomFields')); }); it('should not be warn users when retrieving CustomField,CustomObject with --manifest', async () => { @@ -423,6 +419,6 @@ describe('force:source:retrieve', () => { }, }); await runRetrieveCmd(['--manifest', manifest]); - expect(warnStub.callCount).to.be.equal(0); + expect(warnStub.callCount).to.be.equal(1); }); }); diff --git a/test/commands/source/sourceCommand.test.ts b/test/commands/source/sourceCommand.test.ts deleted file mode 100644 index c728e67a0..000000000 --- a/test/commands/source/sourceCommand.test.ts +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2020, salesforce.com, inc. - * All rights reserved. - * Licensed under the BSD 3-Clause license. - * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ -/* eslint-disable class-methods-use-this */ - -import * as sinon from 'sinon'; -import { expect } from 'chai'; -import { stubInterface, fromStub } from '@salesforce/ts-sinon'; -import { Dictionary } from '@salesforce/ts-types'; -import { Logger } from '@salesforce/core'; -import { SourceCommand } from '../../../src/sourceCommand'; - -describe('SourceCommand', () => { - const sandbox = sinon.createSandbox(); - - afterEach(() => { - sandbox.restore(); - }); - - class SourceCommandTest extends SourceCommand { - protected logger = fromStub( - stubInterface(sandbox, { - debug: () => {}, - isDebugEnabled: () => false, - }) - ); - public async run() {} - public callSetExitCode(exitCode: number) { - this.setExitCode(exitCode); - } - public setCmdFlags(flags: Dictionary) { - this.flags = flags; - } - public callIsJsonOutput() { - return this.isJsonOutput(); - } - public resolveSuccess() {} - public formatResult() {} - } - - describe('isJsonOutput', () => { - it('should return true when json flag is set', () => { - const command = new SourceCommandTest([''], null); - command.setCmdFlags({ json: true }); - expect(command.callIsJsonOutput()).to.equal(true); - }); - - it('should return false when json flag is unset', () => { - const command = new SourceCommandTest([''], null); - expect(command.callIsJsonOutput()).to.equal(false); - }); - }); - - describe('setExitCode', () => { - const exitCode = process.exitCode; - it('should set process.exitCode', () => { - const testCode = 100; - const command = new SourceCommandTest([''], null); - command.callSetExitCode(testCode); - expect(process.exitCode).to.equal(testCode); - }); - - after(() => { - process.exitCode = exitCode; - }); - }); -}); diff --git a/test/commands/source/testConsts.ts b/test/commands/source/testConsts.ts index 90199cf59..17396a6ab 100644 --- a/test/commands/source/testConsts.ts +++ b/test/commands/source/testConsts.ts @@ -24,76 +24,6 @@ export const exampleSourceComponent: ComponentProperties = { content: '/dreamhouse-lwc/force-app/main/default/classes/GeocodingService.cls', }; -export const exampleDeployResponse = { - result: { - canceledBy: '0051h000006BHOq', - canceledByName: 'User User', - checkOnly: false, - completedDate: '2021-04-09T20:23:05.000Z', - createdBy: '0051h000006BHOq', - createdByName: 'User User', - createdDate: '2021-04-09T20:22:58.000Z', - details: { - componentSuccesses: [ - { - changed: 'false', - componentType: 'CustomField', - created: 'false', - createdDate: '2021-04-09T20:23:02.000Z', - deleted: 'false', - fileName: 'sdx_sourceDeploy_pkg_1617999776176/objects/Property__c.object', - fullName: 'Property__c.Picture__c', - id: '00N1h00000ApoBMEAZ', - success: 'true', - }, - { - changed: 'false', - componentType: 'CustomField', - created: 'false', - createdDate: '2021-04-09T20:23:02.000Z', - deleted: 'false', - fileName: 'sdx_sourceDeploy_pkg_1617999776176/objects/Property__c.object', - fullName: 'Property__c.Baths__c', - id: '00N1h00000ApoAuEAJ', - success: 'true', - }, - { - changed: 'false', - componentType: 'CustomField', - created: 'false', - createdDate: '2021-04-09T20:23:02.000Z', - deleted: 'false', - fileName: 'sdx_sourceDeploy_pkg_1617999776176/objects/Property__c.object', - fullName: 'Property__c.Price__c', - id: '00N1h00000ApoBOEAZ', - success: 'true', - }, - ], - runTestResult: { - numFailures: '0', - numTestsRun: '0', - totalTime: '0.0', - }, - }, - done: true, - id: '0Af1h00000fCQgsCAG', - ignoreWarnings: false, - lastModifiedDate: '2021-04-09T20:23:05.000Z', - numberComponentErrors: 0, - numberComponentsDeployed: 32, - numberComponentsTotal: 86, - numberTestErrors: 0, - numberTestsCompleted: 5, - numberTestsTotal: 10, - rollbackOnError: true, - runTestsEnabled: false, - startDate: '2021-04-09T20:22:58.000Z', - status: 'Canceled', - success: false, - }, - status: 0, -}; - export const exampleDeleteResponse = { // required but ignored by the delete UT getFileResponses: (): void => {}, diff --git a/test/formatters/deployProgressStatusFormatter.ts b/test/formatters/deployProgressStatusFormatter.ts new file mode 100644 index 000000000..0e94ff794 --- /dev/null +++ b/test/formatters/deployProgressStatusFormatter.ts @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2020, salesforce.com, inc. + * All rights reserved. + * Licensed under the BSD 3-Clause license. + * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause + */ + +import * as sinon from 'sinon'; +import { expect } from 'chai'; +import { Ux } from '@salesforce/sf-plugins-core'; +import { MetadataApiDeploy } from '@salesforce/source-deploy-retrieve'; +import { getDeployResult } from '../commands/source/deployResponses'; +import { DeployProgressStatusFormatter } from '../../src/formatters/deployProgressStatusFormatter'; + +describe('DeployProgressStatusFormatter', () => { + const sandbox = sinon.createSandbox(); + const deployResultInProgress = getDeployResult('inProgress'); + let ux; + let printStub: sinon.SinonStub; + let mdApiDeploy: MetadataApiDeploy; + + beforeEach(() => { + mdApiDeploy = new MetadataApiDeploy({ usernameOrConnection: 'test' }); + + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore stubbing private method + printStub = sandbox.stub(DeployProgressStatusFormatter.prototype, 'printDeployStatus'); + }); + + afterEach(() => { + sandbox.restore(); + }); + + const fireUpdateEvent = () => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore eslint-disable-next-line + mdApiDeploy.event.emit('update', deployResultInProgress.response); // eslint-disable-line + }; + + it('should output with every update when verbose', async () => { + const formatter = new DeployProgressStatusFormatter(ux as Ux, { verbose: true }); + formatter.progress(mdApiDeploy); + + fireUpdateEvent(); + expect(printStub.calledOnce).to.equal(true); + + fireUpdateEvent(); + expect(printStub.calledTwice).to.equal(true); + + fireUpdateEvent(); + expect(printStub.calledThrice).to.equal(true); + }); + + it('should only output on update when results change without verbose', async () => { + const formatter = new DeployProgressStatusFormatter(ux as Ux); + formatter.progress(mdApiDeploy); + + fireUpdateEvent(); + expect(printStub.calledOnce).to.equal(true); + + fireUpdateEvent(); + expect(printStub.calledOnce).to.equal(true); + + // Now change the deploy results + deployResultInProgress.response.numberComponentsDeployed++; + + fireUpdateEvent(); + expect(printStub.calledTwice).to.equal(true); + }); +}); diff --git a/test/formatters/deployResultFormatter.test.ts b/test/formatters/deployResultFormatter.test.ts index 07c5a9b81..ccb3747f6 100644 --- a/test/formatters/deployResultFormatter.test.ts +++ b/test/formatters/deployResultFormatter.test.ts @@ -8,15 +8,15 @@ import * as path from 'path'; import * as sinon from 'sinon'; import { expect } from 'chai'; -import { Logger } from '@salesforce/core'; -import { UX } from '@salesforce/command'; import { DeployResult, FileResponse } from '@salesforce/source-deploy-retrieve'; import { stubInterface } from '@salesforce/ts-sinon'; +import { Ux } from '@salesforce/sf-plugins-core'; +import { TestContext } from '@salesforce/core/lib/testSetup'; import { getDeployResult } from '../commands/source/deployResponses'; import { DeployCommandResult, DeployResultFormatter } from '../../src/formatters/deployResultFormatter'; describe('DeployResultFormatter', () => { - const sandbox = sinon.createSandbox(); + const sandbox = new TestContext().SANDBOX; const deployResultSuccess = getDeployResult('successSync'); const deployResultFailure = getDeployResult('failed'); @@ -25,7 +25,6 @@ describe('DeployResultFormatter', () => { const deployResultTestSuccess = getDeployResult('passedTest'); const deployResultTestSuccessAndFailure = getDeployResult('passedAndFailedTest'); - const logger = Logger.childFromRoot('deployTestLogger').useMemoryLogging(); let ux; let logStub: sinon.SinonStub; @@ -44,7 +43,7 @@ describe('DeployResultFormatter', () => { logStub = sandbox.stub(); styledHeaderStub = sandbox.stub(); tableStub = sandbox.stub(); - ux = stubInterface(sandbox, { + ux = stubInterface(sandbox, { log: logStub, styledHeader: styledHeaderStub, table: tableStub, @@ -60,7 +59,7 @@ describe('DeployResultFormatter', () => { it('should return expected json for a success', async () => { const deployResponse = JSON.parse(JSON.stringify(deployResultSuccess.response)) as DeployCommandResult; const expectedSuccessResults = deployResultSuccess.response as DeployCommandResult; - const formatter = new DeployResultFormatter(logger, ux as UX, {}, deployResultSuccess); + const formatter = new DeployResultFormatter(ux as Ux, {}, deployResultSuccess); const json = formatter.getJson(); expectedSuccessResults.deployedSource = deployResultSuccess.getFileResponses(); @@ -75,7 +74,7 @@ describe('DeployResultFormatter', () => { expectedFailureResults.deployedSource = deployResultFailure.getFileResponses(); expectedFailureResults.outboundFiles = []; expectedFailureResults.deploys = [deployResponse]; - const formatter = new DeployResultFormatter(logger, ux as UX, {}, deployResultFailure); + const formatter = new DeployResultFormatter(ux as Ux, {}, deployResultFailure); expect(formatter.getJson()).to.deep.equal(expectedFailureResults); }); @@ -85,7 +84,7 @@ describe('DeployResultFormatter', () => { expectedPartialSuccessResponse.deployedSource = deployResultPartialSuccess.getFileResponses(); expectedPartialSuccessResponse.outboundFiles = []; expectedPartialSuccessResponse.deploys = [deployResponse]; - const formatter = new DeployResultFormatter(logger, ux as UX, {}, deployResultPartialSuccess); + const formatter = new DeployResultFormatter(ux as Ux, {}, deployResultPartialSuccess); expect(formatter.getJson()).to.deep.equal(expectedPartialSuccessResponse); }); @@ -95,7 +94,7 @@ describe('DeployResultFormatter', () => { ...(JSON.parse(JSON.stringify(deployResultSuccess)) as DeployResult), replacements: new Map([['MyApexClass.cls', ['foo', 'bar']]]), }; - const formatter = new DeployResultFormatter(logger, ux as UX, {}, resultWithReplacements as DeployResult); + const formatter = new DeployResultFormatter(ux as Ux, {}, resultWithReplacements as DeployResult); const json = formatter.getJson(); expect(json.replacements).to.deep.equal({ 'MyApexClass.cls': ['foo', 'bar'] }); @@ -104,7 +103,7 @@ describe('DeployResultFormatter', () => { const resultWithoutReplacements = { ...(JSON.parse(JSON.stringify(deployResultSuccess)) as DeployResult), }; - const formatter = new DeployResultFormatter(logger, ux as UX, {}, resultWithoutReplacements as DeployResult); + const formatter = new DeployResultFormatter(ux as Ux, {}, resultWithoutReplacements as DeployResult); const json = formatter.getJson(); expect(json.replacements).to.be.undefined; }); @@ -113,7 +112,7 @@ describe('DeployResultFormatter', () => { ...(JSON.parse(JSON.stringify(deployResultSuccess)) as DeployResult), replacements: new Map(), }; - const formatter = new DeployResultFormatter(logger, ux as UX, {}, resultWithEmptyReplacements as DeployResult); + const formatter = new DeployResultFormatter(ux as Ux, {}, resultWithEmptyReplacements as DeployResult); const json = formatter.getJson(); expect(json.replacements).to.be.undefined; }); @@ -122,7 +121,7 @@ describe('DeployResultFormatter', () => { describe('display', () => { it('should output as expected for a success', async () => { - const formatter = new DeployResultFormatter(logger, ux as UX, {}, deployResultSuccess); + const formatter = new DeployResultFormatter(ux as Ux, {}, deployResultSuccess); formatter.display(); expect(styledHeaderStub.calledOnce).to.equal(true); expect(logStub.callCount).to.equal(2); @@ -134,7 +133,7 @@ describe('DeployResultFormatter', () => { }); it('should output as expected for a failure and exclude duplicate information', async () => { - const formatter = new DeployResultFormatter(logger, ux as UX, {}, deployResultFailure); + const formatter = new DeployResultFormatter(ux as Ux, {}, deployResultFailure); formatter.display(); expect(styledHeaderStub.calledOnce).to.equal(true); expect(logStub.callCount).to.equal(3); @@ -152,7 +151,7 @@ describe('DeployResultFormatter', () => { deployFailure.response.details.componentFailures = []; deployFailure.response.details.componentSuccesses = []; delete deployFailure.response.details.runTestResult; - const formatter = new DeployResultFormatter(logger, ux as UX, {}, deployFailure); + const formatter = new DeployResultFormatter(ux as Ux, {}, deployFailure); sandbox.stub(formatter, 'isSuccess').returns(false); try { @@ -167,7 +166,7 @@ describe('DeployResultFormatter', () => { }); it('should output as expected for a test failure with verbose', async () => { - const formatter = new DeployResultFormatter(logger, ux as UX, { verbose: true }, deployResultTestFailure); + const formatter = new DeployResultFormatter(ux as Ux, { verbose: true }, deployResultTestFailure); formatter.display(); expect(styledHeaderStub.calledThrice).to.equal(true); expect(logStub.callCount).to.equal(8); @@ -178,7 +177,7 @@ describe('DeployResultFormatter', () => { }); it('should output as expected for passing tests with verbose', async () => { - const formatter = new DeployResultFormatter(logger, ux as UX, { verbose: true }, deployResultTestSuccess); + const formatter = new DeployResultFormatter(ux as Ux, { verbose: true }, deployResultTestSuccess); formatter.display(); expect(styledHeaderStub.calledThrice).to.equal(true); expect(logStub.callCount).to.equal(8); @@ -189,12 +188,7 @@ describe('DeployResultFormatter', () => { }); it('should output as expected for passing and failing tests with verbose', async () => { - const formatter = new DeployResultFormatter( - logger, - ux as UX, - { verbose: true }, - deployResultTestSuccessAndFailure - ); + const formatter = new DeployResultFormatter(ux as Ux, { verbose: true }, deployResultTestSuccessAndFailure); formatter.display(); expect(styledHeaderStub.callCount).to.equal(4); expect(logStub.callCount).to.equal(9); @@ -206,7 +200,7 @@ describe('DeployResultFormatter', () => { }); it('shows success AND failures for partialSucceeded', async () => { - const formatter = new DeployResultFormatter(logger, ux as UX, { verbose: true }, deployResultPartialSuccess); + const formatter = new DeployResultFormatter(ux as Ux, { verbose: true }, deployResultPartialSuccess); formatter.display(); expect(styledHeaderStub.callCount, 'styledHeaderStub.callCount').to.equal(2); expect(logStub.callCount, 'logStub.callCount').to.equal(4); @@ -221,7 +215,7 @@ describe('DeployResultFormatter', () => { const resultWithoutReplacements = { ...deployResultSuccess, } as DeployResult; - const formatter = new DeployResultFormatter(logger, ux as UX, { verbose: true }, resultWithoutReplacements); + const formatter = new DeployResultFormatter(ux as Ux, { verbose: true }, resultWithoutReplacements); formatter.display(); @@ -236,7 +230,7 @@ describe('DeployResultFormatter', () => { ...deployResultSuccess, replacements: new Map([['MyApexClass.cls', ['foo', 'bar']]]), } as DeployResult; - const formatter = new DeployResultFormatter(logger, ux as UX, { verbose: true }, resultWithReplacements); + const formatter = new DeployResultFormatter(ux as Ux, { verbose: true }, resultWithReplacements); formatter.display(); expect(logStub.callCount, 'logStub.callCount').to.equal(3); @@ -251,7 +245,7 @@ describe('DeployResultFormatter', () => { ...deployResultSuccess, replacements: new Map([['MyApexClass.cls', ['foo', 'bar']]]), } as DeployResult; - const formatter = new DeployResultFormatter(logger, ux as UX, {}, resultWithReplacements); + const formatter = new DeployResultFormatter(ux as Ux, {}, resultWithReplacements); formatter.display(); expect(logStub.callCount, 'logStub.callCount').to.equal(2); diff --git a/test/formatters/mdDeployResultFormatter.test.ts b/test/formatters/mdDeployResultFormatter.test.ts index 5113c87de..8f883f7f1 100644 --- a/test/formatters/mdDeployResultFormatter.test.ts +++ b/test/formatters/mdDeployResultFormatter.test.ts @@ -4,17 +4,16 @@ * Licensed under the BSD 3-Clause license. * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ - import * as sinon from 'sinon'; import { expect } from 'chai'; -import { Logger } from '@salesforce/core'; -import { UX } from '@salesforce/command'; import { stubInterface } from '@salesforce/ts-sinon'; +import { Ux } from '@salesforce/sf-plugins-core'; +import { TestContext } from '@salesforce/core/lib/testSetup'; import { getDeployResult } from '../commands/source/deployResponses'; import { MdDeployResultFormatter } from '../../src/formatters/mdapi/mdDeployResultFormatter'; describe('mdDeployResultFormatter', () => { - const sandbox = sinon.createSandbox(); + const sandbox = new TestContext().SANDBOX; const deployResultSuccess = getDeployResult('successSync'); const deployResultFailure = getDeployResult('failed'); @@ -23,7 +22,6 @@ describe('mdDeployResultFormatter', () => { const deployResultTestSuccess = getDeployResult('passedTest'); const deployResultTestSuccessAndFailure = getDeployResult('passedAndFailedTest'); - const logger = Logger.childFromRoot('deployTestLogger').useMemoryLogging(); let ux; let logStub: sinon.SinonStub; @@ -34,7 +32,7 @@ describe('mdDeployResultFormatter', () => { logStub = sandbox.stub(); styledHeaderStub = sandbox.stub(); tableStub = sandbox.stub(); - ux = stubInterface(sandbox, { + ux = stubInterface(sandbox, { log: logStub, styledHeader: styledHeaderStub, table: tableStub, @@ -51,7 +49,7 @@ describe('mdDeployResultFormatter', () => { it('should return expected json for a success', async () => { process.exitCode = 0; const expectedSuccessResults = deployResultSuccess.response; - const formatter = new MdDeployResultFormatter(logger, ux as UX, {}, deployResultSuccess); + const formatter = new MdDeployResultFormatter(ux as Ux, {}, deployResultSuccess); const json = formatter.getJson(); expect(json).to.deep.equal(expectedSuccessResults); @@ -61,14 +59,14 @@ describe('mdDeployResultFormatter', () => { process.exitCode = 1; const expectedFailureResults = deployResultFailure.response; - const formatter = new MdDeployResultFormatter(logger, ux as UX, {}, deployResultFailure); + const formatter = new MdDeployResultFormatter(ux as Ux, {}, deployResultFailure); expect(formatter.getJson()).to.deep.equal(expectedFailureResults); }); it('should return expected json for a partial success', () => { process.exitCode = 69; const expectedPartialSuccessResponse = deployResultPartialSuccess.response; - const formatter = new MdDeployResultFormatter(logger, ux as UX, {}, deployResultPartialSuccess); + const formatter = new MdDeployResultFormatter(ux as Ux, {}, deployResultPartialSuccess); expect(formatter.getJson()).to.deep.equal(expectedPartialSuccessResponse); }); @@ -76,7 +74,7 @@ describe('mdDeployResultFormatter', () => { process.exitCode = 0; const expectedSuccessResults = deployResultSuccess.response; - const formatter = new MdDeployResultFormatter(logger, ux as UX, { concise: true }, deployResultSuccess); + const formatter = new MdDeployResultFormatter(ux as Ux, { concise: true }, deployResultSuccess); const json = formatter.getJson(); // a few checks that it's the rest of the json @@ -90,7 +88,7 @@ describe('mdDeployResultFormatter', () => { describe('display', () => { it('should output as expected for a success (no table)', async () => { process.exitCode = 0; - const formatter = new MdDeployResultFormatter(logger, ux as UX, {}, deployResultSuccess); + const formatter = new MdDeployResultFormatter(ux as Ux, {}, deployResultSuccess); formatter.display(); expect(logStub.callCount).to.equal(0); expect(tableStub.callCount).to.equal(0); @@ -99,7 +97,7 @@ describe('mdDeployResultFormatter', () => { it('should output as expected for a verbose success (has table)', async () => { process.exitCode = 0; - const formatter = new MdDeployResultFormatter(logger, ux as UX, { verbose: true }, deployResultSuccess); + const formatter = new MdDeployResultFormatter(ux as Ux, { verbose: true }, deployResultSuccess); formatter.display(); expect(styledHeaderStub.callCount).to.equal(1); expect(logStub.callCount).to.equal(1); @@ -110,7 +108,7 @@ describe('mdDeployResultFormatter', () => { it('should output as expected for a failure and exclude duplicate information', async () => { process.exitCode = 1; - const formatter = new MdDeployResultFormatter(logger, ux as UX, {}, deployResultFailure); + const formatter = new MdDeployResultFormatter(ux as Ux, {}, deployResultFailure); try { formatter.display(); @@ -130,7 +128,7 @@ describe('mdDeployResultFormatter', () => { deployFailure.response.details.componentFailures = []; deployFailure.response.details.componentSuccesses = []; delete deployFailure.response.details.runTestResult; - const formatter = new MdDeployResultFormatter(logger, ux as UX, {}, deployFailure); + const formatter = new MdDeployResultFormatter(ux as Ux, {}, deployFailure); sandbox.stub(formatter, 'isSuccess').returns(false); try { @@ -146,7 +144,7 @@ describe('mdDeployResultFormatter', () => { it('should output as expected for a test failure with verbose', async () => { process.exitCode = 1; - const formatter = new MdDeployResultFormatter(logger, ux as UX, { verbose: true }, deployResultTestFailure); + const formatter = new MdDeployResultFormatter(ux as Ux, { verbose: true }, deployResultTestFailure); try { formatter.display(); throw new Error('should have thrown'); @@ -163,7 +161,7 @@ describe('mdDeployResultFormatter', () => { it('should output as expected for passing tests with verbose', async () => { process.exitCode = 0; - const formatter = new MdDeployResultFormatter(logger, ux as UX, { verbose: true }, deployResultTestSuccess); + const formatter = new MdDeployResultFormatter(ux as Ux, { verbose: true }, deployResultTestSuccess); formatter.display(); expect(styledHeaderStub.args[0][0]).to.include('Deployed Source'); expect(styledHeaderStub.args[1][0]).to.include('Component Failures [1]'); @@ -173,12 +171,7 @@ describe('mdDeployResultFormatter', () => { it('should output as expected for passing and failing tests with verbose', async () => { process.exitCode = 1; - const formatter = new MdDeployResultFormatter( - logger, - ux as UX, - { verbose: true }, - deployResultTestSuccessAndFailure - ); + const formatter = new MdDeployResultFormatter(ux as Ux, { verbose: true }, deployResultTestSuccessAndFailure); try { formatter.display(); throw new Error('should have thrown'); @@ -195,7 +188,7 @@ describe('mdDeployResultFormatter', () => { it('shows success AND failures for partialSucceeded', async () => { process.exitCode = 69; - const formatter = new MdDeployResultFormatter(logger, ux as UX, { verbose: true }, deployResultPartialSuccess); + const formatter = new MdDeployResultFormatter(ux as Ux, { verbose: true }, deployResultPartialSuccess); formatter.display(); expect(styledHeaderStub.callCount, 'styledHeaderStub.callCount').to.equal(2); expect(logStub.callCount, 'logStub.callCount').to.equal(3); diff --git a/test/formatters/pullFormatter.test.ts b/test/formatters/pullFormatter.test.ts index 4146b507a..0bafb2e39 100644 --- a/test/formatters/pullFormatter.test.ts +++ b/test/formatters/pullFormatter.test.ts @@ -8,16 +8,16 @@ import { relative } from 'path'; import * as sinon from 'sinon'; import { expect } from 'chai'; -import { Logger } from '@salesforce/core'; -import { UX } from '@salesforce/command'; import { FileResponse } from '@salesforce/source-deploy-retrieve'; import { stubInterface } from '@salesforce/ts-sinon'; import { ensureArray } from '@salesforce/kit'; +import { Ux } from '@salesforce/sf-plugins-core'; +import { TestContext } from '@salesforce/core/lib/testSetup'; import { getRetrieveResult } from '../commands/source/retrieveResponses'; import { PullResponse, PullResultFormatter } from '../../src/formatters/source/pullFormatter'; describe('PullFormatter', () => { - const sandbox = sinon.createSandbox(); + const sandbox = new TestContext().SANDBOX; const retrieveResultSuccess = getRetrieveResult('success'); const retrieveResultFailure = getRetrieveResult('failed'); @@ -25,7 +25,6 @@ describe('PullFormatter', () => { const retrieveResultEmpty = getRetrieveResult('empty'); const retrieveResultWarnings = getRetrieveResult('warnings'); - const logger = Logger.childFromRoot('retrieveTestLogger').useMemoryLogging(); let ux; let logStub: sinon.SinonStub; let styledHeaderStub: sinon.SinonStub; @@ -43,7 +42,7 @@ describe('PullFormatter', () => { logStub = sandbox.stub(); styledHeaderStub = sandbox.stub(); tableStub = sandbox.stub(); - ux = stubInterface(sandbox, { + ux = stubInterface(sandbox, { log: logStub, styledHeader: styledHeaderStub, table: tableStub, @@ -59,14 +58,14 @@ describe('PullFormatter', () => { it('should return expected json for a success', async () => { process.exitCode = 0; const expectedSuccessResults: PullResponse['pulledSource'] = retrieveResultSuccess.getFileResponses(); - const formatter = new PullResultFormatter(logger, ux as UX, {}, retrieveResultSuccess); + const formatter = new PullResultFormatter(ux as Ux, {}, retrieveResultSuccess); expect(formatter.getJson().pulledSource).to.deep.equal(expectedSuccessResults); }); it('should return expected json for a failure', async () => { process.exitCode = 1; const expectedFailureResults: PullResponse['pulledSource'] = retrieveResultFailure.getFileResponses(); - const formatter = new PullResultFormatter(logger, ux as UX, {}, retrieveResultFailure); + const formatter = new PullResultFormatter(ux as Ux, {}, retrieveResultFailure); try { formatter.getJson().pulledSource; throw new Error('should have thrown'); @@ -80,14 +79,14 @@ describe('PullFormatter', () => { it('should return expected json for an InProgress', async () => { const expectedInProgressResults: PullResponse['pulledSource'] = retrieveResultInProgress.getFileResponses(); - const formatter = new PullResultFormatter(logger, ux as UX, {}, retrieveResultInProgress); + const formatter = new PullResultFormatter(ux as Ux, {}, retrieveResultInProgress); expect(formatter.getJson().pulledSource).to.deep.equal(expectedInProgressResults); }); describe('display', () => { it('should output as expected for a success', async () => { process.exitCode = 0; - const formatter = new PullResultFormatter(logger, ux as UX, {}, retrieveResultSuccess); + const formatter = new PullResultFormatter(ux as Ux, {}, retrieveResultSuccess); formatter.display(); expect(styledHeaderStub.called).to.equal(true); expect(logStub.called).to.equal(false); @@ -101,7 +100,7 @@ describe('PullFormatter', () => { it('should output as expected for an InProgress', async () => { process.exitCode = 68; const options = { waitTime: 33 }; - const formatter = new PullResultFormatter(logger, ux as UX, options, retrieveResultInProgress); + const formatter = new PullResultFormatter(ux as Ux, options, retrieveResultInProgress); formatter.display(); expect(styledHeaderStub.called).to.equal(false); expect(logStub.called).to.equal(true); @@ -113,7 +112,7 @@ describe('PullFormatter', () => { it('should output as expected for a Failure', async () => { process.exitCode = 1; - const formatter = new PullResultFormatter(logger, ux as UX, {}, retrieveResultFailure); + const formatter = new PullResultFormatter(ux as Ux, {}, retrieveResultFailure); sandbox.stub(formatter, 'isSuccess').returns(false); formatter.display(); @@ -124,7 +123,7 @@ describe('PullFormatter', () => { it('should output as expected for warnings', async () => { process.exitCode = 0; - const formatter = new PullResultFormatter(logger, ux as UX, {}, retrieveResultWarnings); + const formatter = new PullResultFormatter(ux as Ux, {}, retrieveResultWarnings); formatter.display(); // Should call styledHeader for warnings and the standard "Retrieved Source" header expect(styledHeaderStub.calledTwice).to.equal(true); @@ -138,7 +137,7 @@ describe('PullFormatter', () => { it('should output a message when no results were returned', async () => { process.exitCode = 0; - const formatter = new PullResultFormatter(logger, ux as UX, {}, retrieveResultEmpty); + const formatter = new PullResultFormatter(ux as Ux, {}, retrieveResultEmpty); formatter.display(); expect(styledHeaderStub.called).to.equal(true); expect(logStub.called).to.equal(true); diff --git a/test/formatters/pushResultFormatter.test.ts b/test/formatters/pushResultFormatter.test.ts index 212f0a764..e348ca70a 100644 --- a/test/formatters/pushResultFormatter.test.ts +++ b/test/formatters/pushResultFormatter.test.ts @@ -5,23 +5,22 @@ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ import { expect } from 'chai'; -import { Logger } from '@salesforce/core'; -import { UX } from '@salesforce/command'; import * as sinon from 'sinon'; import { stubInterface } from '@salesforce/ts-sinon'; import { DeployResult } from '@salesforce/source-deploy-retrieve'; +import { Ux } from '@salesforce/sf-plugins-core'; +import { TestContext } from '@salesforce/core/lib/testSetup'; import { getDeployResult } from '../commands/source/deployResponses'; import { PushResultFormatter, mergeReplacements } from '../../src/formatters/source/pushResultFormatter'; describe('PushResultFormatter', () => { - const logger = Logger.childFromRoot('deployTestLogger').useMemoryLogging(); const deployResultSuccess = [getDeployResult('successSync')]; const deployResultSuccessWithReplacements = [ { ...getDeployResult('successSync'), replacements: new Map([['foo', ['bar', 'baz']]]) }, ] as DeployResult[]; const deployResultFailure = [getDeployResult('failed')]; - const sandbox = sinon.createSandbox(); + const sandbox = new TestContext().SANDBOX; let uxMock; let tableStub: sinon.SinonStub; @@ -29,7 +28,7 @@ describe('PushResultFormatter', () => { beforeEach(() => { tableStub = sandbox.stub(); headerStub = sandbox.stub(); - uxMock = stubInterface(sandbox, { + uxMock = stubInterface(sandbox, { table: tableStub, styledHeader: headerStub, }); @@ -53,7 +52,7 @@ describe('PushResultFormatter', () => { }; it('returns expected json for success', () => { process.exitCode = 0; - const formatter = new PushResultFormatter(logger, new UX(logger), {}, deployResultSuccess); + const formatter = new PushResultFormatter(uxMock as Ux, {}, deployResultSuccess); expect(formatter.getJson().pushedSource).to.deep.equal([ { filePath: 'classes/ProductController.cls', @@ -65,7 +64,7 @@ describe('PushResultFormatter', () => { }); it('returns expected json for success with replaements', () => { process.exitCode = 0; - const formatter = new PushResultFormatter(logger, new UX(logger), {}, deployResultSuccessWithReplacements); + const formatter = new PushResultFormatter(uxMock as Ux, {}, deployResultSuccessWithReplacements); const result = formatter.getJson(); expect(result.pushedSource).to.deep.equal([ { @@ -80,7 +79,7 @@ describe('PushResultFormatter', () => { }); }); it('returns expected json for failure', () => { - const formatter = new PushResultFormatter(logger, new UX(logger), {}, deployResultFailure); + const formatter = new PushResultFormatter(uxMock as Ux, {}, deployResultFailure); process.exitCode = 1; try { @@ -98,23 +97,18 @@ describe('PushResultFormatter', () => { describe('json with quiet', () => { it('honors quiet flag for json successes', () => { process.exitCode = 0; - const formatter = new PushResultFormatter(logger, new UX(logger), { quiet: true }, deployResultSuccess); + const formatter = new PushResultFormatter(uxMock as Ux, { quiet: true }, deployResultSuccess); expect(formatter.getJson().pushedSource).to.deep.equal([]); expect(formatter.getJson().replacements).to.be.undefined; }); it('omits replacements', () => { process.exitCode = 0; - const formatter = new PushResultFormatter( - logger, - new UX(logger), - { quiet: true }, - deployResultSuccessWithReplacements - ); + const formatter = new PushResultFormatter(uxMock as Ux, { quiet: true }, deployResultSuccessWithReplacements); expect(formatter.getJson().pushedSource).to.deep.equal([]); expect(formatter.getJson().replacements).to.be.undefined; }); it('honors quiet flag for json failure', () => { - const formatter = new PushResultFormatter(logger, new UX(logger), { quiet: true }, deployResultFailure); + const formatter = new PushResultFormatter(uxMock as Ux, { quiet: true }, deployResultFailure); try { formatter.getJson(); throw new Error('should have thrown'); @@ -129,14 +123,14 @@ describe('PushResultFormatter', () => { describe('human output', () => { it('returns expected output for success', () => { process.exitCode = 0; - const formatter = new PushResultFormatter(logger, uxMock as UX, {}, deployResultSuccess); + const formatter = new PushResultFormatter(uxMock as Ux, {}, deployResultSuccess); formatter.display(); expect(headerStub.callCount, JSON.stringify(headerStub.args)).to.equal(1); expect(tableStub.callCount, JSON.stringify(tableStub.args)).to.equal(1); }); it('returns expected output for success with replacements', () => { process.exitCode = 0; - const formatter = new PushResultFormatter(logger, uxMock as UX, {}, deployResultSuccessWithReplacements); + const formatter = new PushResultFormatter(uxMock as Ux, {}, deployResultSuccessWithReplacements); formatter.display(); expect(headerStub.callCount, JSON.stringify(headerStub.args)).to.equal(2); expect(headerStub.args[0][0]).to.include('Pushed Source'); @@ -150,7 +144,7 @@ describe('PushResultFormatter', () => { deployFailure.response.details.componentFailures = []; deployFailure.response.details.componentSuccesses = []; delete deployFailure.response.details.runTestResult; - const formatter = new PushResultFormatter(logger, uxMock as UX, {}, [deployFailure]); + const formatter = new PushResultFormatter(uxMock as Ux, {}, [deployFailure]); sandbox.stub(formatter, 'isSuccess').returns(false); try { @@ -166,7 +160,7 @@ describe('PushResultFormatter', () => { describe('quiet', () => { it('does not display successes for quiet', () => { process.exitCode = 0; - const formatter = new PushResultFormatter(logger, uxMock as UX, { quiet: true }, deployResultSuccess); + const formatter = new PushResultFormatter(uxMock as Ux, { quiet: true }, deployResultSuccess); formatter.display(); expect(headerStub.callCount, JSON.stringify(headerStub.args)).to.equal(0); expect(formatter.getJson().pushedSource).to.deep.equal([]); @@ -174,7 +168,7 @@ describe('PushResultFormatter', () => { }); it('displays errors and throws for quiet', () => { process.exitCode = 1; - const formatter = new PushResultFormatter(logger, uxMock as UX, { quiet: true }, deployResultFailure); + const formatter = new PushResultFormatter(uxMock as Ux, { quiet: true }, deployResultFailure); try { formatter.display(); throw new Error('should have thrown'); diff --git a/test/formatters/retrieveResultFormatter.test.ts b/test/formatters/retrieveResultFormatter.test.ts index 24d662755..1cc111e83 100644 --- a/test/formatters/retrieveResultFormatter.test.ts +++ b/test/formatters/retrieveResultFormatter.test.ts @@ -8,16 +8,16 @@ import { join, relative } from 'path'; import * as sinon from 'sinon'; import { expect } from 'chai'; -import { Logger } from '@salesforce/core'; -import { UX } from '@salesforce/command'; import { FileResponse } from '@salesforce/source-deploy-retrieve'; import { cloneJson, ensureArray } from '@salesforce/kit'; import { stubInterface } from '@salesforce/ts-sinon'; +import { Ux } from '@salesforce/sf-plugins-core'; +import { TestContext } from '@salesforce/core/lib/testSetup'; import { getRetrieveResult } from '../commands/source/retrieveResponses'; import { RetrieveCommandResult, RetrieveResultFormatter } from '../../src/formatters/retrieveResultFormatter'; describe('RetrieveResultFormatter', () => { - const sandbox = sinon.createSandbox(); + const sandbox = new TestContext().SANDBOX; const retrieveResultSuccess = getRetrieveResult('success'); const retrieveResultFailure = getRetrieveResult('failed'); @@ -25,7 +25,6 @@ describe('RetrieveResultFormatter', () => { const retrieveResultEmpty = getRetrieveResult('empty'); const retrieveResultWarnings = getRetrieveResult('warnings'); - const logger = Logger.childFromRoot('retrieveTestLogger').useMemoryLogging(); let ux; let logStub: sinon.SinonStub; let styledHeaderStub: sinon.SinonStub; @@ -43,7 +42,7 @@ describe('RetrieveResultFormatter', () => { logStub = sandbox.stub(); styledHeaderStub = sandbox.stub(); tableStub = sandbox.stub(); - ux = stubInterface(sandbox, { + ux = stubInterface(sandbox, { log: logStub, styledHeader: styledHeaderStub, table: tableStub, @@ -62,7 +61,7 @@ describe('RetrieveResultFormatter', () => { warnings: [], response: cloneJson(retrieveResultSuccess.response), }; - const formatter = new RetrieveResultFormatter(logger, ux as UX, {}, retrieveResultSuccess); + const formatter = new RetrieveResultFormatter(ux as Ux, {}, retrieveResultSuccess); expect(formatter.getJson()).to.deep.equal(expectedSuccessResults); }); @@ -73,7 +72,7 @@ describe('RetrieveResultFormatter', () => { warnings: [], response: cloneJson(retrieveResultFailure.response), }; - const formatter = new RetrieveResultFormatter(logger, ux as UX, {}, retrieveResultFailure); + const formatter = new RetrieveResultFormatter(ux as Ux, {}, retrieveResultFailure); expect(formatter.getJson()).to.deep.equal(expectedFailureResults); }); @@ -84,7 +83,7 @@ describe('RetrieveResultFormatter', () => { warnings: [], response: cloneJson(retrieveResultInProgress.response), }; - const formatter = new RetrieveResultFormatter(logger, ux as UX, {}, retrieveResultInProgress); + const formatter = new RetrieveResultFormatter(ux as Ux, {}, retrieveResultInProgress); expect(formatter.getJson()).to.deep.equal(expectedInProgressResults); }); @@ -96,7 +95,7 @@ describe('RetrieveResultFormatter', () => { warnings: [], response: cloneJson(retrieveResultSuccess.response), }; - const formatter = new RetrieveResultFormatter(logger, ux as UX, { packages: [testPkg] }, retrieveResultSuccess); + const formatter = new RetrieveResultFormatter(ux as Ux, { packages: [testPkg] }, retrieveResultSuccess); expect(formatter.getJson()).to.deep.equal(expectedSuccessResults); }); @@ -109,14 +108,14 @@ describe('RetrieveResultFormatter', () => { warnings, response: cloneJson(retrieveResultWarnings.response), }; - const formatter = new RetrieveResultFormatter(logger, ux as UX, {}, retrieveResultWarnings); + const formatter = new RetrieveResultFormatter(ux as Ux, {}, retrieveResultWarnings); expect(formatter.getJson()).to.deep.equal(expectedSuccessResults); }); }); describe('display', () => { it('should output as expected for a success', async () => { - const formatter = new RetrieveResultFormatter(logger, ux as UX, {}, retrieveResultSuccess); + const formatter = new RetrieveResultFormatter(ux as Ux, {}, retrieveResultSuccess); formatter.display(); expect(styledHeaderStub.called).to.equal(true); expect(logStub.called).to.equal(false); @@ -129,7 +128,7 @@ describe('RetrieveResultFormatter', () => { it('should output as expected for an InProgress', async () => { const options = { waitTime: 33 }; - const formatter = new RetrieveResultFormatter(logger, ux as UX, options, retrieveResultInProgress); + const formatter = new RetrieveResultFormatter(ux as Ux, options, retrieveResultInProgress); formatter.display(); expect(styledHeaderStub.called).to.equal(false); expect(logStub.called).to.equal(true); @@ -140,7 +139,7 @@ describe('RetrieveResultFormatter', () => { }); it('should output as expected for a Failure', async () => { - const formatter = new RetrieveResultFormatter(logger, ux as UX, {}, retrieveResultFailure); + const formatter = new RetrieveResultFormatter(ux as Ux, {}, retrieveResultFailure); sandbox.stub(formatter, 'isSuccess').returns(false); formatter.display(); @@ -150,7 +149,7 @@ describe('RetrieveResultFormatter', () => { }); it('should output as expected for warnings', async () => { - const formatter = new RetrieveResultFormatter(logger, ux as UX, {}, retrieveResultWarnings); + const formatter = new RetrieveResultFormatter(ux as Ux, {}, retrieveResultWarnings); formatter.display(); // Should call styledHeader for warnings and the standard "Retrieved Source" header expect(styledHeaderStub.calledTwice).to.equal(true); @@ -163,7 +162,7 @@ describe('RetrieveResultFormatter', () => { }); it('should output a message when no results were returned', async () => { - const formatter = new RetrieveResultFormatter(logger, ux as UX, {}, retrieveResultEmpty); + const formatter = new RetrieveResultFormatter(ux as Ux, {}, retrieveResultEmpty); formatter.display(); expect(styledHeaderStub.called).to.equal(true); expect(logStub.called).to.equal(true); diff --git a/test/formatters/statusResultFormatter.test.ts b/test/formatters/statusResultFormatter.test.ts index 9e5bea6b9..8275e91e3 100644 --- a/test/formatters/statusResultFormatter.test.ts +++ b/test/formatters/statusResultFormatter.test.ts @@ -4,11 +4,11 @@ * Licensed under the BSD 3-Clause license. * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ -import { Logger } from '@salesforce/core'; -import { UX } from '@salesforce/command'; import { stubInterface } from '@salesforce/ts-sinon'; import { expect } from 'chai'; import * as sinon from 'sinon'; +import { Ux } from '@salesforce/sf-plugins-core'; +import { TestContext } from '@salesforce/core/lib/testSetup'; import { StatusFormatter, StatusResult } from '../../src/formatters/source/statusFormatter'; const fakeResult: StatusResult[] = [ @@ -39,9 +39,8 @@ const fakeResult: StatusResult[] = [ ]; describe('status results', () => { - const sandbox = sinon.createSandbox(); + const sandbox = new TestContext().SANDBOX; let ux; - const logger = Logger.childFromRoot('retrieveTestLogger').useMemoryLogging(); let logStub: sinon.SinonStub; let tableStub: sinon.SinonStub; @@ -49,7 +48,7 @@ describe('status results', () => { logStub = sandbox.stub(); tableStub = sandbox.stub(); - ux = stubInterface(sandbox, { + ux = stubInterface(sandbox, { log: logStub, table: tableStub, }); @@ -60,32 +59,32 @@ describe('status results', () => { }); it('returns expected json', () => { - const formatter = new StatusFormatter(logger, ux as UX, {}, fakeResult); + const formatter = new StatusFormatter(ux as Ux, {}, fakeResult); expect(formatter.getJson()).deep.equal(fakeResult); }); describe('human display', () => { it('includes ignored files without the concise option', () => { - const formatter = new StatusFormatter(logger, ux as UX, { concise: false }, fakeResult); + const formatter = new StatusFormatter(ux as Ux, { concise: false }, fakeResult); formatter.display(); expect(tableStub.callCount).to.equal(1); expect(tableStub.firstCall.args[0]).to.have.equal(fakeResult); }); it('omits ignored files with the concise option', () => { - const formatter = new StatusFormatter(logger, ux as UX, { concise: true }, fakeResult); + const formatter = new StatusFormatter(ux as Ux, { concise: true }, fakeResult); formatter.display(); expect(tableStub.callCount).to.equal(1); expect(tableStub.firstCall.args[0]).to.deep.equal([fakeResult[2]]); }); it('shows no results when there are none', () => { - const formatter = new StatusFormatter(logger, ux as UX, { concise: false }, []); + const formatter = new StatusFormatter(ux as Ux, { concise: false }, []); formatter.display(); expect(logStub.callCount).to.equal(1); expect(logStub.firstCall.args[0]).to.contain('No local or remote changes found.'); }); it('shows no results when there are none because concise omitted them', () => { - const formatter = new StatusFormatter(logger, ux as UX, { concise: true }, [fakeResult[0]]); + const formatter = new StatusFormatter(ux as Ux, { concise: true }, [fakeResult[0]]); formatter.display(); expect(logStub.callCount).to.equal(1); expect(logStub.firstCall.args[0]).to.contain('No local or remote changes found.'); diff --git a/test/hooks/diagnostics.test.ts b/test/hooks/diagnostics.test.ts index 804e8d45d..d82a5a60a 100644 --- a/test/hooks/diagnostics.test.ts +++ b/test/hooks/diagnostics.test.ts @@ -10,6 +10,7 @@ import { expect } from 'chai'; import { fromStub, StubbedType, stubInterface, stubMethod } from '@salesforce/ts-sinon'; import { SfDoctor } from '@salesforce/plugin-info'; import { ConfigAggregator, Lifecycle, Messages, Org, SfProject } from '@salesforce/core'; +import { TestContext } from '@salesforce/core/lib/testSetup'; import { hook } from '../../src/hooks/diagnostics'; const pluginName = '@salesforce/plugin-source'; @@ -23,7 +24,7 @@ const messages = Messages.load(pluginName, 'diagnostics', [ ]); describe('Doctor diagnostics', () => { - const sandbox = sinon.createSandbox(); + const sandbox = new TestContext().SANDBOX; // Stubs for: // 1. the Doctor class needed by the hook diff --git a/test/nuts/REST/deploy.mpd.nut.ts b/test/nuts/REST/deploy.mpd.nut.ts index 743c7ff70..c159a0760 100644 --- a/test/nuts/REST/deploy.mpd.nut.ts +++ b/test/nuts/REST/deploy.mpd.nut.ts @@ -114,8 +114,8 @@ context(`MPD REST Deploy NUTs [name: ${repo.name}]`, () => { }); } }); - - describe('--manifest flag', () => { + // skipping while convert is moved to PDR + describe.skip('--manifest flag', () => { for (const manifest of repo.deploy.manifest) { const toDeploy = path.normalize(manifest.toDeploy); it(`should deploy ${toDeploy}`, async () => { diff --git a/test/nuts/REST/deploy.nut.ts b/test/nuts/REST/deploy.nut.ts index a36d6d549..65f3d38ed 100644 --- a/test/nuts/REST/deploy.nut.ts +++ b/test/nuts/REST/deploy.nut.ts @@ -89,8 +89,8 @@ context(`REST Deploy NUTs [name: ${repo.name}]`, () => { }); } }); - - describe('--manifest', () => { + // skipping while convert is in PDR but unpublished + describe.skip('--manifest', () => { for (const testCase of repo.deploy.manifest) { const toDeploy = path.normalize(testCase.toDeploy); it(`should deploy ${toDeploy}`, async () => { diff --git a/test/nuts/create.nut.ts b/test/nuts/create.nut.ts deleted file mode 100644 index 1f3e27232..000000000 --- a/test/nuts/create.nut.ts +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * Licensed under the BSD 3-Clause license. - * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ - -import * as fs from 'fs'; -import { join } from 'path'; - -import { TestSession } from '@salesforce/cli-plugins-testkit'; -import { execCmd } from '@salesforce/cli-plugins-testkit'; -import { Dictionary } from '@salesforce/ts-types'; -import { expect } from 'chai'; - -describe('force:source:manifest:create', () => { - let session: TestSession; - const orgAlias = 'smc'; - - before(async () => { - session = await TestSession.create({ - project: { - gitClone: 'https://github.com/trailheadapps/dreamhouse-lwc.git', - }, - devhubAuthStrategy: 'AUTO', - scratchOrgs: [ - { - executable: 'sfdx', - config: join('config', 'project-scratch-def.json'), - alias: orgAlias, - setDefault: true, - wait: 10, - duration: 1, - }, - ], - }); - }); - - after(async () => { - await session?.clean(); - }); - - it('should produce a manifest (package.xml) for ApexClass', () => { - const result = execCmd('force:source:manifest:create --metadata ApexClass --json', { - ensureExitCode: 0, - }).jsonOutput.result; - expect(result).to.be.ok; - expect(result).to.include({ path: 'package.xml', name: 'package.xml' }); - }); - - it('should produce a manifest (destructiveChanges.xml) for ApexClass in a new directory', () => { - const apexManifest = - '\n' + - '\n' + - ' \n' + - ' *\n' + - ' ApexClass\n' + - ' \n' + - ' 51.0\n' + - ''; - - const output = join('abc', 'def'); - const outputFile = join(output, 'destructiveChanges.xml'); - const result = execCmd( - `force:source:manifest:create --metadata ApexClass --manifesttype destroy --outputdir ${output} --apiversion=51.0 --json`, - { - ensureExitCode: 0, - } - ).jsonOutput.result; - expect(result).to.be.ok; - expect(result).to.include({ path: `${outputFile}`, name: 'destructiveChanges.xml' }); - const file = fs.readFileSync(join(session.project.dir, outputFile), 'utf-8'); - expect(file).to.include(apexManifest); - }); - - it('should produce a custom manifest (myNewManifest.xml) for a sourcepath', () => { - const output = join('abc', 'def'); - const outputFile = join(output, 'myNewManifest.xml'); - const result = execCmd( - `force:source:manifest:create --metadata ApexClass --manifestname myNewManifest --outputdir ${output} --json`, - { - ensureExitCode: 0, - } - ).jsonOutput.result; - expect(result).to.be.ok; - expect(result).to.include({ path: `${outputFile}`, name: 'myNewManifest.xml' }); - }); - - it('should produce a manifest in a directory with stdout output', () => { - const output = join('abc', 'def'); - const result = execCmd(`force:source:manifest:create --metadata ApexClass --outputdir ${output}`, { - ensureExitCode: 0, - }).shellOutput; - expect(result).to.include(`successfully wrote package.xml to ${output}`); - }); - - it('should produce a manifest with stdout output', () => { - const result = execCmd('force:source:manifest:create --metadata ApexClass', { - ensureExitCode: 0, - }).shellOutput; - expect(result).to.include('successfully wrote package.xml'); - }); - - it('should produce a manifest from metadata in an org', async () => { - const manifestName = 'org-metadata.xml'; - const result = execCmd(`force:source:manifest:create --fromorg ${orgAlias} -n ${manifestName} --json`, { - ensureExitCode: 0, - }).jsonOutput.result; - expect(result).to.be.ok; - expect(result).to.include({ path: manifestName, name: manifestName }); - const stats = fs.statSync(join(session.project.dir, manifestName)); - expect(stats.isFile()).to.be.true; - expect(stats.size).to.be.greaterThan(100); - }); -}); diff --git a/test/nuts/delete.nut.ts b/test/nuts/delete.nut.ts deleted file mode 100644 index 3a5aee8d2..000000000 --- a/test/nuts/delete.nut.ts +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Copyright (c) 2020, salesforce.com, inc. - * All rights reserved. - * Licensed under the BSD 3-Clause license. - * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ - -import * as fs from 'fs'; -import * as path from 'path'; -import { expect } from 'chai'; -import { execCmd } from '@salesforce/cli-plugins-testkit'; -import { SourceTestkit } from '@salesforce/source-testkit'; -import { exec } from 'shelljs'; -import { FileResponse } from '@salesforce/source-deploy-retrieve'; -import { isNameObsolete } from './shared/isNameObsolete'; - -describe('source:delete NUTs', () => { - let testkit: SourceTestkit; - - const queryOrgAndFS = async (name: string, fsPath: string): Promise => { - // ensure the LWC is still in the org - expect(await isNameObsolete(testkit.username, 'LightningComponentBundle', name)).to.be.false; - // while the helper.js file was deleted - expect(fs.existsSync(fsPath)).to.be.false; - }; - - const createApexClass = () => { - // create and deploy an ApexClass that can be deleted without dependency issues - const apexName = 'myApexClass'; - const output = path.join('force-app', 'main', 'default', 'classes'); - const pathToClass = path.join(testkit.projectDir, output, `${apexName}.cls`); - execCmd(`force:apex:class:create --classname ${apexName} --outputdir ${output}`, { ensureExitCode: 0 }); - execCmd(`force:source:deploy -m ApexClass:${apexName}`, { ensureExitCode: 0 }); - return { apexName, output, pathToClass }; - }; - - before(async () => { - testkit = await SourceTestkit.create({ - nut: __filename, - repository: 'https://github.com/trailheadapps/dreamhouse-lwc.git', - }); - execCmd('force:source:deploy --sourcepath force-app', { ensureExitCode: 0 }); - }); - - after(async () => { - await testkit?.clean(); - }); - - it('should source:delete a static resource folder using the sourcepath param', () => { - const pathToSR = path.join(testkit.projectDir, 'force-app', 'main', 'default', 'staticresources'); - const pathToJson = path.join(pathToSR, 'sample_data_properties.json'); - const pathToXml = path.join(pathToSR, 'sample_data_properties.resource-meta.xml'); - const response = execCmd<{ deletedSource: [{ filePath: string }] }>( - `force:source:delete --json --noprompt --sourcepath ${pathToJson}`, - { - ensureExitCode: 0, - } - ).jsonOutput.result; - expect(response.deletedSource).to.have.length(2); - expect(fs.existsSync(pathToJson)).to.be.false; - expect(fs.existsSync(pathToXml)).to.be.false; - }); - - it('should source:delete an ApexClass using the metadata param', () => { - const { apexName, pathToClass } = createApexClass(); - const response = execCmd<{ deletedSource: [{ filePath: string }] }>( - `force:source:delete --json --noprompt --metadata ApexClass:${apexName}`, - { - ensureExitCode: 0, - } - ).jsonOutput.result; - expect(response.deletedSource).to.have.length(2); - expect(fs.existsSync(pathToClass)).to.be.false; - }); - - it('should source:delete all Prompts using the sourcepath param', () => { - const response = execCmd<{ deletedSource: [{ filePath: string }] }>( - `force:source:delete --json --noprompt --sourcepath ${path.join('force-app', 'main', 'default', 'prompts')}`, - { - ensureExitCode: 0, - } - ).jsonOutput.result; - const pathToPrompts = path.join(testkit.projectDir, 'force-app', 'main', 'default', 'prompts'); - expect(response.deletedSource).to.have.length(3); - // should delete directory contents - expect(fs.readdirSync(pathToPrompts).length).to.equal(0); - }); - - it('should source:delete an ApexClass using the sourcepath param', () => { - const { pathToClass } = createApexClass(); - const response = execCmd<{ deletedSource: [{ filePath: string }] }>( - `force:source:delete --json --noprompt --sourcepath ${pathToClass}`, - { - ensureExitCode: 0, - } - ).jsonOutput.result; - expect(response.deletedSource).to.have.length(2); - expect(fs.existsSync(pathToClass)).to.be.false; - }); - - it('should source:delete a remote-only ApexClass from the org', async () => { - const { apexName, pathToClass } = createApexClass(); - const query = () => JSON.parse( - exec( - `sfdx force:data:soql:query -q "SELECT IsNameObsolete FROM SourceMember WHERE MemberType='ApexClass' AND MemberName='${apexName}' LIMIT 1" -t --json`, - { silent: true } - ) - ) as { result: { records: Array<{ IsNameObsolete: boolean }> } }; - - let soql = query(); - // the ApexClass is present in the org - expect(soql.result.records[0].IsNameObsolete).to.be.false; - await testkit.deleteGlobs(['force-app/main/default/classes/myApexClass.*']); - const response = execCmd<{ deletedSource: [{ filePath: string }] }>( - `force:source:delete --json --noprompt --metadata ApexClass:${apexName}`, - { - ensureExitCode: 0, - } - ).jsonOutput.result; - // remote only delete won't have an associated filepath - expect(response.deletedSource).to.have.length(0); - expect(fs.existsSync(pathToClass)).to.be.false; - soql = query(); - // the apex class has been deleted in the org - expect(soql.result.records[0].IsNameObsolete).to.be.true; - }); - - it('should NOT delete local files with --checkonly', () => { - const { apexName, pathToClass } = createApexClass(); - const response = execCmd<{ deletedSource: [{ filePath: string }]; deletes: [{ checkOnly: boolean }] }>( - `force:source:delete --json --checkonly --noprompt --metadata ApexClass:${apexName}`, - { - ensureExitCode: 0, - } - ).jsonOutput.result; - expect(response.deletedSource).to.have.length(2); - expect(response.deletes[0].checkOnly).to.be.true; - expect(fs.existsSync(pathToClass)).to.be.true; - }); - - it('should run tests with a delete', async () => { - const { pathToClass, apexName } = createApexClass(); - const response = execCmd<{ - checkOnly: boolean; - runTestsEnabled: boolean; - }>(`force:source:delete --json --testlevel RunAllTestsInOrg --noprompt --metadata ApexClass:${apexName}`, { - ensureExitCode: 1, - }).jsonOutput.result; - // the delete operation will fail due to test failures without the 'dreamhouse' permission set assigned to the user - expect(response.runTestsEnabled).to.be.true; - expect(response.checkOnly).to.be.false; - // ensure a failed delete attempt won't delete local files - expect(fs.existsSync(pathToClass)).to.be.true; - }); - - it('should delete a bundle component and deploy as a "new" bundle', async () => { - // use the brokerCard LWC - const lwcPath = path.join(testkit.projectDir, 'force-app', 'main', 'default', 'lwc', 'brokerCard', 'helper.js'); - fs.writeFileSync(lwcPath, '//', { encoding: 'utf8' }); - execCmd(`force:source:deploy -p ${lwcPath}`); - const deleteResult = execCmd<{ deletedSource: [FileResponse] }>( - `force:source:delete -p ${lwcPath} --noprompt --json` - ).jsonOutput.result; - - expect(deleteResult.deletedSource.length).to.equal(1); - expect(deleteResult.deletedSource[0].filePath, 'filepath').to.include(lwcPath); - expect(deleteResult.deletedSource[0].fullName, 'fullname').to.include(path.join('brokerCard', 'helper.js')); - expect(deleteResult.deletedSource[0].state, 'state').to.equal('Deleted'); - expect(deleteResult.deletedSource[0].type, 'type').to.equal('LightningComponentBundle'); - - await queryOrgAndFS('brokerCard', lwcPath); - }); - - it('should delete a bundle component and deploy as a "new" bundle to two different bundles', async () => { - // use the brokerCard and daysOnMarket LWC each with a helper.js file - const lwcPath1 = path.join(testkit.projectDir, 'force-app', 'main', 'default', 'lwc', 'brokerCard', 'helper.js'); - const lwcPath2 = path.join(testkit.projectDir, 'force-app', 'main', 'default', 'lwc', 'daysOnMarket', 'helper.js'); - fs.writeFileSync(lwcPath1, '//', { encoding: 'utf8' }); - fs.writeFileSync(lwcPath2, '//', { encoding: 'utf8' }); - execCmd(`force:source:deploy -p ${lwcPath1},${lwcPath2}`); - // delete both helper.js files at the same time - const deleteResult = execCmd<{ deletedSource: FileResponse[] }>( - `force:source:delete -p "${lwcPath1},${lwcPath2}" --noprompt --json` - ).jsonOutput.result; - - expect(deleteResult.deletedSource.length).to.equal(2); - expect(deleteResult.deletedSource[0].filePath, 'filepath').to.include(lwcPath1); - expect(deleteResult.deletedSource[0].fullName, 'fullname').to.include(path.join('brokerCard', 'helper.js')); - expect(deleteResult.deletedSource[0].state, 'state').to.equal('Deleted'); - expect(deleteResult.deletedSource[0].type, 'type').to.equal('LightningComponentBundle'); - - expect(deleteResult.deletedSource[1].filePath, 'filepath').to.include(lwcPath2); - expect(deleteResult.deletedSource[1].fullName, 'fullname').to.include(path.join('daysOnMarket', 'helper.js')); - expect(deleteResult.deletedSource[1].state, 'state').to.equal('Deleted'); - expect(deleteResult.deletedSource[1].type, 'type').to.equal('LightningComponentBundle'); - - await queryOrgAndFS('brokerCard', lwcPath1); - await queryOrgAndFS('daysOnMarket', lwcPath2); - }); - - it('should delete an entire LWC', async () => { - const lwcPath = path.join(testkit.projectDir, 'force-app', 'main', 'default', 'lwc'); - const mylwcPath = path.join(lwcPath, 'mylwc'); - execCmd(`force:lightning:component:create -n mylwc --type lwc -d ${lwcPath}`); - execCmd(`force:source:deploy -p ${mylwcPath}`); - expect(await isNameObsolete(testkit.username, 'LightningComponentBundle', 'mylwc')).to.be.false; - const deleteResult = execCmd<{ deletedSource: [FileResponse] }>( - `force:source:delete -p ${mylwcPath} --noprompt --json` - ).jsonOutput.result; - - expect(deleteResult.deletedSource.length).to.equal(3); - expect(deleteResult.deletedSource[0].filePath, 'filepath').to.include(mylwcPath); - expect(deleteResult.deletedSource[0].fullName, 'fullname').to.include(path.join('mylwc')); - expect(deleteResult.deletedSource[0].state, 'state').to.equal('Deleted'); - expect(deleteResult.deletedSource[0].type, 'type').to.equal('LightningComponentBundle'); - - expect(fs.existsSync(mylwcPath)).to.be.false; - expect(await isNameObsolete(testkit.username, 'LightningComponentBundle', 'mylwc')).to.be.true; - }); - - it('a failed delete will NOT delete files locally', async () => { - const lwcPath = path.join(testkit.projectDir, 'force-app', 'main', 'default', 'lwc'); - const brokerPath = path.join(lwcPath, 'brokerCard'); - const deleteResult = execCmd<{ deletedSource: [FileResponse & { error: string }] }>( - `force:source:delete -p ${brokerPath} --noprompt --json`, - { ensureExitCode: 1 } - ).jsonOutput.result; - - expect(deleteResult.deletedSource.length).to.equal(1); - expect(deleteResult.deletedSource[0].fullName, 'fullname').to.include(path.join('brokerCard')); - expect(deleteResult.deletedSource[0].state, 'state').to.equal('Failed'); - expect(deleteResult.deletedSource[0].type, 'type').to.equal('LightningComponentBundle'); - expect(deleteResult.deletedSource[0].error, 'error').to.include( - 'Referenced by a component instance inside the Lightning page Property Record Page : Lightning Page.' - ); - - expect(await isNameObsolete(testkit.username, 'LightningComponentBundle', 'brokerCard')).to.be.false; - expect(fs.existsSync(brokerPath)).to.be.true; - }); -}); diff --git a/test/nuts/deployDestructive.nut.ts b/test/nuts/deployDestructive.nut.ts index ae854d56b..735d0f1ab 100644 --- a/test/nuts/deployDestructive.nut.ts +++ b/test/nuts/deployDestructive.nut.ts @@ -10,6 +10,7 @@ import { expect } from 'chai'; import { execCmd } from '@salesforce/cli-plugins-testkit'; import { SourceTestkit } from '@salesforce/source-testkit'; import { isNameObsolete } from './shared/isNameObsolete'; +import { cliForManifestCreate } from './shared/cliForManifestCreate'; describe('source:deploy --destructive NUTs', () => { let testkit: SourceTestkit; @@ -26,6 +27,7 @@ describe('source:deploy --destructive NUTs', () => { const createManifest = (metadata: string, manifesttype: string) => { execCmd(`force:source:manifest:create --metadata ${metadata} --manifesttype ${manifesttype}`, { ensureExitCode: 0, + cli: cliForManifestCreate, }); }; diff --git a/test/nuts/folderTypes.nut.ts b/test/nuts/folderTypes.nut.ts index fea8f038b..dbff0d965 100644 --- a/test/nuts/folderTypes.nut.ts +++ b/test/nuts/folderTypes.nut.ts @@ -11,6 +11,7 @@ import { expect } from 'chai'; import { FileResponse } from '@salesforce/source-deploy-retrieve'; import { DeployCommandResult } from '../../src/formatters/deployResultFormatter'; import { RetrieveCommandResult } from '../../src/formatters/retrieveResultFormatter'; +import { cliForManifestCreate } from './shared/cliForManifestCreate'; describe('metadata types that go in folders', () => { let session: TestSession; @@ -75,7 +76,8 @@ describe('metadata types that go in folders', () => { }, ]; - const getRelativeFileResponses = (resp: FileResponse[]) => resp.map((s) => { + const getRelativeFileResponses = (resp: FileResponse[]) => + resp.map((s) => { // grab the last 2 directories with the file only s.filePath = s.filePath.split(path.sep).slice(-3).join(path.sep); return s; @@ -83,7 +85,10 @@ describe('metadata types that go in folders', () => { it('can generate manifest for just the emailTemplates', () => { const pathToEmails = path.join('force-app', 'main', 'default', 'email'); - execCmd(`force:source:manifest:create -p ${pathToEmails} --json`, { ensureExitCode: 0 }); + execCmd(`force:source:manifest:create -p ${pathToEmails} --json`, { + ensureExitCode: 0, + cli: cliForManifestCreate, + }); expect(fs.existsSync(path.join(session.project.dir, 'package.xml'))).to.be.true; }); @@ -110,7 +115,10 @@ describe('metadata types that go in folders', () => { it('can generate manifest for just the reports', () => { expect(fs.existsSync(path.join(session.project.dir, 'package.xml'))).to.be.false; const pathToReports = path.join('force-app', 'main', 'default', 'reports'); - execCmd(`force:source:manifest:create -p ${pathToReports} --json`, { ensureExitCode: 0 }); + execCmd(`force:source:manifest:create -p ${pathToReports} --json`, { + ensureExitCode: 0, + cli: cliForManifestCreate, + }); expect(fs.existsSync(path.join(session.project.dir, 'package.xml'))).to.be.true; }); diff --git a/test/nuts/mdapi.nut.ts b/test/nuts/mdapi.nut.ts index 2c810d309..4883d372d 100644 --- a/test/nuts/mdapi.nut.ts +++ b/test/nuts/mdapi.nut.ts @@ -10,28 +10,15 @@ import * as path from 'path'; import { exec } from 'shelljs'; import { expect } from 'chai'; import { execCmd, ExecCmdResult, TestSession } from '@salesforce/cli-plugins-testkit'; -import { ComponentSet, RequestStatus, SourceComponent } from '@salesforce/source-deploy-retrieve'; +import { RequestStatus } from '@salesforce/source-deploy-retrieve'; import { create as createArchive } from 'archiver'; import { RetrieveCommandAsyncResult, RetrieveCommandResult } from 'src/formatters/mdapi/retrieveResultFormatter'; -import { ConvertCommandResult } from '../../src/formatters/mdapi/convertResultFormatter'; import { DeployCancelCommandResult } from '../../src/formatters/deployCancelResultFormatter'; import { MdDeployResult } from '../../src/formatters/mdapi/mdDeployResultFormatter'; let session: TestSession; - -const writeManifest = (manifestPath: string, contents?: string) => { - contents ??= ` - - - * - ApexClass - - 53.0 -`; - fs.writeFileSync(manifestPath, contents); -}; - -describe('1k files in mdapi:deploy', () => { +// must be skipped while source:convert is moved to PDR +describe.skip('1k files in mdapi:deploy', () => { const classCount = 1000; before(async () => { @@ -85,8 +72,8 @@ describe('1k files in mdapi:deploy', () => { expect(res.result.done).to.be.true; }); }); - -describe('mdapi NUTs', () => { +// must be skipped while source:convert is moved to PDR +describe.skip('mdapi NUTs', () => { before(async () => { session = await TestSession.create({ project: { @@ -120,99 +107,6 @@ describe('mdapi NUTs', () => { await session?.clean(); }); - describe('mdapi:convert', () => { - let convertedToMdPath: string; - - before(() => { - convertedToMdPath = path.join(session.dir, 'convertedToMdPath_dh'); - execCmd(`force:source:convert --json -d ${convertedToMdPath}`, { ensureExitCode: 0 }); - }); - - it('should convert the dreamhouse project', () => { - const convertedToSrcPath = path.join(session.dir, 'convertedToSrcPath_all'); - const result = execCmd( - `force:mdapi:convert -r ${convertedToMdPath} -d ${convertedToSrcPath} --json` - ); - expect(result.jsonOutput.status).to.equal(0); - expect(result.jsonOutput.result).to.be.an('array').with.length.greaterThan(10); - expect(fs.existsSync(convertedToSrcPath)).to.be.true; - }); - - it('should convert the dreamhouse project using metadata flag', () => { - const convertedToSrcPath = path.join(session.dir, 'convertedToSrcPath_metadataFlag'); - const result = execCmd( - `force:mdapi:convert -r ${convertedToMdPath} -d ${convertedToSrcPath} -m ApexClass --json` - ); - expect(result.jsonOutput.status).to.equal(0); - expect(result.jsonOutput.result).to.be.an('array').with.length.greaterThan(10); - expect(fs.existsSync(convertedToSrcPath)).to.be.true; - }); - - it('should convert the dreamhouse project using metadatapath flag', () => { - const convertedToSrcPath = path.join(session.dir, 'convertedToSrcPath_metadatapathFlag'); - const metadataPath = path.join(convertedToMdPath, 'classes', 'PagedResult.cls'); - const result = execCmd( - `force:mdapi:convert -r ${convertedToMdPath} -d ${convertedToSrcPath} -p ${metadataPath} --json` - ); - expect(result.jsonOutput.status).to.equal(0); - expect(result.jsonOutput.result).to.be.an('array').with.lengthOf(2); - expect(fs.existsSync(convertedToSrcPath)).to.be.true; - }); - - it('should convert the dreamhouse project using manifest flag', () => { - const convertedToSrcPath = path.join(session.dir, 'convertedToSrcPath_manifestFlag'); - const manifestPath = path.join(session.dir, 'manifestFlag-package.xml'); - writeManifest(manifestPath); - const result = execCmd( - `force:mdapi:convert -r ${convertedToMdPath} -d ${convertedToSrcPath} -x ${manifestPath} --json` - ); - expect(result.jsonOutput.status).to.equal(0); - expect(result.jsonOutput.result).to.be.an('array').with.length.greaterThan(10); - expect(fs.existsSync(convertedToSrcPath)).to.be.true; - }); - - it('should convert the dreamhouse project and back again', () => { - const convertedToSrcPath = path.join(session.dir, 'convertedToSrcPath_mdapi'); - const convertedToMd2 = path.join(session.dir, 'convertedToMdPath_dh_backAgain'); - const result = execCmd( - `force:mdapi:convert -r ${convertedToMdPath} -d ${convertedToSrcPath} --json` - ); - expect(result.jsonOutput.status).to.equal(0); - expect(fs.existsSync(convertedToSrcPath)).to.be.true; - - // Now source:convert back and compare dirs - execCmd(`force:source:convert --json -r ${convertedToSrcPath} -d ${convertedToMd2}`, { ensureExitCode: 0 }); - - const mdCompSet1 = ComponentSet.fromSource(convertedToMdPath); - const mdCompSet2 = ComponentSet.fromSource(convertedToMd2); - expect(mdCompSet1.size).to.equal(mdCompSet2.size).and.be.greaterThan(10); - for (const comp of mdCompSet1) { - const srcComp2 = mdCompSet2.find( - (c) => c.fullName === comp.fullName && c.type.name === comp.type.name - ) as SourceComponent; - expect(srcComp2).to.be.ok; - const srcComp = comp as SourceComponent; - if (srcComp.xml) { - const size1 = fs.statSync(srcComp.xml).size; - const size2 = fs.statSync(srcComp2.xml).size; - expect(size1).to.equal(size2); - } - if (srcComp.content) { - const stat1 = fs.statSync(srcComp.content); - const stat2 = fs.statSync(srcComp2.content); - - if (stat1.isFile()) { - const size1 = stat1.size; - const size2 = stat2.size; - // Content files can differ slightly due to compression so compare - // with a tolerance. - expect(size1 / size2, `file1 size: ${size1} should ~ equal file2 size: ${size2}`).to.be.within(0.98, 1.02); - } - } - } - }); - }); - describe('mdapi:deploy:cancel', () => { const cancelAssertions = (deployId: string, result: ExecCmdResult): void => { if (result.jsonOutput.status === 0) { diff --git a/test/nuts/nestedLWCProject/yarn.lock b/test/nuts/nestedLWCProject/yarn.lock index c8749f16b..0c5e4d2f6 100644 --- a/test/nuts/nestedLWCProject/yarn.lock +++ b/test/nuts/nestedLWCProject/yarn.lock @@ -937,9 +937,9 @@ "@hapi/hoek" "^9.0.0" "@sideway/formula@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" - integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== "@sideway/pinpoint@^2.0.0": version "2.0.0" diff --git a/test/nuts/partialBundleDelete.nut.ts b/test/nuts/partialBundleDelete.nut.ts index bae4aba59..95ed6b0cd 100644 --- a/test/nuts/partialBundleDelete.nut.ts +++ b/test/nuts/partialBundleDelete.nut.ts @@ -7,9 +7,8 @@ import * as path from 'path'; import * as fs from 'fs'; import { expect } from 'chai'; -import * as sinon from 'sinon'; import { TestSession, genUniqueString, TestProject, execCmd } from '@salesforce/cli-plugins-testkit'; -import { AuthInfo, Connection } from '@salesforce/core'; +import { AuthInfo, Connection, SfProject } from '@salesforce/core'; import { ComponentSet, ComponentSetBuilder, @@ -18,12 +17,13 @@ import { RetrieveSetOptions, } from '@salesforce/source-deploy-retrieve'; import { RetrieveCommandResult } from 'src/formatters/retrieveResultFormatter'; +import { TestContext } from '@salesforce/core/lib/testSetup'; import { Retrieve } from '../../src/commands/force/source/retrieve'; describe('Partial Bundle Delete Retrieves', () => { let session: TestSession; let projectPath: string; - const sandbox = sinon.createSandbox(); + const sandbox = new TestContext().SANDBOX; const scratchOrgUsername = genUniqueString('pbdr-test-%s@nut.org'); before(async () => { @@ -47,7 +47,7 @@ describe('Partial Bundle Delete Retrieves', () => { }); after(async () => { - await session?.clean(); + // await session?.clean(); }); afterEach(() => { @@ -78,6 +78,9 @@ describe('Partial Bundle Delete Retrieves', () => { const connection = await Connection.create({ authInfo: await AuthInfo.create(session.orgs.get(scratchOrgUsername)), }); + sandbox + .stub(SfProject.prototype, 'getDefaultPackage') + .returns({ name: session.project.dir, path: session.project.dir, fullPath: session.project.dir }); sandbox.stub(connection.metadata, 'retrieve').resolves(retrieveResponse); sandbox.stub(connection.metadata, 'checkRetrieveStatus').resolves(checkRetrieveStatusResponse); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment @@ -96,8 +99,7 @@ describe('Partial Bundle Delete Retrieves', () => { ); return compSet; }); - - const result = (await Retrieve.run(['-p', forgotPasswordDE, '--json'])); + const result = await Retrieve.run(['-p', forgotPasswordDE, '--json', '-o', scratchOrgUsername]); // SDR retrieval code should remove this file expect(fs.existsSync(forgotPasswordTranslationFile)).to.be.false; diff --git a/test/nuts/seeds/convert.seed.ts b/test/nuts/seeds/convert.seed.ts deleted file mode 100644 index 01bf388bf..000000000 --- a/test/nuts/seeds/convert.seed.ts +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright (c) 2020, salesforce.com, inc. - * All rights reserved. - * Licensed under the BSD 3-Clause license. - * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ -import * as fs from 'fs'; -import * as path from 'path'; -import * as shelljs from 'shelljs'; -import { getString } from '@salesforce/ts-types'; -import { SourceTestkit } from '@salesforce/source-testkit'; -import { Result } from '@salesforce/source-testkit/lib/types'; -import { TEST_REPOS_MAP } from '../testMatrix'; - -// DO NOT TOUCH. generateNuts.ts will insert these values -const REPO = TEST_REPOS_MAP.get('%REPO_URL%'); - -context('Convert NUTs [name: %REPO_NAME%]', () => { - let testkit: SourceTestkit; - - before(async () => { - testkit = await SourceTestkit.create({ - repository: REPO.gitUrl, - nut: __filename, - orgless: true, - }); - }); - - after(async () => { - try { - await testkit?.clean(); - } catch (e) { - // if the it fails to clean, don't throw so NUTs will pass - // eslint-disable-next-line no-console - console.log('Clean Failed: ', e); - } - }); - - describe('--manifest flag', () => { - let convertDir: string; - - for (const testCase of REPO.convert.manifest) { - it(`should convert ${testCase.toConvert}`, async () => { - // Generate a package.xml by converting via sourcepath - await testkit.convert({ args: `--sourcepath ${testCase.toConvert} --outputdir out1` }); - const packageXml = path.join('out1', 'package.xml'); - - await testkit.convert({ args: `--manifest ${packageXml} --outputdir out2` }); - await testkit.expect.directoryToHaveSomeFiles('out2'); - await testkit.expect.fileToExist(path.join('out2', 'package.xml')); - await testkit.expect.filesToBeConverted('out2', testCase.toVerify); - }); - - afterEach(() => { - if (convertDir) { - shelljs.rm('-rf', convertDir); - } - }); - } - - for (const testCase of REPO.convert.manifest) { - it(`should convert ${testCase.toConvert} to default output dir`, async () => { - // Generate a package.xml by converting via sourcepath - await testkit.convert({ args: `--sourcepath ${testCase.toConvert}` }); - // should be like metadataPackage_1628780058561 - convertDir = fs.readdirSync(testkit.projectDir).find((files) => files.startsWith('metadataPackage')); - const packageXml = path.join(convertDir, 'package.xml'); - - await testkit.convert({ args: `--manifest ${packageXml} --outputdir out2` }); - await testkit.expect.directoryToHaveSomeFiles('out2'); - await testkit.expect.fileToExist(path.join('out2', 'package.xml')); - await testkit.expect.filesToBeConverted('out2', testCase.toVerify); - }); - - afterEach(() => { - if (convertDir) { - shelljs.rm('-rf', convertDir); - } - }); - } - - for (const testCase of REPO.convert.manifest) { - it(`should convert ${testCase.toConvert} with packagename `, async () => { - const packageName = 'myPackage'; - // Generate a package.xml by converting via sourcepath - await testkit.convert({ - args: `--sourcepath ${testCase.toConvert} --packagename ${packageName} --outputdir out1`, - }); - const packageXml = path.join('out1', 'package.xml'); - - await testkit.convert({ args: `--manifest ${packageXml} --outputdir out2` }); - await testkit.expect.directoryToHaveSomeFiles('out2'); - await testkit.expect.fileToExist(path.join('out2', 'package.xml')); - await testkit.expect.filesToNotExist([path.join('out1', packageName, 'package.xml')]); - await testkit.expect.filesToBeConverted('out2', testCase.toVerify); - }); - - afterEach(() => { - if (convertDir) { - shelljs.rm('-rf', convertDir); - } - }); - } - - it('should throw an error if the package.xml is not valid', async () => { - const convert = (await testkit.convert({ args: '--manifest DOES_NOT_EXIST.xml', exitCode: 1 })) as Result<{ - id: string; - result: { id: string }; - }>; - testkit.expect.errorToHaveName(convert, 'SfError'); - }); - }); - - describe('--metadata flag', () => { - let convertDir: string; - - for (const testCase of REPO.convert.metadata) { - it(`should convert ${testCase.toConvert}`, async () => { - const res = await testkit.convert({ - args: `--metadata ${testCase.toConvert} --outputdir out`, - exitCode: 0, - }); - - convertDir = path.relative(process.cwd(), getString(res, 'result.location') || ''); - await testkit.expect.directoryToHaveSomeFiles(convertDir); - await testkit.expect.fileToExist(path.join(convertDir, 'package.xml')); - await testkit.expect.filesToBeConverted(convertDir, testCase.toVerify); - }); - } - - afterEach(() => { - if (convertDir) { - shelljs.rm('-rf', convertDir); - } - }); - - it('should throw an error if the metadata is not valid', async () => { - const convert = (await testkit.convert({ args: '--metadata DOES_NOT_EXIST', exitCode: 1 })) as Result<{ - id: string; - result: { id: string }; - }>; - - testkit.expect.errorToHaveName(convert, 'SfError'); - testkit.expect.errorToHaveMessage(convert, 'specified metadata type is unsupported'); - }); - }); - - describe('--sourcepath flag', () => { - let convertDir: string; - - for (const testCase of REPO.convert.sourcepath) { - it(`should convert ${testCase.toConvert}`, async () => { - const toConvert = path.normalize(testCase.toConvert); - const res = await testkit.convert({ - args: `--sourcepath ${toConvert} --outputdir out`, - exitCode: 0, - }); - - convertDir = path.relative(process.cwd(), getString(res, 'result.location')); - await testkit.expect.directoryToHaveSomeFiles(convertDir); - await testkit.expect.fileToExist(path.join(convertDir, 'package.xml')); - await testkit.expect.filesToBeConverted(convertDir, testCase.toVerify); - }); - } - - afterEach(() => { - if (convertDir) { - shelljs.rm('-rf', convertDir); - } - }); - - it('should throw an error if the sourcepath is not valid', async () => { - const convert = (await testkit.convert({ args: '--sourcepath DOES_NOT_EXIST', exitCode: 1 })) as Result<{ - id: string; - result: { id: string }; - }>; - - testkit.expect.errorToHaveName(convert, 'SfError'); - testkit.expect.errorToHaveMessage(convert, 'not a valid source file path'); - }); - }); -}); diff --git a/test/nuts/seeds/deploy.manifest.seed.ts b/test/nuts/seeds/deploy.manifest.seed.ts index c727e0c33..16ef1508a 100644 --- a/test/nuts/seeds/deploy.manifest.seed.ts +++ b/test/nuts/seeds/deploy.manifest.seed.ts @@ -38,8 +38,8 @@ context('Deploy manifest NUTs [name: %REPO_NAME%]', () => { console.log('Clean Failed: ', e); } }); - - describe('--manifest flag', () => { + // skipping while convert is in PDR and not published + describe.skip('--manifest flag', () => { for (const testCase of REPO.deploy.manifest) { const toDeploy = path.normalize(testCase.toDeploy); it(`should deploy ${toDeploy}`, async () => { diff --git a/test/nuts/seeds/retrieve.manifest.seed.ts b/test/nuts/seeds/retrieve.manifest.seed.ts index 243c2f5f5..c55cf0fa3 100644 --- a/test/nuts/seeds/retrieve.manifest.seed.ts +++ b/test/nuts/seeds/retrieve.manifest.seed.ts @@ -34,8 +34,8 @@ context('Retrieve manifest NUTs [name: %REPO_NAME%]', () => { console.log('Clean Failed: ', e); } }); - - describe('--manifest flag', () => { + // skipping while source:convert is moved to PDR and not published + describe.skip('--manifest flag', () => { let i = 0; for (const testCase of REPO.retrieve.manifest) { const toRetrieve = path.normalize(testCase.toRetrieve); diff --git a/test/nuts/shared/cliForManifestCreate.ts b/test/nuts/shared/cliForManifestCreate.ts new file mode 100644 index 000000000..27d5d40d9 --- /dev/null +++ b/test/nuts/shared/cliForManifestCreate.ts @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2023, salesforce.com, inc. + * All rights reserved. + * Licensed under the BSD 3-Clause license. + * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause + */ + +// used temporarily while manifest create is moved out of plugin-source +// TODO: remove this and have these use the "ambient" executable once sf has a manifest generate +export const cliForManifestCreate = 'sfdx'; diff --git a/test/nuts/territory2.nut.ts b/test/nuts/territory2.nut.ts index ed543ea92..cc2ebb6b3 100644 --- a/test/nuts/territory2.nut.ts +++ b/test/nuts/territory2.nut.ts @@ -10,6 +10,7 @@ import { execCmd, TestSession } from '@salesforce/cli-plugins-testkit'; import { expect } from 'chai'; import { DeployCommandResult } from '../../src/formatters/deployResultFormatter'; import { RetrieveCommandResult } from '../../src/formatters/retrieveResultFormatter'; +import { cliForManifestCreate } from './shared/cliForManifestCreate'; describe('territories', () => { let session: TestSession; @@ -47,7 +48,7 @@ describe('territories', () => { }); it('can generate manifest for territory types', () => { - execCmd('force:source:manifest:create -p force-app --json', { ensureExitCode: 0 }); + execCmd('force:source:manifest:create -p force-app --json', { ensureExitCode: 0, cli: cliForManifestCreate }); expect(fs.existsSync(path.join(session.project.dir, 'package.xml'))).to.be.true; }); diff --git a/test/nuts/trackingCommands/consts.ts b/test/nuts/trackingCommands/consts.ts index 207e31bcd..e5c8eea4a 100644 --- a/test/nuts/trackingCommands/consts.ts +++ b/test/nuts/trackingCommands/consts.ts @@ -4,4 +4,4 @@ * Licensed under the BSD 3-Clause license. * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ -export const itemsInEBikesPush = 243; +export const itemsInEBikesPush = 242; diff --git a/test/nuts/trackingCommands/deployRetrieveDelete.nut.ts b/test/nuts/trackingCommands/deployRetrieveDelete.nut.ts index ad99dc741..08bde6c9c 100644 --- a/test/nuts/trackingCommands/deployRetrieveDelete.nut.ts +++ b/test/nuts/trackingCommands/deployRetrieveDelete.nut.ts @@ -91,24 +91,4 @@ describe('-t flag for deploy, retrieve, and delete', () => { ).to.have.length(0); }); }); - describe('delete', () => { - it('can delete remote and local metadata with tracking', async () => { - const result = execCmd('force:source:delete -m ApexClass:FooBarTest -t --noprompt --json', { - ensureExitCode: 0, - }).jsonOutput.result; - expect(result.deletedSource).to.be.an.instanceof(Array).with.length.greaterThan(0); - expect(result.deletedSource.every((item) => item.type === 'ApexClass')).to.equal(true); - }); - - it('sees no local or remote changes', () => { - const result = execCmd('force:source:status --json', { - ensureExitCode: 0, - }).jsonOutput.result; - // this delete WILL change the admin profile, so remove that from the status result - expect( - result.filter((r) => r.type === 'ApexClass'), - JSON.stringify(result) - ).to.have.length(0); - }); - }); }); diff --git a/test/nuts/trackingCommands/resetClear.nut.ts b/test/nuts/trackingCommands/resetClear.nut.ts deleted file mode 100644 index 88b646837..000000000 --- a/test/nuts/trackingCommands/resetClear.nut.ts +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (c) 2020, salesforce.com, inc. - * All rights reserved. - * Licensed under the BSD 3-Clause license. - * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause - */ - -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ - -import * as path from 'path'; -import * as fs from 'fs'; - -import { execCmd, TestSession } from '@salesforce/cli-plugins-testkit'; -import { expect } from 'chai'; -import { AuthInfo, Connection } from '@salesforce/core'; -import { StatusResult } from '../../../src/formatters/source/statusFormatter'; -import { SourceTrackingClearResult } from '../../../src/commands/force/source/tracking/clear'; - -let session: TestSession; -let orgId: string; -let trackingFileFolder: string; -let conn: Connection; - -// copy/pasted here to avoid exporting this type from STL -type MemberRevision = { - serverRevisionCounter: number; - lastRetrievedFromServer: number | null; - memberType: string; - isNameObsolete: boolean; -}; - -const getRevisionsAsArray = async (): Promise => { - const revisionFile = JSON.parse( - await fs.promises.readFile(path.join(trackingFileFolder, 'maxRevision.json'), 'utf8') - ) as Record; - return Reflect.ownKeys(revisionFile.sourceMembers).map((key) => revisionFile.sourceMembers[key] as MemberRevision); -}; - -describe('reset and clear', () => { - before(async () => { - session = await TestSession.create({ - project: { - gitClone: 'https://github.com/trailheadapps/ebikes-lwc', - }, - devhubAuthStrategy: 'AUTO', - scratchOrgs: [ - { - executable: 'sfdx', - duration: 1, - setDefault: true, - config: path.join('config', 'project-scratch-def.json'), - }, - ], - }); - - orgId = session.orgs.get('default').orgId; - trackingFileFolder = path.join(session?.project.dir, '.sf', 'orgs', orgId); - conn = await Connection.create({ - authInfo: await AuthInfo.create({ - username: session.orgs.get('default').username, - }), - }); - }); - - after(async () => { - await session?.zip(undefined, 'artifacts'); - await session?.clean(); - }); - - describe('clearing tracking', () => { - it('runs status to start tracking', () => { - const result = execCmd('force:source:status --json', { - ensureExitCode: 0, - }).jsonOutput.result; - expect(result).to.have.length.greaterThan(100); // ebikes is big - }); - - it('local tracking file exists', () => { - expect(fs.existsSync(path.join(trackingFileFolder, 'localSourceTracking'))).to.equal(true); - }); - it('remote tracking file exists', () => { - expect(fs.existsSync(path.join(trackingFileFolder, 'maxRevision.json'))).to.equal(true); - }); - it('runs clear', () => { - const clearResult = execCmd('force:source:tracking:clear --noprompt --json', { - ensureExitCode: 0, - }).jsonOutput.result; - expect(clearResult.clearedFiles.some((file) => file.includes('maxRevision.json'))).to.equal(true); - }); - it('local tracking is gone', () => { - expect(fs.existsSync(path.join(trackingFileFolder, 'localSourceTracking'))).to.equal(false); - }); - it('remote tracking is gone', () => { - expect(fs.existsSync(path.join(trackingFileFolder, 'maxRevision.json'))).to.equal(false); - }); - }); - - describe('reset remote tracking', () => { - let lowestRevision = 0; - it('creates 2 apex classes to get some tracking going', async () => { - const createResult = await conn.tooling.create('ApexClass', { - Name: 'CreatedClass', - Body: 'public class CreatedClass {}', - Status: 'Active', - }); - const createResult2 = await conn.tooling.create('ApexClass', { - Name: 'CreatedClass2', - Body: 'public class CreatedClass2 {}', - Status: 'Active', - }); - [createResult, createResult2].map((result) => { - if (!Array.isArray(result)) { - expect(result.success).to.equal(true); - } - }); - // gets tracking files from server - execCmd('force:source:status --json --remote', { ensureExitCode: 0 }); - const revisions = await getRevisionsAsArray(); - const revisionFile = JSON.parse( - await fs.promises.readFile(path.join(trackingFileFolder, 'maxRevision.json'), 'utf8') - ); - lowestRevision = revisions.reduce( - (previousValue: number, revision) => Math.min(previousValue, revision.serverRevisionCounter), - revisionFile.serverMaxRevisionCounter - ); - expect(lowestRevision).lessThan(revisionFile.serverMaxRevisionCounter as number); - // revisions are not retrieved - revisions.map((revision) => { - expect(revision.serverRevisionCounter).to.not.equal(revision.lastRetrievedFromServer); - expect(revision.lastRetrievedFromServer).to.equal(null); - }); - }); - it('can reset to a known revision', async () => { - execCmd(`force:source:tracking:reset --revision ${lowestRevision} --noprompt`, { - ensureExitCode: 0, - }); - const revisions = await getRevisionsAsArray(); - - revisions.map((revision) => { - revision.serverRevisionCounter === lowestRevision - ? expect(revision.serverRevisionCounter).to.equal(revision.lastRetrievedFromServer) - : expect(revision.serverRevisionCounter).to.not.equal(revision.lastRetrievedFromServer); - }); - }); - - it('can reset to a non-specified revision (resets everything)', async () => { - execCmd(`force:source:tracking:reset --revision ${lowestRevision} --noprompt`, { - ensureExitCode: 0, - }); - const revisions = await getRevisionsAsArray(); - - revisions.map((revision) => { - expect(revision.serverRevisionCounter === revision.lastRetrievedFromServer).to.equal(true); - }); - }); - }); -}); diff --git a/test/nuts/translation.nut.ts b/test/nuts/translation.nut.ts index 41281df48..e8c6c79f8 100644 --- a/test/nuts/translation.nut.ts +++ b/test/nuts/translation.nut.ts @@ -12,6 +12,7 @@ import { PushResponse } from 'src/formatters/source/pushResultFormatter'; import { DeployCommandResult } from '../../src/formatters/deployResultFormatter'; import { RetrieveCommandResult } from '../../src/formatters/retrieveResultFormatter'; import { StatusResult } from '../../src/formatters/source/statusFormatter'; +import { cliForManifestCreate } from './shared/cliForManifestCreate'; describe('translations', () => { let session: TestSession; @@ -80,7 +81,7 @@ describe('translations', () => { }); it('can generate manifest for translation types', async () => { - execCmd('force:source:manifest:create -p force-app --json', { ensureExitCode: 0 }); + execCmd('force:source:manifest:create -p force-app --json', { ensureExitCode: 0, cli: cliForManifestCreate }); expect(fs.existsSync(path.join(session.project.dir, 'package.xml'))).to.be.true; }); @@ -187,7 +188,7 @@ describe('translations', () => { describe('mdapi format', () => { it('can convert COT/CFTs correctly', () => { - execCmd('force:source:convert --outputdir mdapi', { ensureExitCode: 0 }); + execCmd('force:source:convert --outputdir mdapi', { ensureExitCode: 0, cli: cliForManifestCreate }); // the CFTs shouldn't be written to mdapi format expect(fs.existsSync(path.join(session.project.dir, 'mdapi', 'fields'))).to.be.false; expect(fs.existsSync(path.join(session.project.dir, 'mdapi', 'objectTranslations'))).to.be.true; diff --git a/yarn.lock b/yarn.lock index 3855d7507..0c58bcfa1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,13 +10,6 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" @@ -148,7 +141,7 @@ "@babel/traverse" "^7.20.1" "@babel/types" "^7.20.0" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": +"@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== @@ -402,20 +395,12 @@ esquery "^1.4.0" jsdoc-type-pratt-parser "~3.1.0" -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== +"@eslint-community/eslint-utils@^4.2.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.3.0.tgz#a556790523a351b4e47e9d385f47265eaaf9780a" + integrity sha512-v3oplH6FYCULtFuCeqyuTd9D2WKO937Dxdq+GmHOLL72TTRriLxz2VLlNfkZRsvj6PKnOPAtuT6dwrs/pA5DvA== dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" + eslint-visitor-keys "^3.3.0" "@eslint/eslintrc@^1.4.1": version "1.4.1" @@ -446,21 +431,12 @@ debug "^4.1.1" minimatch "^3.0.5" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" - "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.0", "@humanwhocodes/object-schema@^1.2.1": +"@humanwhocodes/object-schema@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== @@ -712,42 +688,6 @@ supports-color "^8.1.1" tslib "^2" -"@oclif/command@^1.8.14", "@oclif/command@^1.8.15": - version "1.8.20" - resolved "https://registry.npmjs.org/@oclif/command/-/command-1.8.20.tgz#7e28387be8744145e1b2ee7db89275bc7f708f2f" - integrity sha512-BHM9byujY0kf0PiRorIyp99K50cA3i6Hyro0+TPpFFx+4QM+PyQ5vMHO/TG5wkEP8tIivNRs24bF8QVyJru25g== - dependencies: - "@oclif/config" "^1.18.2" - "@oclif/errors" "^1.3.6" - "@oclif/help" "^1.0.1" - "@oclif/parser" "^3.8.9" - debug "^4.1.1" - semver "^7.3.8" - -"@oclif/config@1.18.2": - version "1.18.2" - resolved "https://registry.npmjs.org/@oclif/config/-/config-1.18.2.tgz#5bfe74a9ba6a8ca3dceb314a81bd9ce2e15ebbfe" - integrity sha512-cE3qfHWv8hGRCP31j7fIS7BfCflm/BNZ2HNqHexH+fDrdF2f1D5S8VmXWLC77ffv3oDvWyvE9AZeR0RfmHCCaA== - dependencies: - "@oclif/errors" "^1.3.3" - "@oclif/parser" "^3.8.0" - debug "^4.1.1" - globby "^11.0.1" - is-wsl "^2.1.1" - tslib "^2.0.0" - -"@oclif/config@1.18.6", "@oclif/config@^1.18.2": - version "1.18.6" - resolved "https://registry.npmjs.org/@oclif/config/-/config-1.18.6.tgz#37367026b3110a2f04875509b1920a8ee4489f21" - integrity sha512-OWhCpdu4QqggOPX1YPZ4XVmLLRX+lhGjXV6RNA7sogOwLqlEmSslnN/lhR5dkhcWZbKWBQH29YCrB3LDPRu/IA== - dependencies: - "@oclif/errors" "^1.3.6" - "@oclif/parser" "^3.8.9" - debug "^4.3.4" - globby "^11.1.0" - is-wsl "^2.1.1" - tslib "^2.3.1" - "@oclif/core@^1.20.3", "@oclif/core@^1.20.4", "@oclif/core@^1.23.1", "@oclif/core@^1.9.9": version "1.26.1" resolved "https://registry.yarnpkg.com/@oclif/core/-/core-1.26.1.tgz#26e46c96143d3e2b1dd9bd558ae1653fe9a4f3fa" @@ -782,10 +722,10 @@ widest-line "^3.1.0" wrap-ansi "^7.0.0" -"@oclif/core@^2.0.10", "@oclif/core@^2.0.3", "@oclif/core@^2.0.7", "@oclif/core@^2.0.8", "@oclif/core@^2.2.1", "@oclif/core@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@oclif/core/-/core-2.3.0.tgz#f63071a8116118ae02e457ac1d28a7649904aecf" - integrity sha512-xA53NIZDqz9nuxyCMA5Pz5b1RSgyTNWbtOdwbUJeZa/ajtVrVO9yA8k/4vJRsffUuLyP8tNbh4cH3DDZKwIFnw== +"@oclif/core@^2.0.7", "@oclif/core@^2.1.7", "@oclif/core@^2.3.0", "@oclif/core@^2.3.1", "@oclif/core@^2.4.0", "@oclif/core@^2.6.3": + version "2.6.3" + resolved "https://registry.yarnpkg.com/@oclif/core/-/core-2.6.3.tgz#2f02e4510eb76d694d00c488b3ea957436289f51" + integrity sha512-kLwg+lmeZt4vfUlYN1XI8bPkcNBozfPOqciFOJMzHkPnq18lmoMu3+Xnm4wL1A9dXEyzoa5jidFhdyP/kZMBCw== dependencies: "@types/cli-progress" "^3.11.0" ansi-escapes "^4.3.2" @@ -793,7 +733,7 @@ cardinal "^2.1.1" chalk "^4.1.2" clean-stack "^3.0.1" - cli-progress "^3.11.2" + cli-progress "^3.12.0" debug "^4.3.4" ejs "^3.1.8" fs-extra "^9.1.0" @@ -811,88 +751,23 @@ strip-ansi "^6.0.1" supports-color "^8.1.1" supports-hyperlinks "^2.2.0" + ts-node "^10.9.1" tslib "^2.5.0" widest-line "^3.1.0" wordwrap "^1.0.0" wrap-ansi "^7.0.0" -"@oclif/dev-cli@^1": - version "1.26.10" - resolved "https://registry.npmjs.org/@oclif/dev-cli/-/dev-cli-1.26.10.tgz#d8df3a79009b68552f5e7f249d1d19ca52278382" - integrity sha512-dJ+II9rVXckzFvG+82PbfphMTnoqiHvsuAAbcHrLdZWPBnFAiDKhNYE0iHnA/knAC4VGXhogsrAJ3ERT5d5r2g== - dependencies: - "@oclif/command" "^1.8.15" - "@oclif/config" "^1.18.2" - "@oclif/errors" "^1.3.5" - "@oclif/plugin-help" "3.2.18" - cli-ux "5.6.7" - debug "^4.1.1" - find-yarn-workspace-root "^2.0.0" - fs-extra "^8.1" - github-slugger "^1.2.1" - lodash "^4.17.11" - normalize-package-data "^3.0.0" - qqjs "^0.3.10" - tslib "^2.0.3" - -"@oclif/errors@1.3.5": - version "1.3.5" - resolved "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.5.tgz#a1e9694dbeccab10fe2fe15acb7113991bed636c" - integrity sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ== - dependencies: - clean-stack "^3.0.0" - fs-extra "^8.1" - indent-string "^4.0.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -"@oclif/errors@1.3.6", "@oclif/errors@^1.3.3", "@oclif/errors@^1.3.5", "@oclif/errors@^1.3.6": - version "1.3.6" - resolved "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.6.tgz#e8fe1fc12346cb77c4f274e26891964f5175f75d" - integrity sha512-fYaU4aDceETd89KXP+3cLyg9EHZsLD3RxF2IU9yxahhBpspWjkWi3Dy3bTgcwZ3V47BgxQaGapzJWDM33XIVDQ== - dependencies: - clean-stack "^3.0.0" - fs-extra "^8.1" - indent-string "^4.0.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -"@oclif/help@^1.0.0", "@oclif/help@^1.0.1": - version "1.0.4" - resolved "https://registry.npmjs.org/@oclif/help/-/help-1.0.4.tgz#0c7cfd776e3cbe033cab023486ed929be0cd1c77" - integrity sha512-w3xsdZj1af/dFN7oCmvAHbHRj6L0SOO5uGXEve0LLroAJSM3DeEpzgNMjxS5RTV2gVC4RmJ/rTqmp0SRaXGiTA== - dependencies: - "@oclif/config" "1.18.6" - "@oclif/errors" "1.3.6" - chalk "^4.1.2" - indent-string "^4.0.0" - lodash "^4.17.21" - string-width "^4.2.0" - strip-ansi "^6.0.0" - widest-line "^3.1.0" - wrap-ansi "^6.2.0" - "@oclif/linewrap@^1.0.0": version "1.0.0" resolved "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz#aedcb64b479d4db7be24196384897b5000901d91" integrity sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw== -"@oclif/parser@^3.8.0", "@oclif/parser@^3.8.9": - version "3.8.9" - resolved "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.9.tgz#9399041ada7e465043f34b24f4d82a8beb68a023" - integrity sha512-1j/kThdse7yHQz6+c3v8RA1I3gD6+SGt2O7IAb/MAMoxqyBrFQDabQHH2UU4eVFGMLN7U91AiYJp11zJ9LcQAg== - dependencies: - "@oclif/errors" "^1.3.6" - "@oclif/linewrap" "^1.0.0" - chalk "^4.1.0" - tslib "^2.4.1" - -"@oclif/plugin-command-snapshot@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@oclif/plugin-command-snapshot/-/plugin-command-snapshot-3.3.4.tgz#be6b995ec5e578917ebebb21e74c5cface7b64b7" - integrity sha512-mfAfInRRaSXSHTXkmIMFzW0I4EWwdjtS3iaTxWz/anP26++sQOAFeRSEKtMQc58XzvqYbLutbywEw3dzr6trSQ== +"@oclif/plugin-command-snapshot@^3.3.7": + version "3.3.7" + resolved "https://registry.yarnpkg.com/@oclif/plugin-command-snapshot/-/plugin-command-snapshot-3.3.7.tgz#387d8ed3c184afa0185e93f5c75c54bce8edf790" + integrity sha512-nX1dy29118ndQ3eBWR9KIxYTcYyBjh41nX1LC2ZJzYdiG1JJpSNBDYYIbkKVVYOAMqjfJ5AG8qRIlQknzlObVQ== dependencies: - "@oclif/core" "^2.0.8" + "@oclif/core" "^2.3.1" chalk "^4.1.2" just-diff "^5.2.0" lodash "^4.17.21" @@ -900,29 +775,12 @@ ts-json-schema-generator "^1.2.0" tslib "^2.5.0" -"@oclif/plugin-help@3.2.18": - version "3.2.18" - resolved "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-3.2.18.tgz#f2bf6ba86719c174fc0e4c2149f73b46006bfdbd" - integrity sha512-5n5Pkz4L0duknIvFwx2Ko9Xda3miT6RZP8bgaaK3Q/9fzVBrhi4bOM0u05/OThI6V+3NsSdxYS2o1NLcXToWDg== +"@oclif/plugin-help@^5.1.19", "@oclif/plugin-help@^5.2.6": + version "5.2.6" + resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-5.2.6.tgz#c3b8f8f7608d1969fa2730c4de5166ea9a4fc952" + integrity sha512-nvpSbIOGtPIct3+OqXca3OIu5liyIynascncAXZy4JDD7z8rIGZ3NYJH2M4JhMVyGxCDZxQuLVsdALyIt67G5g== dependencies: - "@oclif/command" "^1.8.14" - "@oclif/config" "1.18.2" - "@oclif/errors" "1.3.5" - "@oclif/help" "^1.0.0" - chalk "^4.1.2" - indent-string "^4.0.0" - lodash "^4.17.21" - string-width "^4.2.0" - strip-ansi "^6.0.0" - widest-line "^3.1.0" - wrap-ansi "^6.2.0" - -"@oclif/plugin-help@^5.1.19", "@oclif/plugin-help@^5.2.2": - version "5.2.2" - resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-5.2.2.tgz#f00e60b1349c4ec62c1d6a98d3a424899373c5ad" - integrity sha512-ok8gS2phqA4MiGkjCrZPFvhNIHIp35WsvNNVUn4GL8WZYQ5mk1cZuu+IIqTZxBFZ4QDUZLVkumrhsqx3oNId9A== - dependencies: - "@oclif/core" "^2.0.7" + "@oclif/core" "^2.3.1" "@oclif/plugin-not-found@^2.3.7": version "2.3.9" @@ -947,11 +805,6 @@ lodash "^4.17.21" semver "^7.3.8" -"@oclif/screen@^1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@oclif/screen/-/screen-1.0.4.tgz#b740f68609dfae8aa71c3a6cab15d816407ba493" - integrity sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw== - "@oclif/screen@^3.0.4": version "3.0.4" resolved "https://registry.yarnpkg.com/@oclif/screen/-/screen-3.0.4.tgz#663db0ecaf23f3184e7f01886ed578060e4a7f1c" @@ -1085,28 +938,13 @@ mv "~2" safe-json-stringify "~1" -"@salesforce/cli-plugins-testkit@^3.2.15": - version "3.2.20" - resolved "https://registry.yarnpkg.com/@salesforce/cli-plugins-testkit/-/cli-plugins-testkit-3.2.20.tgz#15f0e3a50e2242c482bb89fb18464473f8cc2cbc" - integrity sha512-EOKTZQrTiyZWPUKwbjZTJf9UvLlUrnXGN2qDgi65S7OH4W/bR1syRlrVDJ8w/F5mSqKaExhGGoFviycRrWrW8g== - dependencies: - "@salesforce/core" "^3.33.1" - "@salesforce/kit" "^1.8.0" - "@salesforce/ts-types" "^1.7.2" - "@types/shelljs" "^0.8.11" - archiver "^5.2.0" - debug "^4.3.1" - shelljs "^0.8.4" - strip-ansi "6.0.1" - ts-retry-promise "^0.7.0" - -"@salesforce/cli-plugins-testkit@^3.2.23": - version "3.2.23" - resolved "https://registry.yarnpkg.com/@salesforce/cli-plugins-testkit/-/cli-plugins-testkit-3.2.23.tgz#79534870066c86c726e796261bb8d0f80088f666" - integrity sha512-nRRZiE8uozwwY9H78q4GAudg0OkqdcCF5q+sPZpyZGpKbsqiS4rQzAN15JQhu/PNGXm0DAgBrzsFZ9D/LlOu2A== +"@salesforce/cli-plugins-testkit@^3.2.15", "@salesforce/cli-plugins-testkit@^3.2.24": + version "3.2.24" + resolved "https://registry.yarnpkg.com/@salesforce/cli-plugins-testkit/-/cli-plugins-testkit-3.2.24.tgz#4a57f4ed5549ad908bc13ab05cb8c17e683f1a8a" + integrity sha512-FhP8s0aerfDax8+ZNx0u8BKG1jau+Iyci9jCcdmWlT6gcc06zQWBlRCNsRbjF9rWyiAeSEB1ObTYpVUzVQkFUw== dependencies: - "@salesforce/core" "^3.33.1" - "@salesforce/kit" "^1.8.0" + "@salesforce/core" "^3.33.6" + "@salesforce/kit" "^1.9.0" "@salesforce/ts-types" "^1.7.3" "@types/shelljs" "^0.8.11" archiver "^5.2.0" @@ -1115,16 +953,16 @@ strip-ansi "6.0.1" ts-retry-promise "^0.7.0" -"@salesforce/core@^3.23.9", "@salesforce/core@^3.24.0", "@salesforce/core@^3.32.12", "@salesforce/core@^3.33.0", "@salesforce/core@^3.33.1", "@salesforce/core@^3.33.2": - version "3.33.2" - resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-3.33.2.tgz#b84cf552312603f95cfec963d072ea03d3ddbbfe" - integrity sha512-DtkzSREDBU6BIKiL0xRlZQ1R2JLI+Lawfd4B1AI2ee7lGzurZdZU5QoRiz3AiCeH8QKqNqrVRpSZUoKnIyZ/rA== +"@salesforce/core@^3.23.9", "@salesforce/core@^3.24.0", "@salesforce/core@^3.32.12", "@salesforce/core@^3.33.1", "@salesforce/core@^3.33.4", "@salesforce/core@^3.33.5", "@salesforce/core@^3.33.6": + version "3.33.7" + resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-3.33.7.tgz#a4862dab9f9aa4fce469320a90f2b5a7e882e2a1" + integrity sha512-vHPKjYmfUPVbFZUkXzapS3zYOsHhb33xuqojAF8zipBBSv3r7reWSFuW0W0erOJi008A/FIFa1phWoECuDj9Tg== dependencies: "@salesforce/bunyan" "^2.0.0" - "@salesforce/kit" "^1.8.0" - "@salesforce/schemas" "^1.4.0" + "@salesforce/kit" "^1.9.0" + "@salesforce/schemas" "^1.5.0" "@salesforce/ts-types" "^1.7.2" - "@types/graceful-fs" "^4.1.5" + "@types/graceful-fs" "^4.1.6" "@types/semver" "^7.3.13" ajv "^8.11.2" archiver "^5.3.0" @@ -1138,19 +976,18 @@ jsonwebtoken "9.0.0" ts-retry-promise "^0.7.0" -"@salesforce/dev-config@^3.0.0", "@salesforce/dev-config@^3.0.1": +"@salesforce/dev-config@^3.0.0", "@salesforce/dev-config@^3.1.0": version "3.1.0" - resolved "https://registry.npmjs.org/@salesforce/dev-config/-/dev-config-3.1.0.tgz#8eb5b35860ff60d1c1dc3fd9329b01a28475d5b9" + resolved "https://registry.yarnpkg.com/@salesforce/dev-config/-/dev-config-3.1.0.tgz#8eb5b35860ff60d1c1dc3fd9329b01a28475d5b9" integrity sha512-cPph7ibj3DeSzWDFLcLtxOh5fmUlDUY2Ezq43n0V6auVP+l8orxRHjCExHS86SB3QKVgXkC8yYhryXiS8KF7Zw== -"@salesforce/dev-scripts@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@salesforce/dev-scripts/-/dev-scripts-3.1.1.tgz#39682a690f42d72af0419a7a74270fabd6905634" - integrity sha512-2D/cP6XRl5u3/7I12YGoGW/Wvoe41R3CDA3+usdvQ8A/bapjWrjLS8ByhWlEFhO1FRij+9LM6uFhNfVaJ4B3dg== +"@salesforce/dev-scripts@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@salesforce/dev-scripts/-/dev-scripts-4.1.2.tgz#d9d4b403ac06934c069ca16d849ff7c2e12ee773" + integrity sha512-mxpwOb818k4H04DM/GV0/ZTzK5EDovcnROI+0CnR71Fqc4gwrWBmK+jlcRtICGypC48W+myOXKXet0oySQphyA== dependencies: "@commitlint/cli" "^17.1.2" "@commitlint/config-conventional" "^17.1.0" - "@oclif/dev-cli" "^1" "@salesforce/dev-config" "^3.0.0" "@salesforce/prettier-config" "^0.0.2" "@types/chai" "^4.2.11" @@ -1160,7 +997,7 @@ chai "^4.2.0" chalk "^4.0.0" cosmiconfig "^7.0.0" - eslint "^7.27.0" + eslint "^8.32.0" eslint-config-prettier "^8.5.0" eslint-config-salesforce "^1.1.0" eslint-config-salesforce-license "^0.1.6" @@ -1172,6 +1009,7 @@ husky "^7.0.4" mocha "^9.1.3" nyc "^15.1.0" + oclif "^3.7.0" prettier "^2.7.1" pretty-quick "^3.1.0" shelljs "~0.8.4" @@ -1181,8 +1019,9 @@ typedoc "0.23.16" typedoc-plugin-missing-exports "0.23.0" typescript "^4.1.3" + wireit "^0.9.5" -"@salesforce/kit@^1.7.1", "@salesforce/kit@^1.8.0", "@salesforce/kit@^1.8.2", "@salesforce/kit@^1.8.3", "@salesforce/kit@^1.8.5", "@salesforce/kit@^1.9.0": +"@salesforce/kit@^1.7.1", "@salesforce/kit@^1.8.0", "@salesforce/kit@^1.8.2", "@salesforce/kit@^1.8.3", "@salesforce/kit@^1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@salesforce/kit/-/kit-1.9.0.tgz#ddc179ff588b68f3e8f5c237ab74ed4b9c8d5274" integrity sha512-a1DnVf2ZN/fZ4Zq0T6pxrDpwOyWSKt6Es1erpUJLvM13H+Y3C4uxSUy4aS4WSHIJA8zvWvvEiWYOV17TD0Dmug== @@ -1219,36 +1058,36 @@ chalk "^4.1.1" tslib "^2" -"@salesforce/plugin-info@^2.4.2": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@salesforce/plugin-info/-/plugin-info-2.4.2.tgz#47bee44226a87dd137c1db27b8ed1c5f7ccac321" - integrity sha512-HvXJkrx4lzB3MkP80gGYmt/IOIbBjA5HxZFohkM+TQf++zgTDjv1cVka4OV7yFIhW8QCCN6CNEdMOlFTHi2uKQ== +"@salesforce/plugin-info@^2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@salesforce/plugin-info/-/plugin-info-2.5.1.tgz#4de5108f5510dad4609d99c2610212273760483a" + integrity sha512-6wKJ2eF0peB8PqR3Ebf7RJ/+Ds7cNYVIyzJThhEPHPWaG4JfJKd6Sw75BR3ATrBvJKEKC2oQ/fKXeOPVGs/hXw== dependencies: - "@oclif/core" "^2.0.7" - "@salesforce/core" "^3.33.0" + "@oclif/core" "^2.1.7" + "@salesforce/core" "^3.33.4" "@salesforce/kit" "^1.8.0" - "@salesforce/sf-plugins-core" "^2.0.1" + "@salesforce/sf-plugins-core" "^2.2.3" got "^11.8.6" marked "^4.2.12" marked-terminal "^4.2.0" - open "^8.4.0" + open "^8.4.2" proxy-agent "^5.0.0" proxy-from-env "^1.1.0" semver "^7.3.5" tslib "^2" -"@salesforce/plugin-templates@^55.4.1": - version "55.4.1" - resolved "https://registry.yarnpkg.com/@salesforce/plugin-templates/-/plugin-templates-55.4.1.tgz#e6a70a7c2e30e9e6449077f6d0ff8058eaa8d789" - integrity sha512-5AIy7bkkoqu6BHb4DXQZnzNGDzf4589JdJ9X8SBg0qGR0Qh6tBi8uwKlgsvuQDaEWCVDrm1rKXaMpBhgryXwpQ== +"@salesforce/plugin-templates@^55.4.4": + version "55.4.4" + resolved "https://registry.yarnpkg.com/@salesforce/plugin-templates/-/plugin-templates-55.4.4.tgz#951526492afa4ff8c07b3efb81ebde41181796ba" + integrity sha512-9slmieN+d70Ozbnjmz/IB1XYrg3EhOmDwXLlZ2ciAiKxMbcLNCSMIFxawzvZSOjHLKnsL0ruPXZVvmY5KoprgA== dependencies: - "@oclif/core" "^2.0.10" + "@oclif/core" "^2.3.1" "@salesforce/core" "^3.33.1" "@salesforce/sf-plugins-core" "^2.0.2" "@salesforce/templates" "^57.1.1" tslib "^2" - yeoman-environment "^3.13.0" - yeoman-generator "^5.7.0" + yeoman-environment "^3.15.1" + yeoman-generator "^5.8.0" "@salesforce/plugin-user@^2.3.2": version "2.3.2" @@ -1267,10 +1106,10 @@ resolved "https://registry.npmjs.org/@salesforce/prettier-config/-/prettier-config-0.0.2.tgz#ded39bf7cb75238edc9db6dd093649111350f8bc" integrity sha512-KExM355BLbxCW6siGBV7oUOotXvvVp0tAWERgzUkM2FcMb9fWrjwXDrIHc8V0UdDlA3UXtFltDWgN+Yqi+BA/g== -"@salesforce/schemas@^1.4.0": - version "1.4.0" - resolved "https://registry.npmjs.org/@salesforce/schemas/-/schemas-1.4.0.tgz#7dff427c8059895d8108176047aee600703c82d6" - integrity sha512-BJ25uphssN42Zy6kksheFHMTLiR98AAHe/Wxnv0T4dYxtrEbUjSXVAGKZqfewJPFXA4xB5gxC+rQZtfz6xKCFg== +"@salesforce/schemas@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@salesforce/schemas/-/schemas-1.5.0.tgz#8bfe2cb5d7cb29d3394b3b9cfb71bb527009c82c" + integrity sha512-EKFBURBuON7cj8XZCW+ybeSRRw7wUP1XUXZVHzFgx8KiYmSeGiRHBYbDjQOsQMho2uOLsTozMPEt2ehYnji0YA== "@salesforce/sf-plugins-core@^1.13.0": version "1.22.1" @@ -1284,25 +1123,25 @@ chalk "^4" inquirer "^8.2.5" -"@salesforce/sf-plugins-core@^2.0.1", "@salesforce/sf-plugins-core@^2.0.2", "@salesforce/sf-plugins-core@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@salesforce/sf-plugins-core/-/sf-plugins-core-2.2.1.tgz#845ab6c21f840cb70330006b44fa4230867ee50a" - integrity sha512-KT5y/HK9Y6FSjEiMy5Sc55RXfjMvwDgqutpMdKpBl2KH8DS1L8rISjuVzoZQv9WrkAHHLNF1Uv5tk4awesbQMQ== +"@salesforce/sf-plugins-core@^2.0.1", "@salesforce/sf-plugins-core@^2.0.2", "@salesforce/sf-plugins-core@^2.2.3", "@salesforce/sf-plugins-core@^2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@salesforce/sf-plugins-core/-/sf-plugins-core-2.2.4.tgz#c94f83cab62ff0009b88069e72b4cdcfc9748b82" + integrity sha512-lKi0W4y3SJfZCT1cuWZsc6vbJLS+QwO4TMbu/dob0LIba7r3+nrd7st8t2xvm/Z3hRKr8xsJADq/XFYPU7jfmQ== dependencies: - "@oclif/core" "^2.2.1" - "@salesforce/core" "^3.33.1" - "@salesforce/kit" "^1.8.3" - "@salesforce/ts-types" "^1.7.1" + "@oclif/core" "^2.4.0" + "@salesforce/core" "^3.33.5" + "@salesforce/kit" "^1.9.0" + "@salesforce/ts-types" "^1.7.3" chalk "^4" inquirer "^8.2.5" -"@salesforce/source-deploy-retrieve@^7.10.1", "@salesforce/source-deploy-retrieve@^7.8.0": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@salesforce/source-deploy-retrieve/-/source-deploy-retrieve-7.10.1.tgz#9e35a444c56237d10021cd4f4f53f5ddb5503c65" - integrity sha512-stptCD5sUUNvlIvjSQrpOBy5D8QtDUfdyYQZdPueHA4M3oOZAxKEHbdajyHZ/RE+xpYUfyXzQyNtVfSLp5wywA== +"@salesforce/source-deploy-retrieve@^7.10.1", "@salesforce/source-deploy-retrieve@^7.11.3": + version "7.11.3" + resolved "https://registry.yarnpkg.com/@salesforce/source-deploy-retrieve/-/source-deploy-retrieve-7.11.3.tgz#17d63abd0b0d33de1ac9585fcc294235cb42429e" + integrity sha512-d5kVkLcqJBFNaPIWZlKKAExKo/HbQ2ycDsWyDlpxyweox2t2wMc+YLCvxOzhk1x+UnQmHWiSS7JaoTExM/Dx3Q== dependencies: "@salesforce/core" "^3.33.1" - "@salesforce/kit" "^1.8.5" + "@salesforce/kit" "^1.9.0" "@salesforce/ts-types" "^1.7.2" archiver "^5.3.1" fast-xml-parser "^3.21.1" @@ -1332,14 +1171,14 @@ sinon "^10.0.0" strip-ansi "^7.0.1" -"@salesforce/source-tracking@^2.2.21": - version "2.2.21" - resolved "https://registry.yarnpkg.com/@salesforce/source-tracking/-/source-tracking-2.2.21.tgz#de1559ac6bf7081c54c392cd51b0e6db6f29414d" - integrity sha512-el2mEsEV+CMGTq0g7cp+23wnRLzivYiIp3QtIOgVThZkHmwueuaNFlP0swWcoX/g5GKo+LuVf6VpUnrmq+nJNg== +"@salesforce/source-tracking@^2.2.24": + version "2.2.24" + resolved "https://registry.yarnpkg.com/@salesforce/source-tracking/-/source-tracking-2.2.24.tgz#ab6746748956eff3150bf9e1d1a97fae8d1dbead" + integrity sha512-7VhYDaFrjyOYIKiaVA3ZtcVTmwZ9KuakDIetgXHnwKMQ/oHB1N5i8aw70aM2+L+BVTzzbY2ki+Wnortsv2e+2Q== dependencies: - "@salesforce/core" "^3.33.1" - "@salesforce/kit" "^1.8.3" - "@salesforce/source-deploy-retrieve" "^7.8.0" + "@salesforce/core" "^3.33.6" + "@salesforce/kit" "^1.9.0" + "@salesforce/source-deploy-retrieve" "^7.11.3" graceful-fs "^4.2.10" isomorphic-git "1.17.0" ts-retry-promise "^0.7.0" @@ -1456,71 +1295,71 @@ resolved "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz#5981a8db18b56ba38ef0efb7d995b12aa7b51918" integrity sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ== -"@swc/core-darwin-arm64@1.3.32": - version "1.3.32" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.32.tgz#841b0a244c2c75e67bb9d3cb665b2ede601e4e3a" - integrity sha512-o19bhlxuUgjUElm6i+QhXgZ0vD6BebiB/gQpK3en5aAwhOvinwr4sah3GqFXsQzz/prKVDuMkj9SW6F/Ug5hgg== - -"@swc/core-darwin-x64@1.3.32": - version "1.3.32" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.32.tgz#125247c6a5d7189776a6973b0a539a07576d5585" - integrity sha512-hVEGd+v5Afh+YekGADOGKwhuS4/AXk91nLuk7pmhWkk8ceQ1cfmah90kXjIXUlCe2G172MLRfHNWlZxr29E/Og== - -"@swc/core-linux-arm-gnueabihf@1.3.32": - version "1.3.32" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.32.tgz#d8ba8da3707b91e62059e65e375fc6093c4d5f82" - integrity sha512-5X01WqI9EbJ69oHAOGlI08YqvEIXMfT/mCJ1UWDQBb21xWRE2W1yFAAeuqOLtiagLrXjPv/UKQ0S2gyWQR5AXQ== - -"@swc/core-linux-arm64-gnu@1.3.32": - version "1.3.32" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.32.tgz#15973e533c45e2976e57c590613e3e5dca0e62ad" - integrity sha512-PTJ6oPiutkNBg+m22bUUPa4tNuMmsgpSnsnv2wnWVOgK0lhvQT6bAPTUXDq/8peVAgR/SlpP2Ht8TRRqYMRjRQ== - -"@swc/core-linux-arm64-musl@1.3.32": - version "1.3.32" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.32.tgz#0e20f30885c8588bd13e7e5628ce8bdbe6cb44b6" - integrity sha512-lG0VOuYNPWOCJ99Aza69cTljjeft/wuRQeYFF8d+1xCQS/OT7gnbgi7BOz39uSHIPTBqfzdIsuvzdKlp9QydrQ== - -"@swc/core-linux-x64-gnu@1.3.32": - version "1.3.32" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.32.tgz#2ea5e17d13a70e6a13742282cf30e92e4074f4c5" - integrity sha512-ecqtSWX4NBrs7Ji2VX3fDWeqUfrbLlYqBuufAziCM27xMxwlAVgmyGQk4FYgoQ3SAUAu3XFH87+3Q7uWm2X7xg== - -"@swc/core-linux-x64-musl@1.3.32": - version "1.3.32" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.32.tgz#d96cde03d54f13f77dd1d6602a049bd2baaef446" - integrity sha512-rl3dMcUuENVkpk5NGW/LXovjK0+JFm4GWPjy4NM3Q5cPvhBpGwSeLZlR+zAw9K0fdGoIXiayRTTfENrQwwsH+g== - -"@swc/core-win32-arm64-msvc@1.3.32": - version "1.3.32" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.32.tgz#3870113492cc3d2679945372f4975ce7f60594cc" - integrity sha512-VlybAZp8DcS66CH1LDnfp9zdwbPlnGXREtHDMHaBfK9+80AWVTg+zn0tCYz+HfcrRONqxbudwOUIPj+dwl/8jw== - -"@swc/core-win32-ia32-msvc@1.3.32": - version "1.3.32" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.32.tgz#643519663778e64941c8b730197d4ba762dffcb0" - integrity sha512-MEUMdpUFIQ+RD+K/iHhHKfu0TFNj9VXwIxT5hmPeqyboKo095CoFEFBJ0sHG04IGlnu8T9i+uE2Pi18qUEbFug== - -"@swc/core-win32-x64-msvc@1.3.32": - version "1.3.32" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.32.tgz#aa9595cb93d9dd5bbc7e5cfdabd8bb086ea6c21d" - integrity sha512-DPMoneNFQco7SqmVVOUv1Vn53YmoImEfrAPMY9KrqQzgfzqNTuL2JvfxUqfAxwQ6pEKYAdyKJvZ483rIhgG9XQ== - -"@swc/core@^1.3.32": - version "1.3.32" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.32.tgz#ecb3c9d7717e0a15796230def1b17968b18228f1" - integrity sha512-Yx/n1j+uUkcqlJAW8IRg8Qymgkdow6NHJZPFShiR0YiaYq2sXY+JHmvh16O6GkL91Y+gTlDUS7uVgDz50czJUQ== +"@swc/core-darwin-arm64@1.3.37": + version "1.3.37" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.37.tgz#a92e075ae35f18a64aaf3823ea175f03564f8da1" + integrity sha512-iIyVqqioUpVeT/hbBVfkrsjfCyL4idNH+LVKGmoTAWaTTSB0+UNhNuA7Wh2CqIHWh1Mv7IlumitWPcqsVDdoEw== + +"@swc/core-darwin-x64@1.3.37": + version "1.3.37" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.37.tgz#a3cc06c87140a2ca0b8e7ef1f3d5cc34dd080429" + integrity sha512-dao5nXPWKxtaxqak4ZkRyBoApNIelW/glantQhPhj0FjMjuIQc+v03ldJ8XDByWOG+6xuVUTheANCtEccxoQBw== + +"@swc/core-linux-arm-gnueabihf@1.3.37": + version "1.3.37" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.37.tgz#f7d8f8523830c6be653f608839d4bd5598457f1f" + integrity sha512-/mVrc8H/f062CUkqKGmBiil2VIYu4mKawHxERfeP1y38X5K/OwjG5s9MgO9TVxy+Ly6vejwj70kRhSa3hVp1Bw== + +"@swc/core-linux-arm64-gnu@1.3.37": + version "1.3.37" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.37.tgz#b162febd9de14fb08000c722b063be2bb5aefa6b" + integrity sha512-eRQ3KaZI0j5LidTfOIi/kUVOOMuVmw1HCdt/Z1TAUKoHMLVxY8xcJ3pEE3/+ednI60EmHpwpJRs6LelXyL6uzQ== + +"@swc/core-linux-arm64-musl@1.3.37": + version "1.3.37" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.37.tgz#3b1a628e880fbb1a5e2a7a46d42e8aa878c6bfdd" + integrity sha512-w2BRLODyxNQY2rfHZMZ5ir6QrrnGBPlnIslTrgKmVbn1OjZoxUCtuqhrYnCmybaAc4DOkeH02TqynEFXrm+EMw== + +"@swc/core-linux-x64-gnu@1.3.37": + version "1.3.37" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.37.tgz#ed443ad77dc90e415267d02a38e4113047b2d3d8" + integrity sha512-CfoH8EsZJZ9kunjMUjBNYD5fFuO86zw+K/o4wEw72Yg6ZEiqPmeIlCKU8tpTv4sK+CbhUXrmVzMB5tqsb2jALQ== + +"@swc/core-linux-x64-musl@1.3.37": + version "1.3.37" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.37.tgz#de607a4985458bd6e8b0e40f0d62d0e26bd8df1e" + integrity sha512-9YPrHYNdoG7PK11gV51GfL45biI2dic+YTqHUDKyykemsD7Ot1zUFX7Ty//pdvpKcKSff6SrHbfFACD5ziNirA== + +"@swc/core-win32-arm64-msvc@1.3.37": + version "1.3.37" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.37.tgz#d5851a47d7df183929b9746d56f76c282f940e6a" + integrity sha512-h17Ek8/wCDje6BrXOvCXBM80oBRmTSMMdLyt87whTl5xqYlWYYs9oQIzZndNRTlNpTgjGO8Ns2eo4kwVxIkBIA== + +"@swc/core-win32-ia32-msvc@1.3.37": + version "1.3.37" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.37.tgz#06ad7016f61b56aec4abf60eab3a91b786f9e294" + integrity sha512-1BR175E1olGy/zdt94cgdb6ps/lBNissAOaxyBk8taFpcjy3zpdP30yAoH0GIsC6isnZ5JfArbOJNRXXO5tE0Q== + +"@swc/core-win32-x64-msvc@1.3.37": + version "1.3.37" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.37.tgz#60139a7089003a7447a4efef9704ae8fde21995e" + integrity sha512-1siDQ7dccQ1pesJmgAL3BUBbRPtfbNInOWnZOkiie/DfFqGQ117QKnCVyjUvwFKfTQx1+3UUTDmMSlRd00SlXg== + +"@swc/core@^1.3.37": + version "1.3.37" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.37.tgz#644653fa7deb20c7c342e7fd019c7abc44ecf1bf" + integrity sha512-VOFlEQ1pReOM73N9A7R8rt561GU8Rxsq833jiimWDUB2sXEN3V6n6wFTgYmZuMz2T4/R0cQA1nV48KkaT4gkFw== optionalDependencies: - "@swc/core-darwin-arm64" "1.3.32" - "@swc/core-darwin-x64" "1.3.32" - "@swc/core-linux-arm-gnueabihf" "1.3.32" - "@swc/core-linux-arm64-gnu" "1.3.32" - "@swc/core-linux-arm64-musl" "1.3.32" - "@swc/core-linux-x64-gnu" "1.3.32" - "@swc/core-linux-x64-musl" "1.3.32" - "@swc/core-win32-arm64-msvc" "1.3.32" - "@swc/core-win32-ia32-msvc" "1.3.32" - "@swc/core-win32-x64-msvc" "1.3.32" + "@swc/core-darwin-arm64" "1.3.37" + "@swc/core-darwin-x64" "1.3.37" + "@swc/core-linux-arm-gnueabihf" "1.3.37" + "@swc/core-linux-arm64-gnu" "1.3.37" + "@swc/core-linux-arm64-musl" "1.3.37" + "@swc/core-linux-x64-gnu" "1.3.37" + "@swc/core-linux-x64-musl" "1.3.37" + "@swc/core-win32-arm64-msvc" "1.3.37" + "@swc/core-win32-ia32-msvc" "1.3.37" + "@swc/core-win32-x64-msvc" "1.3.37" "@szmarczak/http-timer@^4.0.5": version "4.0.6" @@ -1608,18 +1447,10 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/glob@^7.1.1": - version "7.2.0" - resolved "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/graceful-fs@^4.1.5": - version "4.1.5" - resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== +"@types/graceful-fs@^4.1.6": + version "4.1.6" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" + integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== dependencies: "@types/node" "*" @@ -1776,14 +1607,14 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.49.0": - version "5.49.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.49.0.tgz#d699734b2f20e16351e117417d34a2bc9d7c4b90" - integrity sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg== +"@typescript-eslint/parser@^5.54.0": + version "5.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.54.0.tgz#def186eb1b1dbd0439df0dacc44fb6d8d5c417fe" + integrity sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ== dependencies: - "@typescript-eslint/scope-manager" "5.49.0" - "@typescript-eslint/types" "5.49.0" - "@typescript-eslint/typescript-estree" "5.49.0" + "@typescript-eslint/scope-manager" "5.54.0" + "@typescript-eslint/types" "5.54.0" + "@typescript-eslint/typescript-estree" "5.54.0" debug "^4.3.4" "@typescript-eslint/scope-manager@5.43.0": @@ -1794,21 +1625,21 @@ "@typescript-eslint/types" "5.43.0" "@typescript-eslint/visitor-keys" "5.43.0" -"@typescript-eslint/scope-manager@5.49.0": - version "5.49.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.49.0.tgz#81b5d899cdae446c26ddf18bd47a2f5484a8af3e" - integrity sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ== +"@typescript-eslint/scope-manager@5.54.0": + version "5.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.54.0.tgz#74b28ac9a3fc8166f04e806c957adb8c1fd00536" + integrity sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg== dependencies: - "@typescript-eslint/types" "5.49.0" - "@typescript-eslint/visitor-keys" "5.49.0" + "@typescript-eslint/types" "5.54.0" + "@typescript-eslint/visitor-keys" "5.54.0" -"@typescript-eslint/scope-manager@5.53.0": - version "5.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz#42b54f280e33c82939275a42649701024f3fafef" - integrity sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w== +"@typescript-eslint/scope-manager@5.55.0": + version "5.55.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.55.0.tgz#e863bab4d4183ddce79967fe10ceb6c829791210" + integrity sha512-OK+cIO1ZGhJYNCL//a3ROpsd83psf4dUJ4j7pdNVzd5DmIk+ffkuUIX2vcZQbEW/IR41DYsfJTB19tpCboxQuw== dependencies: - "@typescript-eslint/types" "5.53.0" - "@typescript-eslint/visitor-keys" "5.53.0" + "@typescript-eslint/types" "5.55.0" + "@typescript-eslint/visitor-keys" "5.55.0" "@typescript-eslint/type-utils@5.43.0": version "5.43.0" @@ -1825,15 +1656,15 @@ resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz#e4ddd7846fcbc074325293515fa98e844d8d2578" integrity sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg== -"@typescript-eslint/types@5.49.0": - version "5.49.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.49.0.tgz#ad66766cb36ca1c89fcb6ac8b87ec2e6dac435c3" - integrity sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg== +"@typescript-eslint/types@5.54.0": + version "5.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.54.0.tgz#7d519df01f50739254d89378e0dcac504cab2740" + integrity sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ== -"@typescript-eslint/types@5.53.0": - version "5.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.53.0.tgz#f79eca62b97e518ee124086a21a24f3be267026f" - integrity sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A== +"@typescript-eslint/types@5.55.0": + version "5.55.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.55.0.tgz#9830f8d3bcbecf59d12f821e5bc6960baaed41fd" + integrity sha512-M4iRh4AG1ChrOL6Y+mETEKGeDnT7Sparn6fhZ5LtVJF1909D5O4uqK+C5NPbLmpfZ0XIIxCdwzKiijpZUOvOug== "@typescript-eslint/typescript-estree@5.43.0": version "5.43.0" @@ -1848,26 +1679,26 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.49.0": - version "5.49.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.49.0.tgz#ebd6294c0ea97891fce6af536048181e23d729c8" - integrity sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA== +"@typescript-eslint/typescript-estree@5.54.0": + version "5.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.0.tgz#f6f3440cabee8a43a0b25fa498213ebb61fdfe99" + integrity sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ== dependencies: - "@typescript-eslint/types" "5.49.0" - "@typescript-eslint/visitor-keys" "5.49.0" + "@typescript-eslint/types" "5.54.0" + "@typescript-eslint/visitor-keys" "5.54.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.53.0": - version "5.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz#bc651dc28cf18ab248ecd18a4c886c744aebd690" - integrity sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w== +"@typescript-eslint/typescript-estree@5.55.0": + version "5.55.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.55.0.tgz#8db7c8e47ecc03d49b05362b8db6f1345ee7b575" + integrity sha512-I7X4A9ovA8gdpWMpr7b1BN9eEbvlEtWhQvpxp/yogt48fy9Lj3iE3ild/1H3jKBBIYj5YYJmS2+9ystVhC7eaQ== dependencies: - "@typescript-eslint/types" "5.53.0" - "@typescript-eslint/visitor-keys" "5.53.0" + "@typescript-eslint/types" "5.55.0" + "@typescript-eslint/visitor-keys" "5.55.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -1888,18 +1719,18 @@ eslint-utils "^3.0.0" semver "^7.3.7" -"@typescript-eslint/utils@^5.50.0": - version "5.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.53.0.tgz#e55eaad9d6fffa120575ffaa530c7e802f13bce8" - integrity sha512-VUOOtPv27UNWLxFwQK/8+7kvxVC+hPHNsJjzlJyotlaHjLSIgOCKj9I0DBUjwOOA64qjBwx5afAPjksqOxMO0g== +"@typescript-eslint/utils@^5.54.1": + version "5.55.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.55.0.tgz#34e97322e7ae5b901e7a870aabb01dad90023341" + integrity sha512-FkW+i2pQKcpDC3AY6DU54yl8Lfl14FVGYDgBTyGKB75cCwV3KpkpTMFi9d9j2WAJ4271LR2HeC5SEWF/CZmmfw== dependencies: + "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.53.0" - "@typescript-eslint/types" "5.53.0" - "@typescript-eslint/typescript-estree" "5.53.0" + "@typescript-eslint/scope-manager" "5.55.0" + "@typescript-eslint/types" "5.55.0" + "@typescript-eslint/typescript-estree" "5.55.0" eslint-scope "^5.1.1" - eslint-utils "^3.0.0" semver "^7.3.7" "@typescript-eslint/visitor-keys@5.43.0": @@ -1910,20 +1741,20 @@ "@typescript-eslint/types" "5.43.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@5.49.0": - version "5.49.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.49.0.tgz#2561c4da3f235f5c852759bf6c5faec7524f90fe" - integrity sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg== +"@typescript-eslint/visitor-keys@5.54.0": + version "5.54.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.0.tgz#846878afbf0cd67c19cfa8d75947383d4490db8f" + integrity sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA== dependencies: - "@typescript-eslint/types" "5.49.0" + "@typescript-eslint/types" "5.54.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@5.53.0": - version "5.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz#8a5126623937cdd909c30d8fa72f79fa56cc1a9f" - integrity sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w== +"@typescript-eslint/visitor-keys@5.55.0": + version "5.55.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.55.0.tgz#01ad414fca8367706d76cdb94adf788dc5b664a2" + integrity sha512-q2dlHHwWgirKh1D3acnuApXG+VNXpEY5/AwRxDVuEQpxWaB0jCDe0jFMVMALJ3ebSfuOVE8/rMS+9ZOYGg1GWw== dependencies: - "@typescript-eslint/types" "5.53.0" + "@typescript-eslint/types" "5.55.0" eslint-visitor-keys "^3.3.0" "@ungap/promise-all-settled@1.1.2": @@ -1951,7 +1782,7 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" -acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -1961,11 +1792,6 @@ acorn-walk@^8.1.1, acorn-walk@^8.2.0: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - acorn@^8.4.1, acorn@^8.7.0, acorn@^8.8.0: version "8.8.1" resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" @@ -2005,16 +1831,6 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - ajv@^8.11.0, ajv@^8.11.2: version "8.11.2" resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz#aecb20b50607acf2569b6382167b65a96008bb78" @@ -2030,17 +1846,12 @@ ansi-colors@4.1.1: resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - ansi-escapes@^3.1.0: version "3.2.0" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.1, ansi-escapes@^4.3.2: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.1, ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -2079,7 +1890,7 @@ ansi-styles@^3.0.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.2.0, ansi-styles@^4.2.1, ansi-styles@^4.3.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.2.1, ansi-styles@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -2256,11 +2067,6 @@ ast-types@^0.13.2: dependencies: tslib "^2.0.1" -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - async-lock@^1.1.0: version "1.4.0" resolved "https://registry.npmjs.org/async-lock/-/async-lock-1.4.0.tgz#c8b6630eff68fbbdd8a5b6eb763dac3bfbb8bf02" @@ -2634,7 +2440,7 @@ chalk@^1.0.0: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.4.1: +chalk@^2.0.0: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2702,11 +2508,6 @@ chokidar@3.5.3, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - chownr@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" @@ -2722,7 +2523,7 @@ clean-stack@^2.0.0: resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -clean-stack@^3.0.0, clean-stack@^3.0.1: +clean-stack@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" integrity sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg== @@ -2741,10 +2542,10 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-progress@^3.10.0, cli-progress@^3.11.2, cli-progress@^3.4.0: - version "3.11.2" - resolved "https://registry.npmjs.org/cli-progress/-/cli-progress-3.11.2.tgz#f8c89bd157e74f3f2c43bcfb3505670b4d48fc77" - integrity sha512-lCPoS6ncgX4+rJu5bS3F/iCz17kZ9MPZ6dpuTtI0KXKABkhyXIdYB3Inby1OpaGti3YlI3EeEkM9AuWpelJrVA== +cli-progress@^3.10.0, cli-progress@^3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942" + integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A== dependencies: string-width "^4.2.3" @@ -2769,38 +2570,6 @@ cli-table@^0.3.1: dependencies: colors "1.0.3" -cli-ux@5.6.7: - version "5.6.7" - resolved "https://registry.npmjs.org/cli-ux/-/cli-ux-5.6.7.tgz#32ef9e6cb2b457be834280cc799028a11c8235a8" - integrity sha512-dsKAurMNyFDnO6X1TiiRNiVbL90XReLKcvIq4H777NMqXGBxBws23ag8ubCJE97vVZEgWG2eSUhsyLf63Jv8+g== - dependencies: - "@oclif/command" "^1.8.15" - "@oclif/errors" "^1.3.5" - "@oclif/linewrap" "^1.0.0" - "@oclif/screen" "^1.0.4" - ansi-escapes "^4.3.0" - ansi-styles "^4.2.0" - cardinal "^2.1.1" - chalk "^4.1.0" - clean-stack "^3.0.0" - cli-progress "^3.4.0" - extract-stack "^2.0.0" - fs-extra "^8.1" - hyperlinker "^1.0.0" - indent-string "^4.0.0" - is-wsl "^2.2.0" - js-yaml "^3.13.1" - lodash "^4.17.21" - natural-orderby "^2.0.1" - object-treeify "^1.1.4" - password-prompt "^1.1.2" - semver "^7.3.2" - string-width "^4.2.0" - strip-ansi "^6.0.0" - supports-color "^8.1.0" - supports-hyperlinks "^2.1.0" - tslib "^2.0.0" - cli-width@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" @@ -3122,7 +2891,7 @@ cross-env@^7.0.3: dependencies: cross-spawn "^7.0.1" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -3189,7 +2958,7 @@ dayjs@^1.8.16: resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz#2e79a226314ec3ec904e3ee1dd5a4f5e5b1c7afb" integrity sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ== -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -3331,11 +3100,6 @@ deprecation@^2.0.0, deprecation@^2.3.1: resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== -detect-indent@^6.0.0: - version "6.1.0" - resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - dezalgo@^1.0.0: version "1.0.4" resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" @@ -3457,13 +3221,6 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - env-paths@^2.2.0: version "2.2.1" resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -3678,13 +3435,13 @@ eslint-plugin-prefer-arrow@^1.2.1: resolved "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz#e7fbb3fa4cd84ff1015b9c51ad86550e55041041" integrity sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ== -eslint-plugin-sf-plugin@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-sf-plugin/-/eslint-plugin-sf-plugin-1.8.1.tgz#a51ba1cf95f7d37510abe78960426bc68dece3f5" - integrity sha512-SYM4rrkfXqemZXqdP8U/7CLzv/EZ3HXvC1MxT/8cmZ8IY+ubPyxE+cv3pkbIpLtqsZWszd57eee8GBVUQVtLfg== +eslint-plugin-sf-plugin@^1.14.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-sf-plugin/-/eslint-plugin-sf-plugin-1.14.0.tgz#6bb25bd107119019e854595249b0c792aac5c3d4" + integrity sha512-KMgHn0uhml3ZjirCIP6h3e8PtIlN0JnTTOwypq17HJvOvKkb7SDPzCn4ogk/LfOGa0WrTuMGSzRWbrM3lhNydQ== dependencies: - "@salesforce/core" "^3.33.1" - "@typescript-eslint/utils" "^5.50.0" + "@salesforce/core" "^3.33.6" + "@typescript-eslint/utils" "^5.54.1" eslint-scope@^5.1.1: version "5.1.1" @@ -3702,13 +3459,6 @@ eslint-scope@^7.1.1: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - eslint-utils@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" @@ -3716,11 +3466,6 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - eslint-visitor-keys@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" @@ -3731,53 +3476,7 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@^7.27.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -eslint@^8.34.0: +eslint@^8.32.0, eslint@^8.34.0: version "8.34.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.34.0.tgz#fe0ab0ef478104c1f9ebc5537e303d25a8fb22d6" integrity sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg== @@ -3822,15 +3521,6 @@ eslint@^8.34.0: strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - espree@^9.4.0: version "9.4.1" resolved "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" @@ -3846,9 +3536,9 @@ esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" @@ -3889,19 +3579,6 @@ events@1.1.1: resolved "https://registry.npmjs.org/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== -execa@^0.10.0: - version "0.10.0" - resolved "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" - integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== - dependencies: - cross-spawn "^6.0.0" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^4.0.0: version "4.1.0" resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" @@ -3941,17 +3618,12 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" -extract-stack@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/extract-stack/-/extract-stack-2.0.0.tgz#11367bc865bfcd9bc0db3123e5edb57786f11f9b" - integrity sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.0.3, fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: +fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: version "3.2.12" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== @@ -4167,15 +3839,6 @@ fs-extra@^11.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" - integrity sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-extra@^8.1, fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -4245,11 +3908,6 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - functions-have-names@^1.2.2: version "1.2.3" resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" @@ -4318,11 +3976,6 @@ get-stdin@^4.0.1: resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw== -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== - get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -4366,7 +4019,7 @@ git-raw-commits@^2.0.0: split2 "^3.0.0" through2 "^4.0.0" -github-slugger@^1.2.1, github-slugger@^1.5.0: +github-slugger@^1.5.0: version "1.5.0" resolved "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== @@ -4415,7 +4068,7 @@ glob@^6.0.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -4450,27 +4103,13 @@ globals@^11.1.0: resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.19.0, globals@^13.6.0, globals@^13.9.0: +globals@^13.19.0: version "13.20.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" -globby@^10.0.1: - version "10.0.2" - resolved "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" - integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - globby@^11.0.1, globby@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -4490,7 +4129,7 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -got@^11, got@^11.8.2, got@^11.8.3, got@^11.8.6: +got@^11, got@^11.8.2, got@^11.8.6: version "11.8.6" resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== @@ -4640,7 +4279,7 @@ http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== -http-call@^5.1.2, http-call@^5.2.2: +http-call@^5.2.2: version "5.3.0" resolved "https://registry.npmjs.org/http-call/-/http-call-5.3.0.tgz#4ded815b13f423de176eb0942d69c43b25b148db" integrity sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w== @@ -4760,12 +4399,7 @@ ignore-walk@^4.0.1: dependencies: minimatch "^3.0.4" -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.1, ignore@^5.1.4, ignore@^5.2.0, ignore@^5.2.4: +ignore@^5.1.4, ignore@^5.2.0, ignore@^5.2.4: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== @@ -5049,11 +4683,6 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - is-stream@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -5135,11 +4764,16 @@ isarray@^1.0.0, isarray@~1.0.0: resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -isbinaryfile@^4.0.10, isbinaryfile@^4.0.8: +isbinaryfile@^4.0.10: version "4.0.10" resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== +isbinaryfile@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.0.tgz#034b7e54989dab8986598cbcea41f66663c65234" + integrity sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -5289,10 +4923,10 @@ jsesc@^2.5.1: resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -jsforce@^2.0.0-beta.19: - version "2.0.0-beta.19" - resolved "https://registry.npmjs.org/jsforce/-/jsforce-2.0.0-beta.19.tgz#4a136b88d6a9f6668714c4ccbb0acd55e46ea493" - integrity sha512-WdF6hs7kukXNGvp/VRhu2DngldgiBBorsc2WA5us08oJGbEIPwn/itqYJWKJ+rfPXepz5JbkWQd48XHGjqmPpw== +jsforce@^2.0.0-beta.19, jsforce@^2.0.0-beta.20: + version "2.0.0-beta.20" + resolved "https://registry.yarnpkg.com/jsforce/-/jsforce-2.0.0-beta.20.tgz#907630942b2ecd653098caa3f87e7710874cb207" + integrity sha512-5TpdU0MEUN34M0mSKmBwOMKaI8dllTYF8NzpJn0/9akrwqKEERK6K2jGiMWcs85Vx1HCHEcwU2n+5ij6z6zr2g== dependencies: "@babel/runtime" "^7.12.5" "@babel/runtime-corejs3" "^7.12.5" @@ -5475,16 +5109,6 @@ listenercount@~1.0.1: resolved "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== -load-json-file@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" - integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== - dependencies: - graceful-fs "^4.1.15" - parse-json "^5.0.0" - strip-bom "^4.0.0" - type-fest "^0.6.0" - load-yaml-file@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz#af854edaf2bea89346c07549122753c07372f64d" @@ -5574,11 +5198,6 @@ lodash.startcase@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - lodash.union@^4.6.0: version "4.6.0" resolved "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" @@ -5751,17 +5370,17 @@ marked@^4.0.19, marked@^4.2.12: integrity sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw== "mem-fs-editor@^8.1.2 || ^9.0.0", mem-fs-editor@^9.0.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-9.6.0.tgz#a867377737b12c0d02ca756d90bc70c51883aa38" - integrity sha512-CsuAd+s0UPZnGzm3kQ5X7gGmVmwiX9XXRAmXj9Mbq0CJa8YWUkPqneelp0aG2g+7uiwCBHlJbl30FYtToLT3VQ== + version "9.7.0" + resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-9.7.0.tgz#dbb458b8acb885c84013645e93f71aa267a7fdf6" + integrity sha512-ReB3YD24GNykmu4WeUL/FDIQtkoyGB6zfJv60yfCo3QjKeimNcTqv2FT83bP0ccs6uu+sm5zyoBlspAzigmsdg== dependencies: binaryextensions "^4.16.0" commondir "^1.0.1" deep-extend "^0.6.0" ejs "^3.1.8" globby "^11.1.0" - isbinaryfile "^4.0.8" - minimatch "^3.1.2" + isbinaryfile "^5.0.0" + minimatch "^7.2.0" multimatch "^5.0.0" normalize-path "^3.0.0" textextensions "^5.13.0" @@ -5798,7 +5417,7 @@ merge-stream@^2.0.0: resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -5869,6 +5488,13 @@ minimatch@^5.0.1, minimatch@^5.1.0, minimatch@^5.1.6: dependencies: brace-expansion "^2.0.1" +minimatch@^7.2.0: + version "7.4.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.2.tgz#157e847d79ca671054253b840656720cb733f10f" + integrity sha512-xy4q7wou3vUoC9k1xGTXc+awNdGaGVHtFUaey8tiX4H1QRc04DZ/rmDFwNm2EBsuYEhAZ6SgMmYf3InGY6OauA== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -5956,9 +5582,9 @@ minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3. yallist "^4.0.0" minipass@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.0.3.tgz#00bfbaf1e16e35e804f4aa31a7c1f6b8d9f0ee72" - integrity sha512-OW2r4sQ0sI+z5ckEt5c1Tri4xTgZwYDxpE54eqWlQloQRoWtXjqt9udJ5Z4dSv7wK+nfFI7FRXyCpBSft+gpFw== + version "4.2.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.4.tgz#7d0d97434b6a19f59c5c3221698b48bbf3b2cd06" + integrity sha512-lwycX3cBMTvcejsHITUgYj6Gy6A7Nh4Q6h9NP4sTHY1ccJlC7yKzDmiShEHsJ16Jf1nKGDEaiHxiltsJEvk0nQ== minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" @@ -5968,11 +5594,6 @@ minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: minipass "^3.0.0" yallist "^4.0.0" -mkdirp-classic@^0.5.2: - version "0.5.3" - resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - mkdirp-infer-owner@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" @@ -6108,7 +5729,7 @@ natural-compare@^1.4.0: resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -natural-orderby@^2.0.1, natural-orderby@^2.0.3: +natural-orderby@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz#8623bc518ba162f8ff1cdb8941d74deb0fdcc016" integrity sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q== @@ -6323,13 +5944,6 @@ npm-registry-fetch@^12.0.0, npm-registry-fetch@^12.0.1: minizlib "^2.1.2" npm-package-arg "^8.1.5" -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -6410,7 +6024,7 @@ object-keys@^1.1.1: resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-treeify@^1.1.33, object-treeify@^1.1.4: +object-treeify@^1.1.33: version "1.1.33" resolved "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz#f06fece986830a3cba78ddd32d4c11d1f76cdf40" integrity sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A== @@ -6434,12 +6048,12 @@ object.values@^1.1.5, object.values@^1.1.6: define-properties "^1.1.4" es-abstract "^1.20.4" -oclif@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/oclif/-/oclif-3.6.1.tgz#157ac35f1e634af745879a55c3fa39bf724a5e69" - integrity sha512-zedbQqxAzC8WlH/T2D/CbGCTWIXHMV7wGs2av+M3KPG4SfB9/lwn1zXGjft/3NNy3X6KCEoGCYWqYYMZOf2Fgg== +oclif@^3.6.1, oclif@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/oclif/-/oclif-3.7.0.tgz#6507033312dbcae25e99050010c33d67a31e93a3" + integrity sha512-LtLc7/3lOQ0d6/JKGj8QriIK/MiIcjZXVX3WoynbXUswG/X8oIsSr1+F6Q69VVbXnjbYlbfiP+uYASr36Mrjzg== dependencies: - "@oclif/core" "^2.0.3" + "@oclif/core" "^2.3.0" "@oclif/plugin-help" "^5.1.19" "@oclif/plugin-not-found" "^2.3.7" "@oclif/plugin-warn-if-update-available" "^2.0.14" @@ -6481,10 +6095,10 @@ open@^7.0.0: is-docker "^2.0.0" is-wsl "^2.1.1" -open@^8.4.0: - version "8.4.1" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.1.tgz#2ab3754c07f5d1f99a7a8d6a82737c95e3101cff" - integrity sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg== +open@^8.4.2: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== dependencies: define-lazy-prop "^2.0.0" is-docker "^2.1.1" @@ -6759,7 +6373,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-key@^2.0.0, path-key@^2.0.1: +path-key@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== @@ -6838,10 +6452,10 @@ prelude-ls@~1.1.2: resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== -prettier@^2.7.1, prettier@^2.8.3: - version "2.8.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.3.tgz#ab697b1d3dd46fb4626fbe2f543afe0cc98d8632" - integrity sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw== +prettier@^2.7.1, prettier@^2.8.4: + version "2.8.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3" + integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== pretty-bytes@^5.3.0: version "5.6.0" @@ -6877,11 +6491,6 @@ process-on-spawn@^1.0.0: dependencies: fromentries "^1.2.0" -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - promise-all-reject-late@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" @@ -6961,25 +6570,6 @@ q@^1.5.1: resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== -qqjs@^0.3.10: - version "0.3.11" - resolved "https://registry.npmjs.org/qqjs/-/qqjs-0.3.11.tgz#795b9f7d00807d75c391b1241b5be3077143d9ea" - integrity sha512-pB2X5AduTl78J+xRSxQiEmga1jQV0j43jOPs/MTgTLApGFEOn6NgdE2dEjp7nvDtjkIOZbvFIojAiYUx6ep3zg== - dependencies: - chalk "^2.4.1" - debug "^4.1.1" - execa "^0.10.0" - fs-extra "^6.0.1" - get-stream "^5.1.0" - glob "^7.1.2" - globby "^10.0.1" - http-call "^5.1.2" - load-json-file "^6.2.0" - pkg-dir "^4.2.0" - tar-fs "^2.0.0" - tmp "^0.1.0" - write-json-file "^4.1.1" - querystring@0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" @@ -7146,7 +6736,7 @@ regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" -regexpp@^3.1.0, regexpp@^3.2.0: +regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -7249,7 +6839,7 @@ reusify@^1.0.4: resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@2, rimraf@^2.6.3: +rimraf@2: version "2.7.1" resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -7536,15 +7126,6 @@ slash@^3.0.0: resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" @@ -7593,7 +7174,7 @@ socks@^2.3.3, socks@^2.6.2: ip "^2.0.0" smart-buffer "^4.2.0" -sort-keys@^4.0.0, sort-keys@^4.2.0: +sort-keys@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18" integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== @@ -7810,11 +7391,6 @@ strip-bom@^4.0.0: resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -7876,17 +7452,6 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -table@^6.0.9: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - taketalk@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/taketalk/-/taketalk-1.0.0.tgz#b4d4f0deed206ae7df775b129ea2ca6de52f26dd" @@ -7895,17 +7460,7 @@ taketalk@^1.0.0: get-stdin "^4.0.1" minimist "^1.1.0" -tar-fs@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4, tar-stream@^2.2.0: +tar-stream@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== @@ -7971,13 +7526,6 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" - integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== - dependencies: - rimraf "^2.6.3" - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -8043,7 +7591,7 @@ ts-json-schema-generator@^1.2.0: safe-stable-stringify "^2.4.1" typescript "~4.9.3" -ts-node@^10.0.0, ts-node@^10.4.0, ts-node@^10.8.1: +ts-node@^10.0.0, ts-node@^10.4.0, ts-node@^10.8.1, ts-node@^10.9.1: version "10.9.1" resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== @@ -8082,7 +7630,7 @@ tslib@^1, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.1, tslib@^2.4.1, tslib@^2.5.0: +tslib@^2, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.1, tslib@^2.4.1, tslib@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== @@ -8337,11 +7885,6 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -8576,18 +8119,6 @@ write-file-atomic@^4.0.0: imurmurhash "^0.1.4" signal-exit "^3.0.7" -write-json-file@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz#908493d6fd23225344af324016e4ca8f702dd12d" - integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ== - dependencies: - detect-indent "^6.0.0" - graceful-fs "^4.1.15" - is-plain-obj "^2.0.0" - make-dir "^3.0.0" - sort-keys "^4.0.0" - write-file-atomic "^3.0.0" - xml2js@0.4.19: version "0.4.19" resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" @@ -8725,7 +8256,7 @@ yargs@^17.0.0, yargs@^17.3.1: y18n "^5.0.5" yargs-parser "^21.1.1" -yeoman-environment@^3.11.1, yeoman-environment@^3.13.0, yeoman-environment@^3.9.1: +yeoman-environment@^3.11.1, yeoman-environment@^3.15.1, yeoman-environment@^3.9.1: version "3.15.1" resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-3.15.1.tgz#b094b858bfbd24db8061d255d0e7871224190474" integrity sha512-P4DTQxqCxNTBD7gph+P+dIckBdx0xyHmvOYgO3vsc9/Sl67KJ6QInz5Qv6tlXET3CFFJ/YxPIdl9rKb0XwTRLg== @@ -8767,7 +8298,7 @@ yeoman-environment@^3.11.1, yeoman-environment@^3.13.0, yeoman-environment@^3.9. textextensions "^5.12.0" untildify "^4.0.0" -yeoman-generator@^5.6.1, yeoman-generator@^5.7.0: +yeoman-generator@^5.6.1, yeoman-generator@^5.8.0: version "5.8.0" resolved "https://registry.yarnpkg.com/yeoman-generator/-/yeoman-generator-5.8.0.tgz#a1951ce0d95555f94adc5975a517d4741b5ce24d" integrity sha512-dsrwFn9/c2/MOe80sa2nKfbZd/GaPTgmmehdgkFifs1VN/I7qPsW2xcBfvSkHNGK+PZly7uHyH8kaVYSFNUDhQ==