diff --git a/command-snapshot.json b/command-snapshot.json index 676722a2..d3c815ca 100644 --- a/command-snapshot.json +++ b/command-snapshot.json @@ -91,9 +91,13 @@ "manifest", "metadata", "package-name", + "single-package", "source-dir", + "target-metadata-dir", "target-org", - "wait" + "unzip", + "wait", + "zip-file-name" ], "alias": [] }, diff --git a/messages/retrieve.metadata.md b/messages/retrieve.metadata.md index b1bd7c44..f7708e6c 100644 --- a/messages/retrieve.metadata.md +++ b/messages/retrieve.metadata.md @@ -51,6 +51,14 @@ To retrieve multiple metadata components, either use multiple --metadata <%= config.bin %> <%= command.id %> --package-name Package1 "PackageName With Spaces" Package3 <%= config.bin %> <%= command.id %> --package-name Package1 --package-name "PackageName With Spaces" --package-name Package3 +- Retrieve using Metadata API + + <%= config.bin %> <%= command.id %> --source-dir force-app --target-metadata-dir output + +- Retrieve using Metadata API and automatically unzip the contents + + <%= config.bin %> <%= command.id %> --source-dir force-app --target-metadata-dir output --unzip + # flags.api-version.summary Target API version for the retrieve. @@ -65,7 +73,7 @@ Ignore conflicts and retrieve and save files to your local filesystem, even if t # flags.ignore-conflicts.description -This flag applies only to orgs that allow source tracking. It has no effect on orgs that don't allow it, such as production orgs. +This flag applies only to orgs that allow source tracking. It has no effect on orgs that don't allow it, such as production orgs. # flags.manifest.summary @@ -107,6 +115,26 @@ Number of minutes to wait for the command to complete and display results to the If the command continues to run after the wait period, the CLI returns control of the terminal window to you. +# flags.metadata-dir.summary + +Root of directory or zip file of metadata formatted files to retrieve. + +# flags.single-package.summary + +Indicates that the zip file points to a directory structure for a single package. + +# flags.target-metadata-dir.summary + +Directory root for the retrieved files. + +# flags.unzip.summary + +Extract all files from the retrieved zip file. + +# flags.zip-file-name.summary + +File name to use for the retrieved zip file. + # spinner.start Preparing retrieve request @@ -128,3 +156,11 @@ There are changes in your local files that conflict with the org changes you're - To overwrite the local changes, rerun this command with the --ignore-conflicts flag. - To overwrite the remote changes, run the "sf deploy metadata" command with the --ignore-conflicts flag. + +# info.WroteZipFile + +Wrote retrieve zip file to %s. + +# info.ExtractedZipFile + +Extracted %s to %s. diff --git a/messages/validation.md b/messages/validation.md new file mode 100644 index 00000000..cb017999 --- /dev/null +++ b/messages/validation.md @@ -0,0 +1,11 @@ +# error.InvalidFlagPath + +Invalid path specified: %s. %s + +# error.ExpectedDirectory + +Expected a directory but found a file. + +# error.ExpectedFileOrDirToExist + +Expected a file or directory to exist. diff --git a/package.json b/package.json index 7112b0d8..f0d34255 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Salesforce", "bugs": "https://github.com/forcedotcom/cli/issues", "dependencies": { - "@oclif/core": "^1.15.0", + "@oclif/core": "^1.16.0", "@salesforce/core": "^3.26.1", "@salesforce/kit": "^1.5.45", "@salesforce/sf-plugins-core": "1.14.0", @@ -33,8 +33,8 @@ "@types/archiver": "^5.3.1", "@types/fs-extra": "^9.0.13", "@types/shelljs": "^0.8.11", - "@typescript-eslint/eslint-plugin": "^5.32.0", - "@typescript-eslint/parser": "^5.32.0", + "@typescript-eslint/eslint-plugin": "^5.36.2", + "@typescript-eslint/parser": "^5.36.2", "archiver": "^5.3.1", "chai": "^4.3.6", "cross-env": "^7.0.3", diff --git a/schemas/retrieve-metadata.json b/schemas/retrieve-metadata.json index 6a18e891..b41b2acc 100644 --- a/schemas/retrieve-metadata.json +++ b/schemas/retrieve-metadata.json @@ -3,66 +3,73 @@ "$ref": "#/definitions/RetrieveResultJson", "definitions": { "RetrieveResultJson": { - "type": "object", - "additionalProperties": false, - "properties": { - "files": { - "type": "array", - "items": { - "$ref": "#/definitions/FileResponse" - } - }, - "done": { - "type": "boolean" - }, - "fileProperties": { - "anyOf": [ - { - "$ref": "#/definitions/FileProperties" - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/FileProperties" - } - } - ] - }, - "id": { - "type": "string" - }, - "status": { - "$ref": "#/definitions/RequestStatus" - }, - "success": { - "type": "boolean" - }, - "messages": { - "anyOf": [ - { + "anyOf": [ + { + "type": "object", + "additionalProperties": false, + "properties": { + "files": { "type": "array", "items": { - "$ref": "#/definitions/RetrieveMessage" + "$ref": "#/definitions/FileResponse" } }, - { - "$ref": "#/definitions/RetrieveMessage" + "done": { + "type": "boolean" + }, + "fileProperties": { + "anyOf": [ + { + "$ref": "#/definitions/FileProperties" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/FileProperties" + } + } + ] + }, + "id": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/RequestStatus" + }, + "success": { + "type": "boolean" + }, + "messages": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/RetrieveMessage" + } + }, + { + "$ref": "#/definitions/RetrieveMessage" + } + ] + }, + "zipFile": { + "type": "string", + "description": "`base64` encoded string" } + }, + "required": [ + "done", + "fileProperties", + "files", + "id", + "status", + "success", + "zipFile" ] }, - "zipFile": { - "type": "string", - "description": "`base64` encoded string" + { + "$ref": "#/definitions/MetadataRetrieveResultJson" } - }, - "required": [ - "done", - "fileProperties", - "files", - "id", - "status", - "success", - "zipFile" ] }, "FileResponse": { @@ -231,6 +238,68 @@ "problem" ], "additionalProperties": false + }, + "MetadataRetrieveResultJson": { + "type": "object", + "additionalProperties": false, + "properties": { + "zipFilePath": { + "type": "string" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/definitions/FileResponse" + } + }, + "done": { + "type": "boolean" + }, + "fileProperties": { + "anyOf": [ + { + "$ref": "#/definitions/FileProperties" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/FileProperties" + } + } + ] + }, + "id": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/RequestStatus" + }, + "success": { + "type": "boolean" + }, + "messages": { + "anyOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/RetrieveMessage" + } + }, + { + "$ref": "#/definitions/RetrieveMessage" + } + ] + } + }, + "required": [ + "done", + "fileProperties", + "files", + "id", + "status", + "success", + "zipFilePath" + ] } } } \ No newline at end of file diff --git a/src/commands/deploy.ts b/src/commands/deploy.ts index 3944f033..1c957b9a 100644 --- a/src/commands/deploy.ts +++ b/src/commands/deploy.ts @@ -25,13 +25,13 @@ export default class Deploy extends SfCommand { public static summary = messages.getMessage('summary'); public static description = messages.getMessage('description'); public static examples = messages.getMessages('examples'); + public static enableJsonFlag = false; public static flags = { interactive: Flags.boolean({ summary: messages.getMessage('flags.interactive.summary'), }), }; - public static enableJsonFlag = false; public async run(): Promise { process.setMaxListeners(new Env().getNumber('SF_MAX_EVENT_LISTENERS') || 1000); diff --git a/src/commands/deploy/metadata.ts b/src/commands/deploy/metadata.ts index f78244b2..001f0d5f 100644 --- a/src/commands/deploy/metadata.ts +++ b/src/commands/deploy/metadata.ts @@ -21,6 +21,7 @@ Messages.importMessagesDirectory(__dirname); const messages = Messages.loadMessages('@salesforce/plugin-deploy-retrieve', 'deploy.metadata'); const exclusiveFlags = ['manifest', 'source-dir', 'metadata', 'metadata-dir']; + export default class DeployMetadata extends SfCommand { public static readonly description = messages.getMessage('description'); public static readonly summary = messages.getMessage('summary'); diff --git a/src/commands/retrieve/metadata.ts b/src/commands/retrieve/metadata.ts index bdadf5d5..16ebcd2c 100644 --- a/src/commands/retrieve/metadata.ts +++ b/src/commands/retrieve/metadata.ts @@ -5,13 +5,17 @@ * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ +import { rm } from 'fs/promises'; +import { join, resolve } from 'path'; + import { EnvironmentVariable, Messages, OrgConfigProperties, SfError } from '@salesforce/core'; -import { RetrieveResult, ComponentSetBuilder } from '@salesforce/source-deploy-retrieve'; +import { RetrieveResult, ComponentSetBuilder, RetrieveSetOptions } from '@salesforce/source-deploy-retrieve'; import { SfCommand, toHelpSection, Flags } from '@salesforce/sf-plugins-core'; import { getString } from '@salesforce/ts-types'; import { SourceTracking, SourceConflictError } from '@salesforce/source-tracking'; -import { RetrieveResultFormatter } from '../../utils/output'; +import { ensuredDirFlag, zipFileFlag } from '../../utils/flags'; +import { MetadataRetrieveResultFormatter, RetrieveResultFormatter } from '../../utils/output'; import { getPackageDirs } from '../../utils/project'; import { RetrieveResultJson } from '../../utils/types'; import { writeConflictTable } from '../../utils/conflicts'; @@ -57,6 +61,11 @@ export default class RetrieveMetadata extends SfCommand { summary: messages.getMessage('flags.package-name.summary'), multiple: true, }), + 'single-package': Flags.boolean({ + summary: messages.getMessage('flags.single-package.summary'), + dependsOn: ['target-metadata-dir'], + exclusive: ['ignore-conflicts'], + }), 'source-dir': Flags.string({ char: 'd', summary: messages.getMessage('flags.source-dir.summary'), @@ -64,6 +73,17 @@ export default class RetrieveMetadata extends SfCommand { multiple: true, exclusive: ['manifest', 'metadata'], }), + 'target-metadata-dir': ensuredDirFlag({ + char: 't', + summary: messages.getMessage('flags.target-metadata-dir.summary'), + relationships: [ + { + type: 'some', + flags: ['manifest', 'metadata', 'source-dir', 'package-name'], + }, + ], + exclusive: ['ignore-conflicts'], + }), 'target-org': Flags.requiredOrg({ char: 'o', summary: messages.getMessage('flags.target-org.summary'), @@ -76,6 +96,17 @@ export default class RetrieveMetadata extends SfCommand { summary: messages.getMessage('flags.wait.summary'), description: messages.getMessage('flags.wait.description'), }), + unzip: Flags.boolean({ + char: 'z', + summary: messages.getMessage('flags.unzip.summary'), + dependsOn: ['target-metadata-dir'], + exclusive: ['ignore-conflicts'], + }), + 'zip-file-name': zipFileFlag({ + summary: messages.getMessage('flags.zip-file-name.summary'), + dependsOn: ['target-metadata-dir'], + exclusive: ['ignore-conflicts'], + }), }; public static configurationVariablesSection = toHelpSection( @@ -93,12 +124,14 @@ export default class RetrieveMetadata extends SfCommand { public async run(): Promise { const { flags } = await this.parse(RetrieveMetadata); + this.spinner.start(messages.getMessage('spinner.start')); + const format = flags['target-metadata-dir'] ? 'metadata' : 'source'; const stl = await SourceTracking.create({ org: flags['target-org'], project: this.project, subscribeSDREvents: true, - ignoreConflicts: flags['ignore-conflicts'], + ignoreConflicts: format === 'metadata' || flags['ignore-conflicts'], }); const isChanges = !flags['source-dir'] && !flags['manifest'] && !flags['metadata']; const { componentSetFromNonDeletes, fileResponsesFromDelete } = isChanges @@ -127,12 +160,24 @@ export default class RetrieveMetadata extends SfCommand { componentSetFromNonDeletes.sourceApiVersion ?? componentSetFromNonDeletes.apiVersion, ]); - const retrieve = await componentSetFromNonDeletes.retrieve({ + const retrieveOpts: RetrieveSetOptions = { usernameOrConnection: flags['target-org'].getUsername(), merge: true, output: this.project.getDefaultPackage().fullPath, packageOptions: flags['package-name'], - }); + format, + }; + + const zipFileName = flags['zip-file-name'] ?? 'unpackaged.zip'; + + if (format === 'metadata') { + retrieveOpts.singlePackage = flags['single-package']; + retrieveOpts.unzip = flags.unzip; + retrieveOpts.zipFileName = zipFileName; + retrieveOpts.output = flags['target-metadata-dir']; + } + + const retrieve = await componentSetFromNonDeletes.retrieve(retrieveOpts); this.spinner.status = messages.getMessage('spinner.polling'); @@ -154,7 +199,10 @@ export default class RetrieveMetadata extends SfCommand { const result = await retrieve.pollStatus(500, flags.wait.seconds); this.spinner.stop(); - const formatter = new RetrieveResultFormatter(result, flags['package-name'], fileResponsesFromDelete); + const formatter = + format === 'source' + ? new RetrieveResultFormatter(result, flags['package-name'], fileResponsesFromDelete) + : new MetadataRetrieveResultFormatter(result, { ...flags, 'zip-file-name': zipFileName }); if (!this.jsonEnabled()) { if (result.response.status === 'Succeeded') { @@ -167,6 +215,14 @@ export default class RetrieveMetadata extends SfCommand { } } + if (format === 'metadata' && flags.unzip) { + try { + await rm(resolve(join(flags['target-metadata-dir'], zipFileName)), { recursive: true }); + } catch (e) { + // do nothing + } + } + return formatter.getJson(); } diff --git a/src/utils/flags.ts b/src/utils/flags.ts index b2a7a145..98c209a0 100644 --- a/src/utils/flags.ts +++ b/src/utils/flags.ts @@ -5,23 +5,21 @@ * 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 { Interfaces, Flags } from '@oclif/core'; +import { resolve, extname } from 'path'; +import { Flags } from '@oclif/core'; +import { Messages } from '@salesforce/core'; import { PathInfo, TestLevel } from './types'; -export const testLevelFlag = ( - opts: Partial> = {} -): Interfaces.OptionFlag => { - return Flags.build({ - char: 'l', - parse: (input: string) => Promise.resolve(input as TestLevel), - options: Object.values(TestLevel), - ...opts, - })(); -}; +Messages.importMessagesDirectory(__dirname); +const messages = Messages.load('@salesforce/plugin-deploy-retrieve', 'validation', [ + 'error.InvalidFlagPath', + 'error.ExpectedDirectory', + 'error.ExpectedFileOrDirToExist', +]); -const parsePathInfo = async (input: string, exists: boolean): Promise => { - if (exists && !fs.existsSync(input)) { - throw new Error(`No file or directory found at ${input}`); +const parsePathInfo = async (input: string, opts: { exists?: boolean }): Promise => { + if (opts.exists && !fs.existsSync(input)) { + throw messages.createError('error.InvalidFlagPath', [input, messages.getMessage('error.ExpectedFileOrDirToExist')]); } const stat = await fs.promises.stat(input); @@ -33,11 +31,65 @@ const parsePathInfo = async (input: string, exists: boolean): Promise return { type: 'file', path: input }; }; -export const fileOrDirFlag = ( - opts: { exists?: boolean } & Partial> = {} -): Interfaces.OptionFlag => { - return Flags.build({ - parse: async (input: string) => parsePathInfo(input, opts.exists), - ...opts, - })(); -}; +interface FsError extends Error { + code: string; +} + +/** + * Ensures that the specified directory exists. If it does not, it is created. + */ +async function ensureDirectoryPath(path: string): Promise { + const trimmedPath = path?.trim(); + const resolvedPath = trimmedPath?.length ? resolve(trimmedPath) : null; + + try { + const stats = await fs.promises.stat(resolvedPath); + const isDir = stats.isDirectory(); + if (!isDir) { + throw messages.createError('error.InvalidFlagPath', [path, messages.getMessage('error.ExpectedDirectory')]); + } + } catch (error: unknown) { + const err = error as FsError; + if (err.code !== 'ENOENT') { + throw err; + } else { + await fs.promises.mkdir(resolvedPath, { recursive: true }); + } + } + return resolvedPath; +} + +function resolveZipFileName(zipFileName?: string): string { + // If no file extension was provided append, '.zip' + if (zipFileName && !extname(zipFileName)) { + zipFileName += '.zip'; + } + return zipFileName || 'unpackaged.zip'; +} + +/** + * Flag value is a directory path that may or may not exist. If it doesn't exist, then it will be created. + */ +export const ensuredDirFlag = Flags.custom({ + parse: async (input) => ensureDirectoryPath(input), +}); + +export const testLevelFlag = Flags.custom({ + char: 'l', + parse: (input) => Promise.resolve(input as TestLevel), + options: Object.values(TestLevel), +}); + +/** + * Flag value could either be a file path or a directory path. + */ +export const fileOrDirFlag = Flags.custom({ + parse: async (input, _, opts) => parsePathInfo(input, opts), +}); + +/** + * Flag value is the name of a zip file that defaults to 'unpackaged.zip'. + */ +export const zipFileFlag = Flags.custom({ + parse: async (input) => Promise.resolve(resolveZipFileName(input)), +}); diff --git a/src/utils/output.ts b/src/utils/output.ts index 0dfe4307..c1885d53 100644 --- a/src/utils/output.ts +++ b/src/utils/output.ts @@ -21,10 +21,29 @@ import { } from '@salesforce/source-deploy-retrieve'; import { Messages, NamedPackageDir, SfProject } from '@salesforce/core'; import { StandardColors } from '@salesforce/sf-plugins-core'; -import { API, AsyncDeployResultJson, DeployResultJson, RetrieveResultJson, TestLevel, Verbosity } from './types'; +import { + API, + AsyncDeployResultJson, + DeployResultJson, + MetadataRetrieveResultJson, + RetrieveResultJson, + TestLevel, + Verbosity, +} from './types'; Messages.importMessagesDirectory(__dirname); -const messages = Messages.loadMessages('@salesforce/plugin-deploy-retrieve', 'deploy.async'); +const deployAsyncMessages = Messages.load('@salesforce/plugin-deploy-retrieve', 'deploy.async', [ + 'info.AsyncDeployResume', + 'info.AsyncDeployStatus', + 'info.AsyncDeployCancel', + 'info.AsyncDeployQueued', + 'info.AsyncDeployCancelQueued', +]); + +const retrieveMessages = Messages.load('@salesforce/plugin-deploy-retrieve', 'retrieve.metadata', [ + 'info.WroteZipFile', + 'info.ExtractedZipFile', +]); function tableHeader(message: string): string { return blue(bold(message)); @@ -349,11 +368,11 @@ export class AsyncDeployResultFormatter implements Formatter { }); } } + +export class MetadataRetrieveResultFormatter implements Formatter { + private zipFilePath: string; + private files: FileResponse[]; + public constructor( + private result: RetrieveResult, + private opts: { 'target-metadata-dir': string; 'zip-file-name': string; unzip: boolean } + ) { + this.zipFilePath = path.join(opts['target-metadata-dir'], opts['zip-file-name']); + this.files = sortFileResponses(asRelativePaths(this.result.getFileResponses() ?? [])); + } + + public getJson(): MetadataRetrieveResultJson { + delete this.result.response.zipFile; + return { ...this.result.response, zipFilePath: this.zipFilePath, files: this.files }; + } + + // eslint-disable-next-line @typescript-eslint/require-await + public async display(): Promise { + CliUx.ux.log(retrieveMessages.getMessage('info.WroteZipFile', [this.zipFilePath])); + if (this.opts.unzip) { + const extractPath = path.join(this.opts['target-metadata-dir'], path.parse(this.opts['zip-file-name']).name); + CliUx.ux.log(retrieveMessages.getMessage('info.ExtractedZipFile', [this.zipFilePath, extractPath])); + } + } +} diff --git a/src/utils/types.ts b/src/utils/types.ts index bcc423e7..fe366b18 100644 --- a/src/utils/types.ts +++ b/src/utils/types.ts @@ -38,4 +38,9 @@ export type AsyncDeployResultJson = Omit, 'stat export type DeployResultJson = (MetadataApiDeployStatus & { files: FileResponse[] }) | AsyncDeployResultJson; -export type RetrieveResultJson = MetadataApiRetrieveStatus & { files: FileResponse[] }; +export type MetadataRetrieveResultJson = Omit & { + zipFilePath: string; + files: FileResponse[]; +}; + +export type RetrieveResultJson = (MetadataApiRetrieveStatus & { files: FileResponse[] }) | MetadataRetrieveResultJson; diff --git a/test/commands/retrieve/metadata.nut.ts b/test/commands/retrieve/metadata.nut.ts index a8bc21b3..5d3f3ac0 100644 --- a/test/commands/retrieve/metadata.nut.ts +++ b/test/commands/retrieve/metadata.nut.ts @@ -89,4 +89,28 @@ describe('retrieve metadata NUTs', () => { ]); }); }); + + describe('mdapi format', () => { + it('should retrieve force-app into a specified directory', async () => { + await testkit.retrieve({ args: '--source-dir force-app --target-metadata-dir metadata-dir' }); + await testkit.expect.directoryToHaveSomeFiles('metadata-dir'); + await testkit.expect.filesToBeRetrieved(['force-app/**/*'], ['force-app/test/**/*']); + }); + + it('should retrieve force-app into a specified directory with specified zip file name', async () => { + await testkit.retrieve({ + args: '--source-dir force-app --target-metadata-dir metadata-dir --zip-file-name my-zip', + }); + await testkit.expect.filesToBeRetrieved(['force-app/**/*'], ['force-app/test/**/*']); + await testkit.expect.fileToExist(path.join('metadata-dir', 'my-zip.zip')); + }); + + it('should retrieve force-app into a specified directory and unzip', async () => { + await testkit.retrieve({ + args: '--source-dir force-app --target-metadata-dir metadata-dir --unzip', + }); + await testkit.expect.filesToBeRetrieved(['force-app/**/*'], ['force-app/test/**/*']); + await testkit.expect.fileToExist(path.join('metadata-dir', 'unpackaged', 'unpackaged', 'package.xml')); + }); + }); }); diff --git a/test/nuts/seeds/deploy.metadata.metadata-dir.seed.ts b/test/nuts/seeds/deploy.metadata.metadata-dir.seed.ts index e143c9b9..55d79f67 100644 --- a/test/nuts/seeds/deploy.metadata.metadata-dir.seed.ts +++ b/test/nuts/seeds/deploy.metadata.metadata-dir.seed.ts @@ -51,7 +51,7 @@ context('deploy metadata --metadata-dir NUTs [name: %REPO_NAME%]', () => { it('should throw an error if the directory does not exist', async () => { const deploy = await testkit.deploy({ args: '--metadata-dir DOES_NOT_EXIST', exitCode: 1 }); - testkit.expect.errorToHaveName(deploy, 'Error'); + testkit.expect.errorToHaveName(deploy, 'InvalidFlagPathError'); }); }); }); diff --git a/test/tsconfig.json b/test/tsconfig.json index f11ed908..0a90bf3f 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -7,7 +7,9 @@ "paths": { "@salesforce/kit": ["node_modules/@salesforce/kit"], "@salesforce/core": ["node_modules/@salesforce/core"], - "@salesforce/source-deploy-retrieve": ["node_modules/@salesforce/source-tracking/node_modules/@salesforce/source-deploy-retrieve"], + "@salesforce/source-deploy-retrieve": [ + "node_modules/@salesforce/source-tracking/node_modules/@salesforce/source-deploy-retrieve" + ] } } } diff --git a/test/utils/flags.test.ts b/test/utils/flags.test.ts new file mode 100644 index 00000000..32e830c6 --- /dev/null +++ b/test/utils/flags.test.ts @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2022, 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 { assert, expect } from 'chai'; +import { Parser } from '@oclif/core'; +import * as sinon from 'sinon'; +import { testLevelFlag, fileOrDirFlag, ensuredDirFlag, zipFileFlag } from '../../src/utils/flags'; +import { TestLevel } from '../../src/utils/types'; + +const STAT = { + isDirectory: () => false, + isFile(): boolean { + throw new Error('Function not implemented.'); + }, + isBlockDevice(): boolean { + throw new Error('Function not implemented.'); + }, + isCharacterDevice(): boolean { + throw new Error('Function not implemented.'); + }, + isSymbolicLink(): boolean { + throw new Error('Function not implemented.'); + }, + isFIFO(): boolean { + throw new Error('Function not implemented.'); + }, + isSocket(): boolean { + throw new Error('Function not implemented.'); + }, + dev: 0, + ino: 0, + mode: 0, + nlink: 0, + uid: 0, + gid: 0, + rdev: 0, + size: 0, + blksize: 0, + blocks: 0, + atimeMs: 0, + mtimeMs: 0, + ctimeMs: 0, + birthtimeMs: 0, + atime: undefined, + mtime: undefined, + ctime: undefined, + birthtime: undefined, +}; + +describe('testLevelFlag', () => { + it('returns a test level', async () => { + const out = await Parser.parse([`--testLevel=${TestLevel.RunAllTestsInOrg}`], { + flags: { testLevel: testLevelFlag() }, + }); + expect(out.flags).to.deep.include({ testLevel: TestLevel.RunAllTestsInOrg }); + }); + + it('fails when provided an invalid test level', async () => { + try { + await Parser.parse(['--testLevel=FooBar'], { + flags: { testLevel: testLevelFlag() }, + }); + assert.fail('This should have failed'); + } catch (err) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + expect(err.message).to.include('Expected --testLevel=FooBar to be one of'); + } + }); +}); + +describe('fileOrDirFlag', () => { + let sandbox: sinon.SinonSandbox; + + beforeEach(() => { + sandbox = sinon.createSandbox(); + }); + + afterEach(() => { + sandbox.restore(); + }); + + it('returns a file', async () => { + sandbox.stub(fs, 'existsSync').returns(true); + sandbox.stub(fs.promises, 'stat').resolves(STAT); + + const out = await Parser.parse(['--fileOrDir=foo.json'], { + flags: { fileOrDir: fileOrDirFlag() }, + }); + expect(out.flags).to.deep.equal({ fileOrDir: { type: 'file', path: 'foo.json' } }); + }); + + it('returns a directory', async () => { + sandbox.stub(fs, 'existsSync').returns(true); + sandbox.stub(fs.promises, 'stat').resolves({ ...STAT, isDirectory: () => true }); + + const out = await Parser.parse(['--fileOrDir=foo'], { + flags: { fileOrDir: fileOrDirFlag() }, + }); + expect(out.flags).to.deep.equal({ fileOrDir: { type: 'directory', path: 'foo' } }); + }); + + it('throws if file does not exist and it is required to exist', async () => { + sandbox.stub(fs, 'existsSync').returns(false); + try { + await Parser.parse(['--fileOrDir=foo.json'], { + flags: { fileOrDir: fileOrDirFlag({ exists: true }) }, + }); + assert.fail('This should have failed'); + } catch (err) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + expect(err.name).to.equal('InvalidFlagPathError'); + } + }); +}); + +describe('ensuredDirFlag', () => { + let sandbox: sinon.SinonSandbox; + + beforeEach(() => { + sandbox = sinon.createSandbox(); + }); + + afterEach(() => { + sandbox.restore(); + }); + + it('returns a directory that already exists', async () => { + sandbox.stub(fs.promises, 'stat').resolves({ ...STAT, isDirectory: () => true }); + + const spy = sandbox.stub(fs.promises, 'mkdir').resolves(); + + const out = await Parser.parse(['--dir=foo'], { + flags: { dir: ensuredDirFlag() }, + }); + expect(out.flags).to.deep.equal({ dir: path.resolve('foo') }); + expect(spy.callCount).to.equal(0); + }); + + it('returns a created directory', async () => { + sandbox.stub(fs.promises, 'stat').throws({ code: 'ENOENT' }); + + const spy = sandbox.stub(fs.promises, 'mkdir').resolves(); + + const out = await Parser.parse(['--dir=foo'], { + flags: { dir: ensuredDirFlag() }, + }); + expect(out.flags).to.deep.equal({ dir: path.resolve('foo') }); + expect(spy.callCount).to.equal(1); + }); + + it('throws if the provided string is a file', async () => { + sandbox.stub(fs.promises, 'stat').resolves(STAT); + try { + await Parser.parse(['--dir=foo.json'], { + flags: { dir: ensuredDirFlag() }, + }); + assert.fail('This should have failed'); + } catch (err) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + expect(err.name).to.equal('InvalidFlagPathError'); + } + }); +}); + +describe('zipFileFlag', () => { + it('should return a file that is appended with .zip', async () => { + const out = await Parser.parse(['--zipFile=foo'], { + flags: { zipFile: zipFileFlag() }, + }); + expect(out.flags).to.deep.equal({ zipFile: 'foo.zip' }); + }); + + it('should return a file that is already appended with .zip', async () => { + const out = await Parser.parse(['--zipFile=foo.zip'], { + flags: { zipFile: zipFileFlag() }, + }); + expect(out.flags).to.deep.equal({ zipFile: 'foo.zip' }); + }); + + it('should return unpackaged.zip when nothing is provided', async () => { + const out = await Parser.parse(['--zipFile='], { + flags: { zipFile: zipFileFlag() }, + }); + expect(out.flags).to.deep.equal({ zipFile: 'unpackaged.zip' }); + }); +}); diff --git a/yarn.lock b/yarn.lock index c390f131..028ed86d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25,37 +25,37 @@ "@babel/highlight" "^7.18.6" "@babel/compat-data@^7.18.8": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" - integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.13.tgz#6aff7b350a1e8c3e40b029e46cbe78e24a913483" + integrity sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw== "@babel/core@^7.7.5": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" - integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.13.tgz#9be8c44512751b05094a4d3ab05fc53a47ce00ac" + integrity sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.10" + "@babel/generator" "^7.18.13" "@babel/helper-compilation-targets" "^7.18.9" "@babel/helper-module-transforms" "^7.18.9" "@babel/helpers" "^7.18.9" - "@babel/parser" "^7.18.10" + "@babel/parser" "^7.18.13" "@babel/template" "^7.18.10" - "@babel/traverse" "^7.18.10" - "@babel/types" "^7.18.10" + "@babel/traverse" "^7.18.13" + "@babel/types" "^7.18.13" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.18.10": - version "7.18.12" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.12.tgz#fa58daa303757bd6f5e4bbca91b342040463d9f4" - integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== +"@babel/generator@^7.18.13": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.13.tgz#59550cbb9ae79b8def15587bdfbaa388c4abf212" + integrity sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ== dependencies: - "@babel/types" "^7.18.10" + "@babel/types" "^7.18.13" "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" @@ -157,10 +157,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.18.10", "@babel/parser@^7.18.11": - version "7.18.11" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" - integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== +"@babel/parser@^7.18.10", "@babel/parser@^7.18.13": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.13.tgz#5b2dd21cae4a2c5145f1fbd8ca103f9313d3b7e4" + integrity sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg== "@babel/runtime-corejs3@^7.12.5": version "7.18.9" @@ -186,26 +186,26 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9": - version "7.18.11" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.11.tgz#3d51f2afbd83ecf9912bcbb5c4d94e3d2ddaa16f" - integrity sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ== +"@babel/traverse@^7.18.13", "@babel/traverse@^7.18.9": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.13.tgz#5ab59ef51a997b3f10c4587d648b9696b6cb1a68" + integrity sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.10" + "@babel/generator" "^7.18.13" "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-function-name" "^7.18.9" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.11" - "@babel/types" "^7.18.10" + "@babel/parser" "^7.18.13" + "@babel/types" "^7.18.13" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" - integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== +"@babel/types@^7.18.10", "@babel/types@^7.18.13", "@babel/types@^7.18.6", "@babel/types@^7.18.9": + version "7.18.13" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.13.tgz#30aeb9e514f4100f7c1cb6e5ba472b30e48f519a" + integrity sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ== dependencies: "@babel/helper-string-parser" "^7.18.10" "@babel/helper-validator-identifier" "^7.18.6" @@ -623,9 +623,9 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping@^0.3.9": - version "0.3.14" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" - integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== + version "0.3.15" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" + integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" @@ -749,9 +749,9 @@ semver "^7.3.5" "@npmcli/fs@^2.1.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.1.tgz#c0c480b03450d8b9fc086816a50cb682668a48bf" - integrity sha512-1Q0uzx6c/NVNGszePbr5Gc2riSU1zLpNlo/1YWntH+eaPmMgBssAW0qXofCVkpdj3ce4swZtlDYQu+NKiYcptg== + version "2.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== dependencies: "@gar/promisify" "^1.1.3" semver "^7.3.5" @@ -826,9 +826,9 @@ rimraf "^3.0.2" "@npmcli/move-file@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.0.tgz#417f585016081a0184cef3e38902cd917a9bbd02" - integrity sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg== + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== dependencies: mkdirp "^1.0.4" rimraf "^3.0.2" @@ -924,10 +924,10 @@ is-wsl "^2.1.1" tslib "^2.3.1" -"@oclif/core@^1.0.8", "@oclif/core@^1.15.0", "@oclif/core@^1.2.1", "@oclif/core@^1.3.4", "@oclif/core@^1.3.6", "@oclif/core@^1.6.0", "@oclif/core@^1.6.3", "@oclif/core@^1.6.4", "@oclif/core@^1.7.0", "@oclif/core@^1.9.5", "@oclif/core@^1.9.9": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@oclif/core/-/core-1.15.0.tgz#af015520456568a362a3592656b845d973494ffe" - integrity sha512-H+l0SybcYJiVPRXTu88TsEXNQZV9ZZ6k/xtiHbgE6LItPk77/st9HH4uI/IKK1nMOJS8KkxNmkLKyrcuiL7Bjw== +"@oclif/core@^1.0.8", "@oclif/core@^1.14.1", "@oclif/core@^1.15.0", "@oclif/core@^1.16.0", "@oclif/core@^1.2.1", "@oclif/core@^1.3.4", "@oclif/core@^1.3.6", "@oclif/core@^1.6.0", "@oclif/core@^1.6.3", "@oclif/core@^1.6.4", "@oclif/core@^1.7.0", "@oclif/core@^1.9.5", "@oclif/core@^1.9.9": + version "1.16.0" + resolved "https://registry.yarnpkg.com/@oclif/core/-/core-1.16.0.tgz#4b53261eeb0c0244700bfc9eb41159d483436f21" + integrity sha512-xtqhAbjQHBcz+xQpEHJ3eJEVfRQ4zl41Yw5gw/N+D1jgaIUrHTxCY/sfTvhw93LAQo7B++ozHzSb7DISFXsQFQ== dependencies: "@oclif/linewrap" "^1.0.0" "@oclif/screen" "^3.0.2" @@ -1245,12 +1245,13 @@ dependencies: "@octokit/openapi-types" "^12.11.0" -"@salesforce/apex-node@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@salesforce/apex-node/-/apex-node-1.1.0.tgz#c1a86d0877aa145b476150f956165df3f7259160" - integrity sha512-wDqAwOfWF8YkfLjnzL8pZ6ADAXk1fWfFjOgM9xxMimnhpHTR4z5mfWnkk9FKt904Ly4rw8tU2ny1kAuCmfCWzQ== +"@salesforce/apex-node@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@salesforce/apex-node/-/apex-node-1.2.0.tgz#99161e3143d4e5aab4a5b4ccb26e5f38a06d8b2a" + integrity sha512-m+lvQm1aX1xn8lT8rRwpiarOn2+1Ft82ZIawp+2aMfHSlZ/thCcw9zTxACNnQDpIGgxx7I1i9eZEJ8XQzLcoPQ== dependencies: "@salesforce/core" "^3.23.3" + "@types/istanbul-reports" "^3.0.1" faye "1.4.0" glob "^8.0.3" istanbul-lib-coverage "^3.2.0" @@ -1316,15 +1317,15 @@ cli-ux "^4.9.3" "@salesforce/command@^5.1.2", "@salesforce/command@^5.2.1": - version "5.2.4" - resolved "https://registry.yarnpkg.com/@salesforce/command/-/command-5.2.4.tgz#bd792e1be780e0ba5f30fa9ae74a8401e69520b5" - integrity sha512-ccqGQWpVbi8XjC4xqx6grUmlbEFN5e3UPYBO+GTwyTvbYTEwryIEWsbhWwdDtosjJFxbAy1Xyi84ZUlYeJ6jpA== + version "5.2.6" + resolved "https://registry.yarnpkg.com/@salesforce/command/-/command-5.2.6.tgz#649e3c1ab2c4f5a71b1c908f95a644c1b398d7da" + integrity sha512-Rsvk8k4ZKwZiMD6STSTHMNPigqkr+hycuRwjm1pk57vDDSllVVa3R8yv0em1OoJsiyIH7l/zhRQ6IcZ7ObM7Jg== dependencies: - "@oclif/core" "^1.7.0" + "@oclif/core" "^1.14.1" "@oclif/plugin-help" "^5.1.11" "@oclif/test" "^2.1.0" - "@salesforce/core" "^3.20.1" - "@salesforce/kit" "^1.5.34" + "@salesforce/core" "^3.26.2" + "@salesforce/kit" "^1.6.0" "@salesforce/ts-types" "^1.5.20" chalk "^2.4.2" @@ -1352,10 +1353,10 @@ semver "^7.3.5" ts-retry-promise "^0.6.0" -"@salesforce/core@^3.19.4", "@salesforce/core@^3.20.1", "@salesforce/core@^3.21.5", "@salesforce/core@^3.22.0", "@salesforce/core@^3.23.3", "@salesforce/core@^3.23.9", "@salesforce/core@^3.25.0", "@salesforce/core@^3.26.1", "@salesforce/core@^3.8.0": - version "3.26.1" - resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-3.26.1.tgz#8d65c6b12085494106a2c7d2545902fa1ff95522" - integrity sha512-B2mhsiiAu9hkLAwkDu+Y5ArAtRJIx2oeqP8ofupLlSH4tohzcUmfKgCDZEk9iLC1sc5kmD1S/4DlS1QZhnNs8A== +"@salesforce/core@^3.19.4", "@salesforce/core@^3.20.1", "@salesforce/core@^3.21.5", "@salesforce/core@^3.23.3", "@salesforce/core@^3.23.9", "@salesforce/core@^3.25.0", "@salesforce/core@^3.26.1", "@salesforce/core@^3.26.2", "@salesforce/core@^3.8.0": + version "3.26.2" + resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-3.26.2.tgz#94b361bd62967feb3eedc624fc6cf444e7347f84" + integrity sha512-GDrho8jbh1UDjcsYRRUzhNv4KUsMcBtux/yEqB2ycvHXhjVnrNkJcl99KESiU1eZMl2DGZEE1IO8yxnb2rSvgg== dependencies: "@salesforce/bunyan" "^2.0.0" "@salesforce/kit" "^1.5.41" @@ -1420,10 +1421,10 @@ typedoc-plugin-missing-exports "0.23.0" typescript "^4.1.3" -"@salesforce/kit@^1.2.0", "@salesforce/kit@^1.5.17", "@salesforce/kit@^1.5.34", "@salesforce/kit@^1.5.38", "@salesforce/kit@^1.5.41", "@salesforce/kit@^1.5.42", "@salesforce/kit@^1.5.44", "@salesforce/kit@^1.5.45": - version "1.5.45" - resolved "https://registry.yarnpkg.com/@salesforce/kit/-/kit-1.5.45.tgz#200a85f75681f4567820cf206a04b3d44e43e0b0" - integrity sha512-e7iER8s/f8N52rSRZ7uJXSKnOTDTH9NHfGnmkFXPuz/1Waaeqso+CxqmqCh8aVe//frj11NGkazR0rJPuF/bfA== +"@salesforce/kit@^1.2.0", "@salesforce/kit@^1.5.17", "@salesforce/kit@^1.5.38", "@salesforce/kit@^1.5.41", "@salesforce/kit@^1.5.42", "@salesforce/kit@^1.5.44", "@salesforce/kit@^1.5.45", "@salesforce/kit@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@salesforce/kit/-/kit-1.6.0.tgz#0305dea2c9847d4b08068c4a9d436da5c9a5ce5e" + integrity sha512-8VZvWYl61jBaUIqo+pNoDvVqaZKPmqauvkhJHvcr/+D7+EXsjne9PDMggy5mNQJvonD6iegR/h3BqcWrppSaeQ== dependencies: "@salesforce/ts-types" "^1.5.20" shx "^0.3.3" @@ -1505,15 +1506,15 @@ tslib "^2" "@salesforce/plugin-source@^2.0.11": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@salesforce/plugin-source/-/plugin-source-2.0.11.tgz#87ab8cb48d1ba2ea5d39e74bb639a7953cb60e92" - integrity sha512-qL386lULibHcuilMFCOtIgKtcv1ifTky42dydWZ/zLnxNzmPmBTWucgbfA6pOOM4HoTfZKH5ap22H4rxJsui5w== + version "2.0.13" + resolved "https://registry.yarnpkg.com/@salesforce/plugin-source/-/plugin-source-2.0.13.tgz#2ed09704c8740590e06769fb87e9dec945d05407" + integrity sha512-ELEtNhrux6J4ID0WYHCRNMGWT4ARy9vxB3yjuo87oW36cdkDRzNQMlSEZOyHIGzQ/4it18zWJ40WNAz+xPzMcA== dependencies: "@oclif/core" "^1.9.5" "@oclif/plugin-help" "^3.3.1" - "@salesforce/apex-node" "^1.0.0" + "@salesforce/apex-node" "^1.2.0" "@salesforce/command" "^5.2.1" - "@salesforce/core" "^3.21.5" + "@salesforce/core" "^3.26.2" "@salesforce/kit" "^1.5.41" "@salesforce/source-deploy-retrieve" "^6.2.6" "@salesforce/source-tracking" "^2.1.2" @@ -1546,7 +1547,7 @@ resolved "https://registry.yarnpkg.com/@salesforce/schemas/-/schemas-1.1.3.tgz#fce83f55c7557d47b9c814d5d02978ad734300b3" integrity sha512-XWohlOT2oQDqAJH00OXS3f2MGjkwZ6pr4emnnkHSQbg7UdGW0rvGpEnRKqBbDUfZ4K5YKSo9Gj216ZtaP3JLXg== -"@salesforce/sf-plugins-core@1.14.0", "@salesforce/sf-plugins-core@^1.13.0", "@salesforce/sf-plugins-core@^1.7.2", "@salesforce/sf-plugins-core@^1.9.0": +"@salesforce/sf-plugins-core@1.14.0": version "1.14.0" resolved "https://registry.yarnpkg.com/@salesforce/sf-plugins-core/-/sf-plugins-core-1.14.0.tgz#8c1a34be849ee80feca9bb35b4f9b96604f6e513" integrity sha512-zPAQmfrPGiZsx5sLPCnAUTqHIJMfShu1RI05OqiheInXLXkcPZWab3XiXudjW3cL/URAsVdocDfS8QN1UVVS9g== @@ -1558,14 +1559,27 @@ chalk "^4" inquirer "^8.2.0" +"@salesforce/sf-plugins-core@^1.13.0", "@salesforce/sf-plugins-core@^1.7.2", "@salesforce/sf-plugins-core@^1.9.0": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@salesforce/sf-plugins-core/-/sf-plugins-core-1.14.1.tgz#d2cd21ecc1017d6f61b2389a4efb0e2acde17d2d" + integrity sha512-1Ri4k8vl6aS6QVvSkGsOPxBMm0w2rDhtzAwlEJzyt6Yi5cKSK+j3fDItEgvtXcIzwkHaXd0Z6fPCIJL5iEKStQ== + dependencies: + "@oclif/core" "^1.15.0" + "@salesforce/core" "^3.25.0" + "@salesforce/kit" "^1.5.44" + "@salesforce/ts-types" "^1.5.20" + chalk "^4" + inquirer "^8.2.0" + "@salesforce/source-deploy-retrieve@^6.1.0", "@salesforce/source-deploy-retrieve@^6.2.6", "@salesforce/source-deploy-retrieve@^6.2.7", "@salesforce/source-deploy-retrieve@^6.2.9": - version "6.2.9" - resolved "https://registry.yarnpkg.com/@salesforce/source-deploy-retrieve/-/source-deploy-retrieve-6.2.9.tgz#99eff9e1f2f44ff43206c4db6dc399c7f61fc720" - integrity sha512-UY143K4i/MThabkuD8fhnYlMu2VRpFSTu9hgkNCUfwxTQyunUOgjOl4ALSymKOKCcseTuEuEQpH2kU0ehwAN7A== + version "6.3.1" + resolved "https://registry.yarnpkg.com/@salesforce/source-deploy-retrieve/-/source-deploy-retrieve-6.3.1.tgz#4ca3e6db51f7c889489e12787dd52676673897b7" + integrity sha512-f0oBqBJ/R57cf5CqO7/LclGL3+fEfk2zlWbzhh3wDdgTP6M24rE0Nwc5TQKXZZr150l6ScjcnhYdLbTrkYxJvA== dependencies: - "@salesforce/core" "^3.22.0" + "@salesforce/core" "^3.26.1" "@salesforce/kit" "^1.5.45" "@salesforce/ts-types" "^1.5.20" + "@xmldom/xmldom" "^0.8.2" archiver "^5.3.1" fast-xml-parser "^3.21.1" got "^11.8.5" @@ -1575,7 +1589,6 @@ proxy-agent "^5.0.0" proxy-from-env "^1.1.0" unzipper "0.10.11" - xmldom-sfdx-encoding "^0.1.30" "@salesforce/source-testkit@^1.2.0": version "1.2.7" @@ -1813,6 +1826,25 @@ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== +"@types/istanbul-lib-coverage@*": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + "@types/jsforce@^1.9.41": version "1.9.43" resolved "https://registry.yarnpkg.com/@types/jsforce/-/jsforce-1.9.43.tgz#407907aac838b1828133958ef326ce649d03138f" @@ -1843,11 +1875,16 @@ "@types/node" "*" "@types/lodash@*": - version "4.14.182" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2" - integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== + version "4.14.184" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.184.tgz#23f96cd2a21a28e106dc24d825d4aa966de7a9fe" + integrity sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q== -"@types/minimatch@*", "@types/minimatch@^3.0.3": +"@types/minimatch@*": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.0.tgz#c3018161691376002f8a22ebb87f341e0dba3219" + integrity sha512-0RJHq5FqDWo17kdHe+SMDJLfxmLaqHbWnqZ6gNKzDvStUlrmx/eKIY17+ifLS1yybo7X86aUshQMlittDOVNnw== + +"@types/minimatch@^3.0.3": version "3.0.5" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== @@ -1875,9 +1912,9 @@ integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== "@types/node@*", "@types/node@>=12": - version "18.6.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.5.tgz#06caea822caf9e59d5034b695186ee74154d2802" - integrity sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw== + version "18.7.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.13.tgz#23e6c5168333480d454243378b69e861ab5c011a" + integrity sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw== "@types/node@^12.19.9": version "12.20.55" @@ -1907,9 +1944,9 @@ "@types/node" "*" "@types/semver@^7.3.9": - version "7.3.11" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.11.tgz#7a84d3228f34e68d14955fc406f8e66fdbe9e65e" - integrity sha512-R9HhjC4aKx3jL0FLwU7x6qMTysTvLh7jesRslXmxgCOXZwyh5dsnmrPQQToMyess8D4U+8G9x9mBFZoC/1o/Tw== + version "7.3.12" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.12.tgz#920447fdd78d76b19de0438b7f60df3c4a80bf1c" + integrity sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A== "@types/shelljs@^0.8.11": version "0.8.11" @@ -1946,14 +1983,14 @@ "@types/expect" "^1.20.4" "@types/node" "*" -"@typescript-eslint/eslint-plugin@^5.32.0": - version "5.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.0.tgz#059798888720ec52ffa96c5f868e31a8f70fa3ec" - integrity sha512-jHvZNSW2WZ31OPJ3enhLrEKvAZNyAFWZ6rx9tUwaessTc4sx9KmgMNhVcqVAl1ETnT5rU5fpXTLmY9YvC1DCNg== +"@typescript-eslint/eslint-plugin@^5.36.2": + version "5.36.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.36.2.tgz#6df092a20e0f9ec748b27f293a12cb39d0c1fe4d" + integrity sha512-OwwR8LRwSnI98tdc2z7mJYgY60gf7I9ZfGjN5EjCwwns9bdTuQfAXcsjSB2wSQ/TVNYSGKf4kzVXbNGaZvwiXw== dependencies: - "@typescript-eslint/scope-manager" "5.33.0" - "@typescript-eslint/type-utils" "5.33.0" - "@typescript-eslint/utils" "5.33.0" + "@typescript-eslint/scope-manager" "5.36.2" + "@typescript-eslint/type-utils" "5.36.2" + "@typescript-eslint/utils" "5.36.2" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -1961,69 +1998,116 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.32.0": - version "5.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.33.0.tgz#26ec3235b74f0667414613727cb98f9b69dc5383" - integrity sha512-cgM5cJrWmrDV2KpvlcSkelTBASAs1mgqq+IUGKJvFxWrapHpaRy5EXPQz9YaKF3nZ8KY18ILTiVpUtbIac86/w== +"@typescript-eslint/parser@^5.36.2": + version "5.36.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.36.2.tgz#3ddf323d3ac85a25295a55fcb9c7a49ab4680ddd" + integrity sha512-qS/Kb0yzy8sR0idFspI9Z6+t7mqk/oRjnAYfewG+VN73opAUvmYL3oPIMmgOX6CnQS6gmVIXGshlb5RY/R22pA== dependencies: - "@typescript-eslint/scope-manager" "5.33.0" - "@typescript-eslint/types" "5.33.0" - "@typescript-eslint/typescript-estree" "5.33.0" + "@typescript-eslint/scope-manager" "5.36.2" + "@typescript-eslint/types" "5.36.2" + "@typescript-eslint/typescript-estree" "5.36.2" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.33.0": - version "5.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.33.0.tgz#509d7fa540a2c58f66bdcfcf278a3fa79002e18d" - integrity sha512-/Jta8yMNpXYpRDl8EwF/M8It2A9sFJTubDo0ATZefGXmOqlaBffEw0ZbkbQ7TNDK6q55NPHFshGBPAZvZkE8Pw== +"@typescript-eslint/scope-manager@5.34.0": + version "5.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.34.0.tgz#14efd13dc57602937e25f188fd911f118781e527" + integrity sha512-HNvASMQlah5RsBW6L6c7IJ0vsm+8Sope/wu5sEAf7joJYWNb1LDbJipzmdhdUOnfrDFE6LR1j57x1EYVxrY4ow== + dependencies: + "@typescript-eslint/types" "5.34.0" + "@typescript-eslint/visitor-keys" "5.34.0" + +"@typescript-eslint/scope-manager@5.36.2": + version "5.36.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.36.2.tgz#a75eb588a3879ae659514780831370642505d1cd" + integrity sha512-cNNP51L8SkIFSfce8B1NSUBTJTu2Ts4nWeWbFrdaqjmn9yKrAaJUBHkyTZc0cL06OFHpb+JZq5AUHROS398Orw== dependencies: - "@typescript-eslint/types" "5.33.0" - "@typescript-eslint/visitor-keys" "5.33.0" + "@typescript-eslint/types" "5.36.2" + "@typescript-eslint/visitor-keys" "5.36.2" -"@typescript-eslint/type-utils@5.33.0": - version "5.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.33.0.tgz#92ad1fba973c078d23767ce2d8d5a601baaa9338" - integrity sha512-2zB8uEn7hEH2pBeyk3NpzX1p3lF9dKrEbnXq1F7YkpZ6hlyqb2yZujqgRGqXgRBTHWIUG3NGx/WeZk224UKlIA== +"@typescript-eslint/type-utils@5.36.2": + version "5.36.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.36.2.tgz#752373f4babf05e993adf2cd543a763632826391" + integrity sha512-rPQtS5rfijUWLouhy6UmyNquKDPhQjKsaKH0WnY6hl/07lasj8gPaH2UD8xWkePn6SC+jW2i9c2DZVDnL+Dokw== dependencies: - "@typescript-eslint/utils" "5.33.0" + "@typescript-eslint/typescript-estree" "5.36.2" + "@typescript-eslint/utils" "5.36.2" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.33.0": - version "5.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.33.0.tgz#d41c584831805554b063791338b0220b613a275b" - integrity sha512-nIMt96JngB4MYFYXpZ/3ZNU4GWPNdBbcB5w2rDOCpXOVUkhtNlG2mmm8uXhubhidRZdwMaMBap7Uk8SZMU/ppw== +"@typescript-eslint/types@5.34.0": + version "5.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.34.0.tgz#217bf08049e9e7b86694d982e88a2c1566330c78" + integrity sha512-49fm3xbbUPuzBIOcy2CDpYWqy/X7VBkxVN+DC21e0zIm3+61Z0NZi6J9mqPmSW1BDVk9FIOvuCFyUPjXz93sjA== + +"@typescript-eslint/types@5.36.2": + version "5.36.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.36.2.tgz#a5066e500ebcfcee36694186ccc57b955c05faf9" + integrity sha512-9OJSvvwuF1L5eS2EQgFUbECb99F0mwq501w0H0EkYULkhFa19Qq7WFbycdw1PexAc929asupbZcgjVIe6OK/XQ== + +"@typescript-eslint/typescript-estree@5.34.0": + version "5.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.34.0.tgz#ba7b83f4bf8ccbabf074bbf1baca7a58de3ccb9a" + integrity sha512-mXHAqapJJDVzxauEkfJI96j3D10sd567LlqroyCeJaHnu42sDbjxotGb3XFtGPYKPD9IyLjhsoULML1oI3M86A== + dependencies: + "@typescript-eslint/types" "5.34.0" + "@typescript-eslint/visitor-keys" "5.34.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.33.0": - version "5.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.0.tgz#02d9c9ade6f4897c09e3508c27de53ad6bfa54cf" - integrity sha512-tqq3MRLlggkJKJUrzM6wltk8NckKyyorCSGMq4eVkyL5sDYzJJcMgZATqmF8fLdsWrW7OjjIZ1m9v81vKcaqwQ== +"@typescript-eslint/typescript-estree@5.36.2": + version "5.36.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.2.tgz#0c93418b36c53ba0bc34c61fe9405c4d1d8fe560" + integrity sha512-8fyH+RfbKc0mTspfuEjlfqA4YywcwQK2Amcf6TDOwaRLg7Vwdu4bZzyvBZp4bjt1RRjQ5MDnOZahxMrt2l5v9w== dependencies: - "@typescript-eslint/types" "5.33.0" - "@typescript-eslint/visitor-keys" "5.33.0" + "@typescript-eslint/types" "5.36.2" + "@typescript-eslint/visitor-keys" "5.36.2" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.33.0", "@typescript-eslint/utils@^5.27.0": - version "5.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.33.0.tgz#46797461ce3146e21c095d79518cc0f8ec574038" - integrity sha512-JxOAnXt9oZjXLIiXb5ZIcZXiwVHCkqZgof0O8KPgz7C7y0HS42gi75PdPlqh1Tf109M0fyUw45Ao6JLo7S5AHw== +"@typescript-eslint/utils@5.36.2": + version "5.36.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.36.2.tgz#b01a76f0ab244404c7aefc340c5015d5ce6da74c" + integrity sha512-uNcopWonEITX96v9pefk9DC1bWMdkweeSsewJ6GeC7L6j2t0SJywisgkr9wUTtXk90fi2Eljj90HSHm3OGdGRg== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.36.2" + "@typescript-eslint/types" "5.36.2" + "@typescript-eslint/typescript-estree" "5.36.2" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/utils@^5.27.0": + version "5.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.34.0.tgz#0cae98f48d8f9e292e5caa9343611b6faf49e743" + integrity sha512-kWRYybU4Rn++7lm9yu8pbuydRyQsHRoBDIo11k7eqBWTldN4xUdVUMCsHBiE7aoEkFzrUEaZy3iH477vr4xHAQ== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.33.0" - "@typescript-eslint/types" "5.33.0" - "@typescript-eslint/typescript-estree" "5.33.0" + "@typescript-eslint/scope-manager" "5.34.0" + "@typescript-eslint/types" "5.34.0" + "@typescript-eslint/typescript-estree" "5.34.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/visitor-keys@5.33.0": - version "5.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.0.tgz#fbcbb074e460c11046e067bc3384b5d66b555484" - integrity sha512-/XsqCzD4t+Y9p5wd9HZiptuGKBlaZO5showwqODii5C0nZawxWLF+Q6k5wYHBrQv96h6GYKyqqMHCSTqta8Kiw== +"@typescript-eslint/visitor-keys@5.34.0": + version "5.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.34.0.tgz#d0fb3e31033e82ddd5de048371ad39eb342b2d40" + integrity sha512-O1moYjOSrab0a2fUvFpsJe0QHtvTC+cR+ovYpgKrAVXzqQyc74mv76TgY6z+aEtjQE2vgZux3CQVtGryqdcOAw== dependencies: - "@typescript-eslint/types" "5.33.0" + "@typescript-eslint/types" "5.34.0" + eslint-visitor-keys "^3.3.0" + +"@typescript-eslint/visitor-keys@5.36.2": + version "5.36.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.2.tgz#2f8f78da0a3bad3320d2ac24965791ac39dace5a" + integrity sha512-BtRvSR6dEdrNt7Net2/XDjbYKU5Ml6GqJgVfXT0CxTCJlnIqK7rAGreuWKMT2t8cFUT2Msv5oxw0GMRD7T5J7A== + dependencies: + "@typescript-eslint/types" "5.36.2" eslint-visitor-keys "^3.3.0" "@ungap/promise-all-settled@1.1.2": @@ -2031,6 +2115,11 @@ resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== +"@xmldom/xmldom@^0.8.2": + version "0.8.2" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.2.tgz#b695ff674e8216efa632a3d36ad51ae9843380c0" + integrity sha512-+R0juSseERyoPvnBQ/cZih6bpF7IpCXlWbHRoCRzYzqpz6gWHOgf8o4MOEf6KBVuOyqU+gCNLkCWVIJAro8XyQ== + JSONStream@^1.0.4, JSONStream@^1.2.1, JSONStream@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -2463,9 +2552,9 @@ available-typed-arrays@^1.0.5: integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== aws-sdk@^2.1116.0: - version "2.1191.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1191.0.tgz#2748567252c68ef37a8ce29f48aa063681083918" - integrity sha512-G8hWvuc+3rxTfHqsnUwGx/fy8zlnVPtlNesXMHlwU/l4oBx3+Weg0Nhng6HvLGzUJifzlnSKDXrOsWVkHtuZ1w== + version "2.1201.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1201.0.tgz#e3fa4670800b419adf1e1a3a7d7c98a700705a39" + integrity sha512-TLlyn9kXHjBidP58Pw1x7VQfIAfvakljyOX6+AEId+KbEXZPN/PzZB2sf0cLAgKIUgTVvWX4RqSTXLDmeR5c8Q== dependencies: buffer "4.9.2" events "1.1.1" @@ -2566,13 +2655,13 @@ bin-links@^2.2.1: write-file-atomic "^3.0.3" bin-links@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.1.tgz#cc70ffb481988b22c527d3e6e454787876987a49" - integrity sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.3.tgz#3842711ef3db2cd9f16a5f404a996a12db355a6e" + integrity sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA== dependencies: cmd-shim "^5.0.0" mkdirp-infer-owner "^2.0.0" - npm-normalize-package-bin "^1.0.0" + npm-normalize-package-bin "^2.0.0" read-cmd-shim "^3.0.0" rimraf "^3.0.0" write-file-atomic "^4.0.0" @@ -2764,9 +2853,9 @@ cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0: unique-filename "^1.1.1" cacache@^16.1.0: - version "16.1.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.1.tgz#4e79fb91d3efffe0630d5ad32db55cc1b870669c" - integrity sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg== + version "16.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== dependencies: "@npmcli/fs" "^2.1.0" "@npmcli/move-file" "^2.0.0" @@ -2785,7 +2874,7 @@ cacache@^16.1.0: rimraf "^3.0.2" ssri "^9.0.0" tar "^6.1.11" - unique-filename "^1.1.1" + unique-filename "^2.0.0" cache-base@^1.0.1: version "1.0.1" @@ -2881,9 +2970,9 @@ camelcase@^6.0.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001370: - version "1.0.30001375" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001375.tgz#8e73bc3d1a4c800beb39f3163bf0190d7e5d7672" - integrity sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw== + version "1.0.30001382" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001382.tgz#4d37f0d0b6fffb826c8e5e1c0f4bf8ce592db949" + integrity sha512-2rtJwDmSZ716Pxm1wCtbPvHtbDWAreTPxXbkc5RkKglow3Ig/4GNGazDI9/BVnXbG/wnv6r3B5FEbkfg9OcTGg== capital-case@^1.0.4: version "1.0.4" @@ -3672,9 +3761,9 @@ data-uri-to-buffer@^4.0.0: integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA== date-fns@^2.16.1, date-fns@^2.28.0: - version "2.29.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.1.tgz#9667c2615525e552b5135a3116b95b1961456e60" - integrity sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw== + version "2.29.2" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.2.tgz#0d4b3d0f3dff0f920820a070920f0d9662c51931" + integrity sha512-0VNbwmWJDS/G3ySwFSJA3ayhbURMTJLtwM2DTxf9CWondCnh6DTNlO9JgRSq6ibf4eD0lfMJNBxUdEAHHix+bA== dateformat@^3.0.3: version "3.0.3" @@ -3692,9 +3781,9 @@ dayjs-plugin-utc@^0.1.2: integrity sha512-ExERH5o3oo6jFOdkvMP3gytTCQ9Ksi5PtylclJWghr7k7m3o2U5QrwtdiJkOxLOH4ghr0EKhpqGefzGz1VvVJg== dayjs@^1.8.16: - version "1.11.4" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.4.tgz#3b3c10ca378140d8917e06ebc13a4922af4f433e" - integrity sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g== + version "1.11.5" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.5.tgz#00e8cc627f231f9499c19b38af49f56dc0ac5e93" + integrity sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA== debug@4, debug@4.3.4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" @@ -4050,9 +4139,9 @@ ejs@^3.1.5, ejs@^3.1.6, ejs@^3.1.8: jake "^10.8.5" electron-to-chromium@^1.4.202: - version "1.4.213" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.213.tgz#a0d0f535e4fbddc25196c91ff2964b5660932297" - integrity sha512-+3DbGHGOCHTVB/Ms63bGqbyC1b8y7Fk86+7ltssB8NQrZtSCvZG6eooSl9U2Q0yw++fL2DpHKOdTU0NVEkFObg== + version "1.4.228" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.228.tgz#3baff13cf54198c2045f9bdd8b64db93aafd7f33" + integrity sha512-XfDHCvou7CsDMlFwb0WZ1tWmW48e7Sn7VBRyPfZsZZila9esRsJl1trO+OqDNV97GggFSt0ISbWslKXfQkG//g== emoji-regex@^7.0.1: version "7.0.3" @@ -4214,9 +4303,9 @@ eslint-config-salesforce-typescript@^0.2.7: integrity sha512-CDPcYWIfEVJFbcNG6IdhKW3whp0MujjuM4uRFESQ1Eq4cO8bMbZrwbLypUWxdMgZz7Ua3luMHmIKgkmR4k9FSg== eslint-config-salesforce-typescript@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-salesforce-typescript/-/eslint-config-salesforce-typescript-1.0.0.tgz#7bc7aa49779cfb395ad8dcfc6481c54d4a68b35d" - integrity sha512-VkR0iydimCiAs/4v0Ialne2ry3UZh4rjfur1kaJBUJKKTXH+jGBmLEZKlZnoKGsw6OMKLVcMdoK0N8nshY2zcg== + version "1.1.1" + resolved "https://registry.yarnpkg.com/eslint-config-salesforce-typescript/-/eslint-config-salesforce-typescript-1.1.1.tgz#fb038f6423c5472d6439e9f780184b00ebcd2685" + integrity sha512-cjj2tU5wkushOUynecjg0JQtb/y61pWSjtOKKnNzWEdtbZEs7pe1/w5hsaZ79urdeFFUHQW2mr3qpzsWzUjgxQ== eslint-config-salesforce@^0.1.6: version "0.1.6" @@ -4237,12 +4326,11 @@ eslint-import-resolver-node@^0.3.6: resolve "^1.20.0" eslint-module-utils@^2.7.3: - version "2.7.3" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" - integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== dependencies: debug "^3.2.7" - find-up "^2.1.0" eslint-plugin-header@^3.0.0, eslint-plugin-header@^3.1.1: version "3.1.1" @@ -4394,9 +4482,9 @@ eslint@^7.27.0: v8-compile-cache "^2.0.3" eslint@^8.17.0: - version "8.21.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.21.0.tgz#1940a68d7e0573cef6f50037addee295ff9be9ef" - integrity sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA== + version "8.22.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.22.0.tgz#78fcb044196dfa7eef30a9d65944f6f980402c48" + integrity sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA== dependencies: "@eslint/eslintrc" "^1.3.0" "@humanwhocodes/config-array" "^0.10.4" @@ -4835,13 +4923,6 @@ find-up@5.0.0, find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -4910,9 +4991,9 @@ flat@^5.0.2: integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" - integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== follow-redirects@^1.14.0: version "1.15.1" @@ -6809,9 +6890,9 @@ keypress@~0.2.1: integrity sha512-HjorDJFNhnM4SicvaUXac0X77NiskggxJdesG72+O5zBKpSqKFCrqmndKVqpu3pFqkla0St6uGk8Ju0sCurrmg== keyv@^4.0.0: - version "4.3.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.3.3.tgz#6c1bcda6353a9e96fc1b4e1aeb803a6e35090ba9" - integrity sha512-AcysI17RvakTh8ir03+a3zJr5r0ovnAH/XTXei/4HIv3bL2K/jzvgivLK9UuI/JbU1aJjM3NSAnVvVVd3n+4DQ== + version "4.4.1" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.4.1.tgz#5d97bae8dfbb6788ebc9330daf5eb6582e2d3d1c" + integrity sha512-PzByhNxfBLnSBW2MZi1DF+W5+qB/7BMpOokewqIvqS8GFtP7xHm2oeGU72Y1fhtfOv/FiEnI4+nyViYDmUChnw== dependencies: compress-brotli "^1.3.8" json-buffer "3.0.1" @@ -6955,14 +7036,6 @@ load-yaml-file@^0.2.0: pify "^4.0.1" strip-bom "^3.0.0" -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -7176,9 +7249,9 @@ lru-cache@^6.0.0: yallist "^4.0.0" lru-cache@^7.7.1: - version "7.13.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.13.2.tgz#bb5d3f1deea3f3a7a35c1c44345566a612e09cd0" - integrity sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA== + version "7.14.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.0.tgz#21be64954a4680e303a09e9468f880b98a0b3c7f" + integrity sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ== lunr@^2.3.9: version "2.3.9" @@ -7198,9 +7271,9 @@ make-error@^1, make-error@^1.1.1: integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== make-fetch-happen@^10.0.1: - version "10.2.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.0.tgz#0bde3914f2f82750b5d48c6d2294d2c74f985e5b" - integrity sha512-OnEfCLofQVJ5zgKwGk55GaqosqKjaR6khQlJY3dBAA+hM25Bc5CmX5rKUfVut+rYA3uidA7zb7AvcglU87rPRg== + version "10.2.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== dependencies: agentkeepalive "^4.2.1" cacache "^16.1.0" @@ -7264,9 +7337,9 @@ map-visit@^1.0.0: object-visit "^1.0.0" marked@^4.0.16: - version "4.0.18" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.18.tgz#cd0ac54b2e5610cfb90e8fd46ccaa8292c9ed569" - integrity sha512-wbLDJ7Zh0sqA0Vdg6aqlbT+yPxqLblpAZh1mK2+AO2twQkPywvvqQNfEPVwSSRjZ7dZcdeVBIAgiO7MMp3Dszw== + version "4.0.19" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.19.tgz#d36198d1ac1255525153c351c68c75bc1d7aee46" + integrity sha512-rgQF/OxOiLcvgUAj1Q1tAf4Bgxn5h5JZTp04Fx4XUkVhs7B+7YA9JEWJhJpoO8eJt8MkZMwqLCNeNqj1bCREZQ== matcher@^3.0.0: version "3.0.0" @@ -7518,9 +7591,9 @@ minipass-fetch@^1.3.0, minipass-fetch@^1.3.2, minipass-fetch@^1.4.1: encoding "^0.1.12" minipass-fetch@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.0.tgz#ca1754a5f857a3be99a9271277246ac0b44c3ff8" - integrity sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg== + version "2.1.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== dependencies: minipass "^3.1.6" minipass-sized "^1.0.3" @@ -8017,6 +8090,11 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== +npm-normalize-package-bin@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" + integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== + npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: version "8.1.5" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" @@ -8212,9 +8290,9 @@ object-visit@^1.0.0: isobject "^3.0.0" object.assign@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.3.tgz#d36b7700ddf0019abb6b1df1bb13f6445f79051f" - integrity sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA== + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" @@ -8379,13 +8457,6 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -8400,13 +8471,6 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -8465,11 +8529,6 @@ p-transform@^1.3.0: debug "^4.3.2" p-queue "^6.6.2" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== - p-try@^2.0.0, p-try@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -9032,9 +9091,9 @@ read-cmd-shim@^2.0.0: integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== read-cmd-shim@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz#62b8c638225c61e6cc607f8f4b779f3b8238f155" - integrity sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog== + version "3.0.1" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz#868c235ec59d1de2db69e11aec885bc095aea087" + integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: version "2.0.3" @@ -9911,9 +9970,9 @@ spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.11" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" - integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + version "3.0.12" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" + integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -10389,13 +10448,14 @@ toml@^3.0.0: integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== tough-cookie@*: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + version "4.1.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.0.tgz#039b203b2ad95cd9d2a2aae07b238cb83adc46c7" + integrity sha512-IVX6AagLelGwl6F0E+hoRpXzuD192cZhAcmT7/eoLr0PnsB1wv2E5c+A2O+V8xth9FlL2p0OstFsWn0bZpVn4w== dependencies: psl "^1.1.33" punycode "^2.1.1" - universalify "^0.1.2" + universalify "^0.2.0" + url-parse "^1.5.3" tough-cookie@~2.5.0: version "2.5.0" @@ -10627,9 +10687,9 @@ typescript@~4.4.3: integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== uglify-js@^3.1.4, uglify-js@^3.1.9: - version "3.16.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.16.3.tgz#94c7a63337ee31227a18d03b8a3041c210fd1f1d" - integrity sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw== + version "3.17.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.0.tgz#55bd6e9d19ce5eef0d5ad17cd1f587d85b180a85" + integrity sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg== uint64be@^1.0.1: version "1.0.1" @@ -10663,7 +10723,14 @@ unique-filename@^1.1.1: dependencies: unique-slug "^2.0.0" -unique-slug@^2.0.0: +unique-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.0.tgz#c844c84c3b22e92038b0c53950f9dc34d2b55490" + integrity sha512-tpzoz2RpZ//6Zt4GPpOFTyrnfZuSvjIfe8lvx6Thp4yTQwJtAFwPlssEBE62VhGA2We5/COyNpcIu+OABu3/Yg== + dependencies: + unique-slug "^2.0.2" + +unique-slug@^2.0.0, unique-slug@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== @@ -10675,11 +10742,16 @@ universal-user-agent@^6.0.0: resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== -universalify@^0.1.0, universalify@^0.1.2: +universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + universalify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" @@ -10770,7 +10842,7 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" -url-parse@^1.4.3: +url-parse@^1.4.3, url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== @@ -11098,9 +11170,9 @@ write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: typedarray-to-buffer "^3.1.5" write-file-atomic@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" - integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" signal-exit "^3.0.7" @@ -11148,11 +11220,6 @@ xmlcreate@^2.0.4: resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-2.0.4.tgz#0c5ab0f99cdd02a81065fa9cd8f8ae87624889be" integrity sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg== -xmldom-sfdx-encoding@^0.1.30: - version "0.1.30" - resolved "https://registry.yarnpkg.com/xmldom-sfdx-encoding/-/xmldom-sfdx-encoding-0.1.30.tgz#bc075757788573b8988facd6f7e7f073440b20b9" - integrity sha512-NOZCfMfwvCMBlSMBr971cnjmToNswV68A1CA3pnM0WGauo1BhWpTgSsj6Lbq8HNAI2OOdWktCSMLtaZU5wVBHA== - xregexp@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"