diff --git a/package.json b/package.json index dfcc1054..2dc816e2 100644 --- a/package.json +++ b/package.json @@ -7,18 +7,17 @@ "dependencies": { "@oclif/core": "^2.15.0", "@salesforce/apex-node": "^2.1.0", - "@salesforce/core": "^5.3.16", + "@salesforce/core": "^5.3.18", "@salesforce/kit": "^3.0.15", "@salesforce/sf-plugins-core": "^3.1.22", - "@salesforce/source-deploy-retrieve": "^9.8.1", - "@salesforce/source-tracking": "^4.2.20", + "@salesforce/source-deploy-retrieve": "^9.8.4", + "@salesforce/source-tracking": "^4.3.0", "chalk": "^4.1.2", - "shelljs": "^0.8.5", "tslib": "^2" }, "devDependencies": { "@oclif/plugin-command-snapshot": "^4.0.12", - "@salesforce/cli-plugins-testkit": "^4.4.12", + "@salesforce/cli-plugins-testkit": "^5.0.2", "@salesforce/dev-scripts": "^6.0.3", "@salesforce/plugin-command-reference": "^3.0.40", "@salesforce/plugin-settings": "^1.4.37", @@ -29,9 +28,8 @@ "@salesforce/ts-sinon": "1.4.15", "@salesforce/ts-types": "^2.0.8", "@swc/core": "1.3.39", - "@types/shelljs": "^0.8.14", "cross-env": "^7.0.3", - "eslint-plugin-sf-plugin": "^1.16.13", + "eslint-plugin-sf-plugin": "^1.16.14", "jsforce": "^2.0.0-beta.28", "oclif": "^3.16.0", "shx": "0.3.4", diff --git a/src/commands/deploy.ts b/src/commands/deploy.ts index f29fed1c..178b34aa 100644 --- a/src/commands/deploy.ts +++ b/src/commands/deploy.ts @@ -9,6 +9,7 @@ import { EOL } from 'node:os'; import { writeFile, readFile } from 'node:fs/promises'; import { existsSync } from 'node:fs'; +import { exec } from 'node:child_process'; import { Hook } from '@oclif/core'; import { Messages } from '@salesforce/core'; import { Env, parseJsonMap } from '@salesforce/kit'; @@ -21,9 +22,7 @@ import { SfHook, Flags, } from '@salesforce/sf-plugins-core'; -import { exec } from 'shelljs'; import { DeployerResult } from '@salesforce/sf-plugins-core/lib/deployer'; - Messages.importMessagesDirectory(__dirname); const messages = Messages.loadMessages('@salesforce/plugin-deploy-retrieve', 'deploy'); @@ -144,8 +143,8 @@ export default class Deploy extends SfCommand { const addition = `${EOL}${EOL}# Deploy Options${EOL}${DEPLOY_OPTIONS_FILE}${EOL}`; await writeFile('.gitignore', `${gitignore}${addition}`); } - exec('git add .gitignore', { silent: true }); - exec(`git commit -am "Add ${DEPLOY_OPTIONS_FILE} to .gitignore"`, { silent: true }); + exec('git add .gitignore'); + exec(`git commit -am "Add ${DEPLOY_OPTIONS_FILE} to .gitignore"`); } // this used to be async when it was using fs-extra. Presered public api diff --git a/test/nuts/delete/source.nut.ts b/test/nuts/delete/source.nut.ts index bc2562e8..020f764d 100644 --- a/test/nuts/delete/source.nut.ts +++ b/test/nuts/delete/source.nut.ts @@ -10,7 +10,6 @@ import * as path from 'node:path'; import { expect } from 'chai'; import { execCmd, TestSession } from '@salesforce/cli-plugins-testkit'; import { SourceTestkit } from '@salesforce/source-testkit'; -import { exec } from 'shelljs'; import { FileResponse } from '@salesforce/source-deploy-retrieve'; import { AuthInfo, Connection } from '@salesforce/core'; import { ensureArray } from '@salesforce/ts-types'; @@ -40,7 +39,7 @@ describe('CustomLabels', () => { scratchOrgs: [{ setDefault: true, config: path.join('config', 'project-scratch-def.json') }], devhubAuthStrategy: 'AUTO', }); - execCmd('force:source:deploy --sourcepath force-app', { ensureExitCode: 0 }); + execCmd('project:deploy:start --source-dir force-app', { ensureExitCode: 0 }); }); after(async () => { @@ -102,8 +101,9 @@ describe('project delete source NUTs', () => { const pathToClass = path.join(testkit.projectDir, output, `${apexName}.cls`); execCmd(`force:apex:class:create --classname ${apexName} --outputdir ${output} --api-version 58.0`, { ensureExitCode: 0, + cli: 'sf', }); - execCmd(`force:source:deploy -m ApexClass:${apexName}`, { ensureExitCode: 0 }); + execCmd(`project:deploy:start -m ApexClass:${apexName}`, { ensureExitCode: 0 }); return { apexName, output, pathToClass }; }; @@ -112,7 +112,7 @@ describe('project delete source NUTs', () => { nut: __filename, repository: 'https://github.com/trailheadapps/dreamhouse-lwc.git', }); - execCmd('force:source:deploy --sourcepath force-app', { ensureExitCode: 0 }); + execCmd('project:deploy:start --source-dir force-app', { ensureExitCode: 0 }); }); after(async () => { @@ -184,16 +184,14 @@ describe('project delete source NUTs', () => { it('should source:delete a remote-only ApexClass from the org', async () => { const { apexName, pathToClass } = createApexClass(); const query = () => - JSON.parse( - exec( - `sf data: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(); + execCmd<{ records: Array<{ IsNameObsolete: boolean }> }>( + `data:query -q "SELECT IsNameObsolete FROM SourceMember WHERE MemberType='ApexClass' AND MemberName='${apexName}' LIMIT 1" -t --json`, + { silent: true, cli: 'sf', ensureExitCode: 0 } + ); + + let soql = query().jsonOutput?.result; // the ApexClass is present in the org - expect(soql.result.records[0].IsNameObsolete).to.be.false; + expect(soql?.records[0].IsNameObsolete).to.be.false; await testkit.deleteGlobs(['force-app/main/default/classes/myApexClass.*']); const response = execCmd( `project:delete:source --json --no-prompt --metadata ApexClass:${apexName}`, @@ -204,9 +202,9 @@ describe('project delete source NUTs', () => { // 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(); + soql = query().jsonOutput?.result; // the apex class has been deleted in the org - expect(soql.result.records[0].IsNameObsolete).to.be.true; + expect(soql?.records[0].IsNameObsolete).to.be.true; }); it('should NOT delete local files with --checkonly', () => { @@ -241,7 +239,7 @@ describe('project delete source NUTs', () => { // 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}`); + execCmd(`project:deploy:start --source-dir ${lwcPath}`, { cli: 'sf', ensureExitCode: 0 }); const deleteResult = execCmd<{ deletedSource: [FileResponse] }>( `project:delete:source -p ${lwcPath} --no-prompt --json` ).jsonOutput?.result; @@ -261,7 +259,7 @@ describe('project delete source NUTs', () => { 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}`); + execCmd(`project:deploy:start --source-dir ${lwcPath1} --source-dir ${lwcPath2}`); // delete both helper.js files at the same time const deleteResult = execCmd<{ deletedSource: FileResponse[] }>( // eslint-disable-next-line sf-plugin/no-execcmd-double-quotes @@ -286,8 +284,8 @@ describe('project delete source NUTs', () => { 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}`); + execCmd(`force:lightning:component:create -n mylwc --type lwc -d ${lwcPath}`, { cli: 'sf', ensureExitCode: 0 }); + execCmd(`project:deploy:start --source-dir ${mylwcPath}`); expect(await isNameObsolete(testkit.username, 'LightningComponentBundle', 'mylwc')).to.be.false; const deleteResult = execCmd<{ deletedSource: [FileResponse] }>( `project:delete:source -p ${mylwcPath} --no-prompt --json` diff --git a/test/nuts/destructive/destructiveChanges.nut.ts b/test/nuts/destructive/destructiveChanges.nut.ts index 74956225..053f2c5a 100644 --- a/test/nuts/destructive/destructiveChanges.nut.ts +++ b/test/nuts/destructive/destructiveChanges.nut.ts @@ -33,6 +33,7 @@ describe('project deploy start --destructive NUTs', () => { const pathToClass = path.join(testkit.projectDir, output, `${apexName}.cls`); execCmd(`force:apex:class:create --classname ${apexName} --outputdir ${output} --api-version 58.0`, { ensureExitCode: 0, + cli: 'sf', }); execCmd(`project:deploy:start -m ApexClass:${apexName}`, { ensureExitCode: 0 }); return { apexName, output, pathToClass }; diff --git a/test/nuts/generateNuts.ts b/test/nuts/generateNuts.ts index 9dc95e4d..cc45ab6f 100644 --- a/test/nuts/generateNuts.ts +++ b/test/nuts/generateNuts.ts @@ -7,7 +7,6 @@ import * as path from 'node:path'; import * as fs from 'node:fs'; -import * as shelljs from 'shelljs'; import { RepoConfig, TEST_REPOS_MAP } from './testMatrix'; const SEED_FILTER = process.env.PLUGIN_DEPLOY_RETRIEVE_SEED_FILTER ?? ''; @@ -41,7 +40,7 @@ function generateNut(generatedDir: string, seedName: string, seedContents: strin function generateNuts(): void { const generatedDir = path.resolve(__dirname, 'generated'); - shelljs.rm('-rf', generatedDir); + fs.rmSync(generatedDir, { recursive: true, force: true }); fs.mkdirSync(generatedDir, { recursive: true }); const seeds = getSeedFiles(); for (const seed of seeds) { diff --git a/test/nuts/retrieve/metadata.nut.ts b/test/nuts/retrieve/metadata.nut.ts index 93a06aba..bb51e45f 100644 --- a/test/nuts/retrieve/metadata.nut.ts +++ b/test/nuts/retrieve/metadata.nut.ts @@ -7,8 +7,8 @@ import * as path from 'node:path'; import * as fs from 'node:fs'; +import { execCmd } from '@salesforce/cli-plugins-testkit'; import { SourceTestkit } from '@salesforce/source-testkit'; -import { exec } from 'shelljs'; import { expect } from 'chai'; const ELECTRON = { id: '04t6A000002zgKSQAY', name: 'ElectronBranding' }; @@ -78,7 +78,7 @@ describe('retrieve metadata NUTs', () => { describe('--package-name flag', () => { it('should retrieve an installed package', async () => { - exec(`sf force:package:install --noprompt --package ${ELECTRON.id} --wait 5 --json`, { silent: true }); + execCmd(`force:package:install --noprompt --package ${ELECTRON.id} --wait 5 --json`, { silent: true, cli: 'sf' }); await testkit.retrieve({ args: `--package-name "${ELECTRON.name}"` }); await testkit.expect.packagesToBeRetrieved([ELECTRON.name]); diff --git a/test/nuts/tracking/basics.nut.ts b/test/nuts/tracking/basics.nut.ts index 7de1dd55..d0bf10ee 100644 --- a/test/nuts/tracking/basics.nut.ts +++ b/test/nuts/tracking/basics.nut.ts @@ -49,6 +49,7 @@ describe('end-to-end-test for tracking with an org (single packageDir)', () => { it('detects the initial metadata status', () => { const result = execCmd('force:source:status --json', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; assert(Array.isArray(result)); // the fields should be populated @@ -92,11 +93,13 @@ describe('end-to-end-test for tracking with an org (single packageDir)', () => { it('sees no local changes (all were committed from push), but profile updated in remote', () => { const localResult = execCmd('force:source:status --json --local', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect(localResult?.filter(filterIgnored)).to.deep.equal([]); const remoteResult = execCmd('force:source:status --json --remote', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect(remoteResult?.some((item) => item.type === 'Profile')).to.equal(true); }); @@ -110,6 +113,7 @@ describe('end-to-end-test for tracking with an org (single packageDir)', () => { it('sf sees no remote changes (all were committed from push) except Profile', () => { const remoteResult = execCmd('force:source:status --json --remote', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect(remoteResult?.some((item) => item.type === 'Profile')).to.equal(true); }); @@ -127,6 +131,7 @@ describe('end-to-end-test for tracking with an org (single packageDir)', () => { it('sees no local or remote changes', () => { const result = execCmd('force:source:status --json', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect(result?.filter((r) => r.type === 'Profile').filter(filterIgnored), JSON.stringify(result)).to.have.length( 0 @@ -155,6 +160,7 @@ describe('end-to-end-test for tracking with an org (single packageDir)', () => { ]); const result = execCmd('force:source:status --json --local', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect(result?.filter(filterIgnored)).to.deep.equal([ { @@ -199,6 +205,7 @@ describe('end-to-end-test for tracking with an org (single packageDir)', () => { it('does not see any change in remote status', () => { const result = execCmd('force:source:status --json --remote', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect( result?.filter((r) => r.fullName === 'TestOrderController'), @@ -224,6 +231,7 @@ describe('end-to-end-test for tracking with an org (single packageDir)', () => { it('sees no local changes', () => { const result = execCmd('force:source:status --json --local', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect(result?.filter(filterIgnored), JSON.stringify(result)).to.be.an.instanceof(Array).with.length(0); }); @@ -243,6 +251,7 @@ describe('end-to-end-test for tracking with an org (single packageDir)', () => { assert(hubUsername, 'hubUsername should be defined'); const failure = execCmd(`force:source:status -u ${hubUsername} --remote --json`, { ensureExitCode: 1, + cli: 'sf', }).jsonOutput as unknown as { name: string }; // command5 is removing `Error` from the end of the error names. expect(failure.name).to.include('NonSourceTrackedOrg'); @@ -281,6 +290,7 @@ describe('end-to-end-test for tracking with an org (single packageDir)', () => { it('sees no local changes', () => { const result = execCmd('force:source:status --json --local', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect(result?.filter(filterIgnored), JSON.stringify(result)).to.be.an.instanceof(Array).with.length(2); }); diff --git a/test/nuts/tracking/conflicts.nut.ts b/test/nuts/tracking/conflicts.nut.ts index 2c5a5802..dbd91027 100644 --- a/test/nuts/tracking/conflicts.nut.ts +++ b/test/nuts/tracking/conflicts.nut.ts @@ -76,6 +76,7 @@ describe('conflict detection and resolution', () => { }); const result = execCmd('force:source:status --json --remote', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect( result?.filter((r) => r.type === 'CustomApplication'), @@ -99,6 +100,7 @@ describe('conflict detection and resolution', () => { it('can see the conflict in status', () => { const result = execCmd('force:source:status --json', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result.filter((app) => app.type === 'CustomApplication'); // json is not sorted. This relies on the implementation of getConflicts() expect(result).to.deep.equal([ diff --git a/test/nuts/tracking/deleteResetTracking.nut.ts b/test/nuts/tracking/deleteResetTracking.nut.ts index dae86edc..0b66862f 100644 --- a/test/nuts/tracking/deleteResetTracking.nut.ts +++ b/test/nuts/tracking/deleteResetTracking.nut.ts @@ -66,6 +66,7 @@ describe('reset and clear tracking', () => { it('runs status to start tracking', () => { const result = execCmd('force:source:status --json', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect(result).to.have.length.greaterThan(100); // ebikes is big }); @@ -109,7 +110,7 @@ describe('reset and clear tracking', () => { } }); // gets tracking files from server - execCmd('force:source:status --json --remote', { ensureExitCode: 0 }); + execCmd('force:source:status --json --remote', { ensureExitCode: 0, cli: 'sf' }); const revisions = await getRevisionsAsArray(); const revisionFile = JSON.parse( await fs.promises.readFile(path.join(trackingFileFolder, 'maxRevision.json'), 'utf8') diff --git a/test/nuts/tracking/forceIgnore.nut.ts b/test/nuts/tracking/forceIgnore.nut.ts index d11beca0..baa88934 100644 --- a/test/nuts/tracking/forceIgnore.nut.ts +++ b/test/nuts/tracking/forceIgnore.nut.ts @@ -8,7 +8,6 @@ import * as path from 'node:path'; import * as fs from 'node:fs'; import { expect } from 'chai'; -import * as shell from 'shelljs'; import { execCmd, TestSession } from '@salesforce/cli-plugins-testkit'; import { AuthInfo, Connection } from '@salesforce/core'; @@ -42,8 +41,8 @@ describe('forceignore changes', () => { }); execCmd(`force:apex:class:create -n IgnoreTest --outputdir ${classdir} --api-version 58.0`, { - cli: 'sfdx', ensureExitCode: 0, + cli: 'sf', }); originalForceIgnore = await fs.promises.readFile(path.join(session.project.dir, '.forceignore'), 'utf8'); conn = await Connection.create({ @@ -73,6 +72,7 @@ describe('forceignore changes', () => { it('shows the file in status as ignored', () => { const output = execCmd('force:source:status --json', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect(output, JSON.stringify(output)).to.deep.include({ state: 'Local Add', @@ -107,9 +107,10 @@ describe('forceignore changes', () => { await fs.promises.writeFile(path.join(session.project.dir, '.forceignore'), newForceIgnore); // add a file in the local source - shell.exec(`sfdx force:apex:class:create -n UnIgnoreTest --outputdir ${classdir} --api-version 58.0`, { + execCmd(`force:apex:class:create -n UnIgnoreTest --outputdir ${classdir} --api-version 58.0`, { cwd: session.project.dir, silent: true, + cli: 'sf', }); // another error when there's nothing to push const output = execCmd('deploy:metadata --json', { @@ -157,6 +158,7 @@ describe('forceignore changes', () => { // gets file into source tracking const statusOutput = execCmd('force:source:status --json --remote', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect(statusOutput?.some((result) => result.fullName === 'CreatedClass')).to.equal(true); }); diff --git a/test/nuts/tracking/lwc.nut.ts b/test/nuts/tracking/lwc.nut.ts index d73bcf93..9795ff10 100644 --- a/test/nuts/tracking/lwc.nut.ts +++ b/test/nuts/tracking/lwc.nut.ts @@ -58,6 +58,7 @@ describe('lwc', () => { ); const result = execCmd('force:source:status --json', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect(result?.find((r) => r.filePath === cssPathRelative)).to.have.property('actualState', 'Changed'); }); @@ -87,6 +88,7 @@ describe('lwc', () => { it('sfdx sees no local changes', () => { const result = execCmd('force:source:status --json', { ensureExitCode: 0, + cli: 'sf', }) .jsonOutput?.result.filter((r) => r.origin === 'Local') .filter(filterIgnored); @@ -106,6 +108,7 @@ describe('lwc', () => { await fs.promises.rm(cssPathAbsolute); const result = execCmd('force:source:status --json', { ensureExitCode: 0, + cli: 'sf', }) .jsonOutput?.result.filter(filterIgnored) .find((r) => r.filePath === cssPathRelative); @@ -137,6 +140,7 @@ describe('lwc', () => { it('sees no local changes', () => { const result = execCmd('force:source:status --json', { ensureExitCode: 0, + cli: 'sf', }) .jsonOutput?.result.filter((r) => r.origin === 'Local') .filter(filterIgnored); @@ -167,6 +171,7 @@ describe('lwc', () => { ); const result = execCmd('force:source:status --json', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result.filter((r) => r.origin === 'Local'); assert(result); expect(result.filter(filterIgnored)).to.have.length(4); @@ -190,6 +195,7 @@ describe('lwc', () => { it('sees no local changes', () => { const result = execCmd('force:source:status --json', { ensureExitCode: 0, + cli: 'sf', }) .jsonOutput?.result.filter((r) => r.origin === 'Local') .filter(filterIgnored); diff --git a/test/nuts/tracking/remoteChanges.nut.ts b/test/nuts/tracking/remoteChanges.nut.ts index 94403f31..2c6f6425 100644 --- a/test/nuts/tracking/remoteChanges.nut.ts +++ b/test/nuts/tracking/remoteChanges.nut.ts @@ -68,6 +68,7 @@ describe('remote changes', () => { it('sees no local changes (all were committed from deploy)', () => { const localResult = execCmd('force:source:status --json --local', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect(localResult?.filter(filterIgnored)).to.deep.equal([]); }); @@ -108,6 +109,7 @@ describe('remote changes', () => { it('sfdx can see the delete in status', () => { const result = execCmd('force:source:status --json --remote', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; // it shows up as one class on the server, but 2 files when pulled expect( @@ -125,6 +127,7 @@ describe('remote changes', () => { it('sfdx does not see any change in local status', () => { const result = execCmd('force:source:status --json --local', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect(result?.filter(filterIgnored)).to.deep.equal([]); }); @@ -159,11 +162,13 @@ describe('remote changes', () => { it('sees correct local and remote status', () => { const remoteResult = execCmd('force:source:status --json --remote', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect(remoteResult?.filter((r) => r.state.includes('Remote Deleted'))).to.deep.equal([]); const localStatus = execCmd('force:source:status --json --local', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect(localStatus?.filter(filterIgnored)).to.deep.equal([]); }); @@ -197,6 +202,7 @@ describe('remote changes', () => { it('can see the add in status', () => { const result = execCmd('force:source:status --json --remote', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect( result?.some((r) => r.fullName === className), @@ -224,6 +230,7 @@ describe('remote changes', () => { it('sfdx sees correct remote status', () => { const remoteResult = execCmd('force:source:status --json --remote', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect( remoteResult?.filter((r) => r.fullName === className), @@ -233,6 +240,7 @@ describe('remote changes', () => { it('sfdx sees correct local status', () => { const localStatus = execCmd('force:source:status --json --local', { ensureExitCode: 0, + cli: 'sf', }).jsonOutput?.result; expect(localStatus?.filter(filterIgnored)).to.deep.equal([]); }); diff --git a/yarn.lock b/yarn.lock index b2511724..92b05e92 100644 --- a/yarn.lock +++ b/yarn.lock @@ -941,7 +941,7 @@ istanbul-lib-report "^3.0.1" istanbul-reports "^3.1.6" -"@salesforce/cli-plugins-testkit@^4.4.12", "@salesforce/cli-plugins-testkit@^4.4.8": +"@salesforce/cli-plugins-testkit@^4.4.8": version "4.4.12" resolved "https://registry.yarnpkg.com/@salesforce/cli-plugins-testkit/-/cli-plugins-testkit-4.4.12.tgz#425132a4cd49b5aacb979df07af987b338ec00ae" integrity sha512-k0jJYqB0PazmVyhNBau8FtJDa3+4EbhvD8F3u+yZ71jjPkp7YLKqtxfs1y7P3LCrmtel8JE3faHTfMaahdK96Q== @@ -956,15 +956,30 @@ strip-ansi "6.0.1" ts-retry-promise "^0.7.1" -"@salesforce/core@^5.2.0", "@salesforce/core@^5.2.6", "@salesforce/core@^5.3.1", "@salesforce/core@^5.3.10", "@salesforce/core@^5.3.14", "@salesforce/core@^5.3.16": - version "5.3.17" - resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-5.3.17.tgz#fe7e5b89bdfffc9c1634e0371fab6115b23fe312" - integrity sha512-3BYdpRwQrtaTNHINk+NSrXwlr0xZjKSkJWhMeryjGyTGf9YPRu1JNawl6PPbEpGCQp2y+NLUdp6vMy64jwIDBg== +"@salesforce/cli-plugins-testkit@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@salesforce/cli-plugins-testkit/-/cli-plugins-testkit-5.0.2.tgz#be35c0b449223ee50e395aba7e1b4ccb1a5e49d7" + integrity sha512-piHWPnbkwytudtc3VntfyECa3NzxngecM7/hka2rooLWs7NZCLcJoAEvYDWNRGgNa0Yw6gefBJVNivoVpfNSKQ== + dependencies: + "@salesforce/core" "^5.3.17" + "@salesforce/kit" "^3.0.15" + "@salesforce/ts-types" "^2.0.6" + "@types/shelljs" "^0.8.14" + debug "^4.3.1" + jszip "^3.10.1" + shelljs "^0.8.4" + strip-ansi "6.0.1" + ts-retry-promise "^0.7.1" + +"@salesforce/core@^5.2.0", "@salesforce/core@^5.2.6", "@salesforce/core@^5.3.1", "@salesforce/core@^5.3.10", "@salesforce/core@^5.3.14", "@salesforce/core@^5.3.17", "@salesforce/core@^5.3.18": + version "5.3.18" + resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-5.3.18.tgz#c0b7b59fbef7f0689e88968c614dd1ae2c420f02" + integrity sha512-/Ag7elFngTT13PRblSPJPB2Q+xk3jR2SX8bYa83fcQljVF7ApGB5qtFpauXmUv8lgRnN+F01HNqM16iszAMP9w== dependencies: "@salesforce/kit" "^3.0.15" "@salesforce/schemas" "^1.6.1" "@salesforce/ts-types" "^2.0.9" - "@types/semver" "^7.5.3" + "@types/semver" "^7.5.4" ajv "^8.12.0" change-case "^4.1.2" faye "^1.4.0" @@ -1113,12 +1128,12 @@ chalk "^4" inquirer "^8.2.5" -"@salesforce/source-deploy-retrieve@^9.7.2", "@salesforce/source-deploy-retrieve@^9.7.24", "@salesforce/source-deploy-retrieve@^9.8.1": - version "9.8.3" - resolved "https://registry.yarnpkg.com/@salesforce/source-deploy-retrieve/-/source-deploy-retrieve-9.8.3.tgz#1d6aa9804350c00289dfde648945bdac756faab6" - integrity sha512-GEVfWlwSYdrB3t2Gozxe7X6CRd/dVZ91XQkv8hQJcIUwvSmw0uVH9+V0TYPUJN3JCIyug5Z7f6McO8LTI6jd/Q== +"@salesforce/source-deploy-retrieve@^9.7.2", "@salesforce/source-deploy-retrieve@^9.7.24", "@salesforce/source-deploy-retrieve@^9.8.4": + version "9.8.4" + resolved "https://registry.yarnpkg.com/@salesforce/source-deploy-retrieve/-/source-deploy-retrieve-9.8.4.tgz#e6d21d8f2e0b44fae242e31ef8b4f31991a07deb" + integrity sha512-/g/WkUFCogCANnKkeHmQyXpAbIy+A2htEYliVaoxg3UccDqHCZd5Gmlk6Gwsd03YsLAt249bay5mAokD7y39sQ== dependencies: - "@salesforce/core" "^5.3.16" + "@salesforce/core" "^5.3.17" "@salesforce/kit" "^3.0.15" "@salesforce/ts-types" "^2.0.9" fast-levenshtein "^3.0.0" @@ -1147,14 +1162,14 @@ shelljs "^0.8.4" sinon "^10.0.0" -"@salesforce/source-tracking@^4.2.10", "@salesforce/source-tracking@^4.2.20": - version "4.2.20" - resolved "https://registry.yarnpkg.com/@salesforce/source-tracking/-/source-tracking-4.2.20.tgz#698fb0a0aa56be22daa9a85987aa1c88982d0d30" - integrity sha512-WWWtoYuX8R+cNY1nfX0XI2e7kbRNzQxX9kiVrA+66fR0ODEz2m4AJBQg4uO8bXJssND6a66yfEZi1jvdpYaiGA== +"@salesforce/source-tracking@^4.2.10", "@salesforce/source-tracking@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@salesforce/source-tracking/-/source-tracking-4.3.0.tgz#dc281b260d28f831042475468aa0b0350d7328a7" + integrity sha512-1ysyxU7lLi2pQNgEQbLpfSciLhsYrYwVu+VEq+tCXzm0TfmyscT1a1vcyykOzztpWMtKNQW/HdJEaAPBPd9FVg== dependencies: - "@salesforce/core" "^5.3.16" + "@salesforce/core" "^5.3.18" "@salesforce/kit" "^3.0.15" - "@salesforce/source-deploy-retrieve" "^9.8.1" + "@salesforce/source-deploy-retrieve" "^9.8.4" "@salesforce/ts-types" "^2.0.9" fast-xml-parser "^4.2.5" graceful-fs "^4.2.11" @@ -1556,7 +1571,7 @@ dependencies: "@types/node" "*" -"@types/semver@^7.3.12", "@types/semver@^7.5.0", "@types/semver@^7.5.3": +"@types/semver@^7.3.12", "@types/semver@^7.5.0", "@types/semver@^7.5.4": version "7.5.4" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.4.tgz#0a41252ad431c473158b22f9bfb9a63df7541cff" integrity sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ== @@ -3402,12 +3417,12 @@ eslint-plugin-jsdoc@^46.8.2: semver "^7.5.4" spdx-expression-parse "^3.0.1" -eslint-plugin-sf-plugin@^1.16.13: - version "1.16.13" - resolved "https://registry.yarnpkg.com/eslint-plugin-sf-plugin/-/eslint-plugin-sf-plugin-1.16.13.tgz#e3ba9ee0014c96b414af67c6aa9e8578451a01fd" - integrity sha512-Cj8r7GXrSrQ7iia78sBOGZH7VFa2/7wl5a3dtoVyIx3bp/Oq7P1yOSPofg13bdH2gZr4O+/3JNxXXvj+kqvE9A== +eslint-plugin-sf-plugin@^1.16.14: + version "1.16.14" + resolved "https://registry.yarnpkg.com/eslint-plugin-sf-plugin/-/eslint-plugin-sf-plugin-1.16.14.tgz#64138f6c597ad7b750d9d7615894e2fe504852ec" + integrity sha512-numvHHhJjExz4ojxK3O25G8Vh8pXtMgZzwEaKGGsKaOJFm4rmSS2NabmfkRPYX2NCO/xn4eNHm1iGTnnQywGvg== dependencies: - "@salesforce/core" "^5.3.14" + "@salesforce/core" "^5.3.17" "@typescript-eslint/utils" "^5.59.11" eslint-plugin-unicorn@^49.0.0: