From e58d63a1d704b1b379cf30985d881cbc5fa51b5b Mon Sep 17 00:00:00 2001 From: Sebastien Date: Fri, 21 Oct 2022 11:43:59 +0200 Subject: [PATCH] feat: new default api version definition algorithm (#372) Co-authored-by: Mehdi Cherfaoui --- README.md | 7 +- __mocks__/fs.js | 6 +- __tests__/__utils__/testHandlerHelper.js | 15 +- .../unit/lib/metadata/metadataManager.test.js | 34 +- __tests__/unit/lib/service/botHandler.test.js | 4 +- .../lib/service/customObjectHandler.test.js | 4 +- .../unit/lib/service/inFileHandler.test.js | 4 +- .../unit/lib/service/inFolderHandler.test.js | 4 +- .../lib/service/inResourceHandler.test.js | 4 +- .../unit/lib/service/standardHandler.test.js | 4 +- .../service/subCustomObjectHandler.test.js | 13 +- .../lib/service/typeHandlerFactory.test.js | 7 +- __tests__/unit/lib/utils/cliHelper.test.js | 334 +++++- .../unit/lib/utils/packageHelper.test.js | 4 +- __tests__/unit/lib/utils/repoGitDiff.test.js | 4 +- __tests__/unit/lib/utils/typeUtils.test.js | 4 +- messages/delta.js | 3 +- package.json | 25 +- src/commands/sgd/source/delta.ts | 4 - src/locales/en.js | 12 +- src/main.js | 26 +- src/metadata/metadataManager.js | 65 +- src/utils/cliHelper.js | 62 +- yarn.lock | 1040 ++++++++--------- 24 files changed, 964 insertions(+), 725 deletions(-) diff --git a/README.md b/README.md index 13632cdb..5a7da3a8 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,10 @@ OPTIONS -W, --ignore-whitespace ignore git diff whitespace (space, tab, eol) changes - -a, --api-version=api-version [default: 55] salesforce API version + -a, --api-version=api-version salesforce metadata API version, + default to sfdx-project.json + "sourceApiVersion" attribut or + latest version -d, --generate-delta generate delta files in [--output] folder @@ -461,7 +464,7 @@ fi ### Use the module in your own node application -If you want to embed sgd in your node application, install it has a dependency for your application +If you want to embed sgd in your node application, install it as a dependency for your application ```sh yarn add sfdx-git-delta diff --git a/__mocks__/fs.js b/__mocks__/fs.js index d40236fa..f56c919e 100644 --- a/__mocks__/fs.js +++ b/__mocks__/fs.js @@ -1,6 +1,6 @@ 'use strict' const path = require('path') -const fs = jest.genMockFromModule('fs') +const fs = jest.createMockFromModule('fs') const { MASTER_DETAIL_TAG } = require('../src/utils/metadataConstants') fs.errorMode = false @@ -23,7 +23,9 @@ fs.__setMockFiles = newMockFiles => { } } -fs.promises = {} +Object.defineProperty(fs, 'promises', { + value: {}, +}) fs.promises.stat = jest.fn( elem => diff --git a/__tests__/__utils__/testHandlerHelper.js b/__tests__/__utils__/testHandlerHelper.js index 6624e711..4ac8b4bb 100644 --- a/__tests__/__utils__/testHandlerHelper.js +++ b/__tests__/__utils__/testHandlerHelper.js @@ -1,11 +1,22 @@ 'use strict' -const metadataManager = require('../../src/metadata/metadataManager') +const { + getDefinition, + getLatestSupportedVersion, +} = require('../../src/metadata/metadataManager') + +const getMetadata = async () => { + const apiVersion = await getLatestSupportedVersion() + const metadata = await getDefinition('directoryName', apiVersion) + return metadata +} + +global.getGlobalMetadata = getMetadata global.testHandlerHelper = testContext => { describe(`test if ${testContext.handler.name}`, () => { let globalMetadata beforeAll(async () => { - globalMetadata = await metadataManager.getDefinition('directoryName', 50) + globalMetadata = await getMetadata() }) describe.each(testContext.testData)( 'handles', diff --git a/__tests__/unit/lib/metadata/metadataManager.test.js b/__tests__/unit/lib/metadata/metadataManager.test.js index e919d745..a8f6f00a 100644 --- a/__tests__/unit/lib/metadata/metadataManager.test.js +++ b/__tests__/unit/lib/metadata/metadataManager.test.js @@ -1,16 +1,42 @@ 'use strict' -const metadataManager = require('../../../../src/metadata/metadataManager') +const { + getDefinition, + getLatestSupportedVersion, + isVersionSupported, +} = require('../../../../src/metadata/metadataManager') describe(`test if metadata`, () => { test('when grouped per directoryName, have classes', async () => { - const metadata = await metadataManager.getDefinition('directoryName') + const metadata = await getDefinition('directoryName') expect(metadata.get('classes')).toBeDefined() }) test('when grouped per directoryName, do not have do not exist', async () => { - let metadata = await metadataManager.getDefinition('directoryName', '48') - metadata = await metadataManager.getDefinition('directoryName', '46') + let metadata = await getDefinition('directoryName', '48') + metadata = await getDefinition('directoryName', '46') expect(metadata).toBeDefined() expect(metadata.get('do not exist')).toBeFalsy() }) + + test('getLatestSupportedVersion', async () => { + let latestVersion = await getLatestSupportedVersion() + expect(latestVersion).toBeDefined() + expect(latestVersion).toEqual(expect.any(Number)) + }) + + test('isVersionSupported', async () => { + // Arrange + const dataSet = [ + [40, false], + [46, true], + [52, true], + [55, true], + ] + + // Act & Assert + for (const data of dataSet) { + const result = await isVersionSupported(data[0]) + expect(result).toEqual(data[1]) + } + }) }) diff --git a/__tests__/unit/lib/service/botHandler.test.js b/__tests__/unit/lib/service/botHandler.test.js index a6cc8906..115db787 100644 --- a/__tests__/unit/lib/service/botHandler.test.js +++ b/__tests__/unit/lib/service/botHandler.test.js @@ -1,6 +1,5 @@ 'use strict' const BotHandler = require('../../../../src/service/botHandler') -const metadataManager = require('../../../../src/metadata/metadataManager') jest.mock('fs') const testContext = { @@ -34,7 +33,8 @@ require('fs').__setMockFiles({ describe('test BotHandler', () => { let globalMetadata beforeAll(async () => { - globalMetadata = await metadataManager.getDefinition('directoryName', 50) + // eslint-disable-next-line no-undef + globalMetadata = await getGlobalMetadata() }) // eslint-disable-next-line no-undef diff --git a/__tests__/unit/lib/service/customObjectHandler.test.js b/__tests__/unit/lib/service/customObjectHandler.test.js index 418c37e3..e8c479f2 100644 --- a/__tests__/unit/lib/service/customObjectHandler.test.js +++ b/__tests__/unit/lib/service/customObjectHandler.test.js @@ -1,6 +1,5 @@ 'use strict' const CustomObjectHandler = require('../../../../src/service/customObjectHandler') -const metadataManager = require('../../../../src/metadata/metadataManager') const { MASTER_DETAIL_TAG } = require('../../../../src/utils/metadataConstants') const fse = require('fs-extra') jest.mock('fs') @@ -35,7 +34,8 @@ const testContext = { describe('customObjectHandler', () => { let globalMetadata beforeAll(async () => { - globalMetadata = await metadataManager.getDefinition('directoryName', 50) + // eslint-disable-next-line no-undef + globalMetadata = await getGlobalMetadata() }) // eslint-disable-next-line no-undef describe('test CustomObjectHandler with fields', () => { diff --git a/__tests__/unit/lib/service/inFileHandler.test.js b/__tests__/unit/lib/service/inFileHandler.test.js index 7ed5bb27..1f135782 100644 --- a/__tests__/unit/lib/service/inFileHandler.test.js +++ b/__tests__/unit/lib/service/inFileHandler.test.js @@ -4,7 +4,6 @@ const { PLUS, MINUS } = require('../../../../src/utils/gitConstants') const { LABEL_DIRECTORY_NAME, } = require('../../../../src/utils/metadataConstants') -const metadataManager = require('../../../../src/metadata/metadataManager') const { EOL } = require('os') jest.mock('fs') @@ -92,7 +91,8 @@ describe(`test if inFileHandler`, () => { let work let globalMetadata beforeAll(async () => { - globalMetadata = await metadataManager.getDefinition('directoryName', 50) + // eslint-disable-next-line no-undef + globalMetadata = await getGlobalMetadata() }) beforeEach(() => { work = { diff --git a/__tests__/unit/lib/service/inFolderHandler.test.js b/__tests__/unit/lib/service/inFolderHandler.test.js index 1ad51426..6b09eaa8 100644 --- a/__tests__/unit/lib/service/inFolderHandler.test.js +++ b/__tests__/unit/lib/service/inFolderHandler.test.js @@ -1,6 +1,5 @@ 'use strict' const InFolder = require('../../../../src/service/inFolderHandler') -const metadataManager = require('../../../../src/metadata/metadataManager') const fs = require('fs') const fse = require('fs-extra') jest.mock('fs') @@ -62,7 +61,8 @@ describe('InFolderHander', () => { let globalMetadata let work beforeAll(async () => { - globalMetadata = await metadataManager.getDefinition('directoryName', 50) + // eslint-disable-next-line no-undef + globalMetadata = await getGlobalMetadata() work = { config: { output: '', repo: '.', generateDelta: true }, diffs: { package: new Map(), destructiveChanges: new Map() }, diff --git a/__tests__/unit/lib/service/inResourceHandler.test.js b/__tests__/unit/lib/service/inResourceHandler.test.js index 88d950d4..8c67c95d 100644 --- a/__tests__/unit/lib/service/inResourceHandler.test.js +++ b/__tests__/unit/lib/service/inResourceHandler.test.js @@ -1,6 +1,5 @@ 'use strict' const InResource = require('../../../../src/service/inResourceHandler') -const metadataManager = require('../../../../src/metadata/metadataManager') jest.mock('fs') jest.mock('fs-extra') const fs = require('fs') @@ -67,7 +66,8 @@ describe('test inResourceHandler', () => { 'force-app/main/default/waveTemplates/WaveTemplateTest/template-info.json': '{"test":"test"}', }) - globalMetadata = await metadataManager.getDefinition('directoryName', 50) + // eslint-disable-next-line no-undef + globalMetadata = await getGlobalMetadata() }) // eslint-disable-next-line no-undef diff --git a/__tests__/unit/lib/service/standardHandler.test.js b/__tests__/unit/lib/service/standardHandler.test.js index 727dedce..b1d9193d 100644 --- a/__tests__/unit/lib/service/standardHandler.test.js +++ b/__tests__/unit/lib/service/standardHandler.test.js @@ -1,7 +1,6 @@ 'use strict' const StandardHandler = require('../../../../src/service/standardHandler') const { FSE_BIGINT_ERROR } = require('../../../../src/utils/fsHelper') -const metadataManager = require('../../../../src/metadata/metadataManager') const mc = require('../../../../src/utils/metadataConstants') const fse = require('fs-extra') const fs = require('fs') @@ -96,7 +95,8 @@ const testContext = { describe(`standardHandler`, () => { let globalMetadata beforeAll(async () => { - globalMetadata = await metadataManager.getDefinition('directoryName', 54) + // eslint-disable-next-line no-undef + globalMetadata = await getGlobalMetadata() }) beforeEach(() => { diff --git a/__tests__/unit/lib/service/subCustomObjectHandler.test.js b/__tests__/unit/lib/service/subCustomObjectHandler.test.js index 06e9743e..2d5ee32d 100644 --- a/__tests__/unit/lib/service/subCustomObjectHandler.test.js +++ b/__tests__/unit/lib/service/subCustomObjectHandler.test.js @@ -1,5 +1,4 @@ 'use strict' -const metadataManager = require('../../../../src/metadata/metadataManager') const SubCustomObject = require('../../../../src/service/subCustomObjectHandler') jest.mock('fs') @@ -52,10 +51,8 @@ const testContext = { testHandlerHelper(testContext) test('field is not a master detail', async () => { - const globalMetadata = await metadataManager.getDefinition( - 'directoryName', - 50 - ) + // eslint-disable-next-line no-undef + const globalMetadata = await getGlobalMetadata() const handler = new testContext.handler( `A ${testContext.testData[0][1]}`, testContext.testData[0][0], @@ -73,10 +70,8 @@ test('field is not a master detail', async () => { test('field does not generate delta', async () => { testContext.work.config.generateDelta = false - const globalMetadata = await metadataManager.getDefinition( - 'directoryName', - 50 - ) + // eslint-disable-next-line no-undef + const globalMetadata = await getGlobalMetadata() const handler = new testContext.handler( `A ${testContext.testData[0][1]}`, testContext.testData[0][0], diff --git a/__tests__/unit/lib/service/typeHandlerFactory.test.js b/__tests__/unit/lib/service/typeHandlerFactory.test.js index 6f4f3561..c7a48301 100644 --- a/__tests__/unit/lib/service/typeHandlerFactory.test.js +++ b/__tests__/unit/lib/service/typeHandlerFactory.test.js @@ -5,15 +5,12 @@ const InResource = require('../../../../src/service/inResourceHandler') const InFolder = require('../../../../src/service/inFolderHandler') const Standard = require('../../../../src/service/standardHandler') const TypeHandlerFactory = require('../../../../src/service/typeHandlerFactory') -const metadataManager = require('../../../../src/metadata/metadataManager') describe('the type handler factory', () => { let typeHandlerFactory beforeAll(async () => { - const globalMetadata = await metadataManager.getDefinition( - 'directoryName', - 50 - ) + // eslint-disable-next-line no-undef + const globalMetadata = await getGlobalMetadata() typeHandlerFactory = new TypeHandlerFactory( { config: { apiVersion: '46' }, diff --git a/__tests__/unit/lib/utils/cliHelper.test.js b/__tests__/unit/lib/utils/cliHelper.test.js index fe853f8d..51fb86f6 100644 --- a/__tests__/unit/lib/utils/cliHelper.test.js +++ b/__tests__/unit/lib/utils/cliHelper.test.js @@ -7,7 +7,11 @@ const { } = require('../../../../src/utils/gitConstants') const RepoSetup = require('../../../../src/utils/repoSetup') const CLIHelper = require('../../../../src/utils/cliHelper') +const { + getLatestSupportedVersion, +} = require('../../../../src/metadata/metadataManager') const messages = require('../../../../src/locales/en') + const { format } = require('util') jest.mock('fs') jest.mock('child_process') @@ -19,11 +23,14 @@ RepoSetup.mockImplementation(() => ({ })) const testConfig = { - output: 'output', - repo: '', - source: '', - to: 'test', - apiVersion: '46', + config: { + output: 'output', + repo: '', + source: '', + to: 'test', + apiVersion: '46', + }, + warnings: [], } const mockFiles = { @@ -39,84 +46,124 @@ describe(`test if the application`, () => { }) test('throws errors when to parameter is not filled', async () => { - let cliHelper = new CLIHelper({ ...testConfig, to: undefined }) + const cliHelper = new CLIHelper({ + ...testConfig, + config: { + ...testConfig.config, + to: undefined, + }, + }) expect.assertions(1) await expect(cliHelper.validateConfig()).rejects.toThrow() }) test('throws errors when apiVersion parameter is NaN', async () => { - let cliHelper = new CLIHelper({ ...testConfig, apiVersion: 'NotANumber' }) + const cliHelper = new CLIHelper({ + ...testConfig, + config: { + ...testConfig.config, + to: 'NotANumber', + }, + }) expect.assertions(1) await expect(cliHelper.validateConfig()).rejects.toThrow() }) test('throws errors when fs.stat throw error', async () => { fs.statErrorMode = true - let cliHelper = new CLIHelper({ + const cliHelper = new CLIHelper({ ...testConfig, - to: undefined, - output: 'stat/error', + config: { + ...testConfig.config, + to: undefined, + output: 'stat/error', + }, }) expect.assertions(1) await expect(cliHelper.validateConfig()).rejects.toThrow() }) test('throws errors when output folder does not exist', async () => { - let cliHelper = new CLIHelper({ + const cliHelper = new CLIHelper({ ...testConfig, - to: undefined, - output: 'not/exist/folder', + config: { + ...testConfig.config, + to: undefined, + output: 'not/exist/folder', + }, }) expect.assertions(1) await expect(cliHelper.validateConfig()).rejects.toThrow() }) test('throws errors when output is not a folder', async () => { - let cliHelper = new CLIHelper({ ...testConfig, output: 'file' }) + const cliHelper = new CLIHelper({ + ...testConfig, + config: { + ...testConfig.config, + to: undefined, + output: 'file', + }, + }) expect.assertions(1) await expect(cliHelper.validateConfig()).rejects.toThrow() }) test('throws errors when repo is not git repository', async () => { - let cliHelper = new CLIHelper({ + const cliHelper = new CLIHelper({ ...testConfig, - repo: 'not/git/folder', + config: { + ...testConfig.config, + repo: 'not/git/folder', + }, }) expect.assertions(1) await expect(cliHelper.validateConfig()).rejects.toThrow() }) test('throws errors when file is not found for --ignore', async () => { - let cliHelper = new CLIHelper({ + const cliHelper = new CLIHelper({ ...testConfig, - ignore: 'not-a-file', + config: { + ...testConfig.config, + ignore: 'not-a-file', + }, }) expect.assertions(1) await expect(cliHelper.validateConfig()).rejects.toThrow() }) test('throws errors when file is not found for --ignore-destructive', async () => { - let cliHelper = new CLIHelper({ + const cliHelper = new CLIHelper({ ...testConfig, - ignoreDestructive: 'not-a-file', + config: { + ...testConfig.config, + ignoreDestructive: 'not-a-file', + }, }) expect.assertions(1) await expect(cliHelper.validateConfig()).rejects.toThrow() }) test('throws errors when file is not found for --include', async () => { - let cliHelper = new CLIHelper({ + const cliHelper = new CLIHelper({ ...testConfig, - include: 'not-a-file', + config: { + ...testConfig.config, + include: 'not-a-file', + }, }) expect.assertions(1) await expect(cliHelper.validateConfig()).rejects.toThrow() }) test('throws errors when file is not found for --include-destructive', async () => { - let cliHelper = new CLIHelper({ + const cliHelper = new CLIHelper({ ...testConfig, - includeDestructive: 'not-a-file', + config: { + ...testConfig.config, + includeDestructive: 'not-a-file', + }, }) expect.assertions(1) await expect(cliHelper.validateConfig()).rejects.toThrow() @@ -124,10 +171,13 @@ describe(`test if the application`, () => { test('throws errors when "-t" and "-d" are set', async () => { const notHeadSHA = 'test' - let cliHelper = new CLIHelper({ + const cliHelper = new CLIHelper({ ...testConfig, - to: notHeadSHA, - generateDelta: true, + config: { + ...testConfig.config, + to: notHeadSHA, + generateDelta: true, + }, }) expect.assertions(1) await expect(cliHelper.validateConfig()).rejects.toThrow() @@ -135,10 +185,13 @@ describe(`test if the application`, () => { test('throws errors when "-t" is not a git expression', async () => { const emptyString = '' - let cliHelper = new CLIHelper({ + const cliHelper = new CLIHelper({ ...testConfig, - to: emptyString, - generateDelta: false, + config: { + ...testConfig.config, + to: emptyString, + generateDelta: false, + }, }) expect.assertions(1) await expect(cliHelper.validateConfig()).rejects.toThrow( @@ -148,10 +201,13 @@ describe(`test if the application`, () => { test('throws errors when "-f" is not a git expression', async () => { const emptyString = '' - let cliHelper = new CLIHelper({ + const cliHelper = new CLIHelper({ ...testConfig, - from: emptyString, - generateDelta: false, + config: { + ...testConfig.config, + from: emptyString, + generateDelta: false, + }, }) expect.assertions(1) await expect(cliHelper.validateConfig()).rejects.toThrow( @@ -162,7 +218,7 @@ describe(`test if the application`, () => { test('throws errors when "-t" is not a valid sha pointer', async () => { child_process.__setOutput([[TAG_REF_TYPE], ['not a valid sha pointer']]) const notHeadSHA = 'test' - let cliHelper = new CLIHelper({ + const cliHelper = new CLIHelper({ ...testConfig, to: notHeadSHA, generateDelta: false, @@ -176,10 +232,13 @@ describe(`test if the application`, () => { test('throws errors when "-f" is not a valid sha pointer', async () => { child_process.__setOutput([['not a valid sha pointer'], [COMMIT_REF_TYPE]]) const notHeadSHA = 'test' - let cliHelper = new CLIHelper({ + const cliHelper = new CLIHelper({ ...testConfig, - from: notHeadSHA, - generateDelta: false, + config: { + ...testConfig.config, + from: notHeadSHA, + generateDelta: false, + }, }) expect.assertions(1) await expect(cliHelper.validateConfig()).rejects.toThrow( @@ -193,11 +252,14 @@ describe(`test if the application`, () => { ['not a valid sha pointer'], ]) const notHeadSHA = 'test' - let cliHelper = new CLIHelper({ + const cliHelper = new CLIHelper({ ...testConfig, - to: notHeadSHA, - from: notHeadSHA, - generateDelta: false, + config: { + ...testConfig.config, + to: notHeadSHA, + from: notHeadSHA, + generateDelta: false, + }, }) expect.assertions(2) await expect(cliHelper.validateConfig()).rejects.toThrow( @@ -211,10 +273,14 @@ describe(`test if the application`, () => { test('do not throw errors when "-t" and "-f" are valid sha pointer', async () => { child_process.__setOutput([[TAG_REF_TYPE], [COMMIT_REF_TYPE]]) const notHeadSHA = 'test' - let cliHelper = new CLIHelper({ + + const cliHelper = new CLIHelper({ ...testConfig, - from: notHeadSHA, - generateDelta: false, + config: { + ...testConfig.config, + from: notHeadSHA, + generateDelta: false, + }, }) expect.assertions(2) await expect(cliHelper.validateConfig()).rejects.not.toThrow( @@ -230,9 +296,12 @@ describe(`test if the application`, () => { ...mockFiles, 'submodule/.git': 'lorem ipsum', }) - let cliHelper = new CLIHelper({ + const cliHelper = new CLIHelper({ ...testConfig, - repo: 'submodule/', + config: { + ...testConfig.config, + repo: 'submodule/', + }, }) expect.assertions(1) await expect(cliHelper.validateConfig()).rejects.not.toThrow( @@ -245,15 +314,180 @@ describe(`test if the application`, () => { ...mockFiles, 'submodule/.git': '', }) - let cliHelper = new CLIHelper({ + const cliHelper = new CLIHelper({ ...testConfig, - repo: 'submodule/', + config: { + ...testConfig.config, + repo: 'submodule/', + }, }) - // let cliHelper = new CLIHelper({ ...testConfig, repo: './submodule' }) expect.assertions(1) - // cliHelper.validateConfig() await expect(cliHelper.validateConfig()).rejects.not.toThrow( format(messages.errorPathIsNotGit, 'submodule/.git') ) }) + + describe('apiVersion parameter handling', () => { + let latestAPIVersionSupported + beforeAll(async () => { + latestAPIVersionSupported = await getLatestSupportedVersion() + }) + describe('when apiVersion parameter is set with supported value', () => { + test.each([46, 52, 55])( + 'config.apiVersion (%s) equals the parameter', + async version => { + // Arrange + const work = { + ...testConfig, + config: { + ...testConfig.config, + apiVersion: version, + }, + warnings: [], + } + const cliHelper = new CLIHelper(work) + + // Act + await cliHelper._handleDefault() + + // Assert + expect(work.config.apiVersion).toEqual(version) + expect(work.warnings.length).toEqual(0) + } + ) + }) + describe('when apiVersion parameter is set with unsupported value', () => { + test.each(['NaN', 40, 55.1, 'awesome', '1000000000', 0])( + `config.apiVersion (%s) equals the latest version `, + async version => { + // Arrange + const work = { + ...testConfig, + config: { + ...testConfig.config, + apiVersion: version, + }, + warnings: [], + } + const cliHelper = new CLIHelper(work) + + // Act + await cliHelper._handleDefault() + + // Assert + expect(work.config.apiVersion).toEqual(latestAPIVersionSupported) + expect(work.warnings.length).toEqual(1) + } + ) + }) + + describe('when apiVersion parameter is not set', () => { + describe('when sfdx-project.json file exist', () => { + describe('when "sourceApiVersion" attribut is set with supported value', () => { + test.each(['46', '52', '55', '46.0', '52.0', '55.0'])( + 'config.apiVersion (%s) equals the "sourceApiVersion" attribut', + async version => { + // Arrange + fs.__setMockFiles({ + ...mockFiles, + 'sfdx-project.json': `{"sourceApiVersion":${version}}`, + }) + + const work = { + ...testConfig, + config: { + ...testConfig.config, + apiVersion: undefined, + }, + warnings: [], + } + const cliHelper = new CLIHelper(work) + + // Act + await cliHelper._handleDefault() + + // Assert + expect(work.config.apiVersion).toEqual(+version) + expect(work.warnings.length).toEqual(0) + } + ) + }) + describe('when "sourceApiVersion" attribut is set with unsupported value', () => { + test.each([NaN, '40', 'awesome', 1000000000, ''])( + 'config.apiVersion (%s) equals the latest version', + async version => { + // Arrange + fs.__setMockFiles({ + ...mockFiles, + 'sfdx-project.json': `{"sourceApiVersion":"${version}"}`, + }) + + const work = { + ...testConfig, + config: { + ...testConfig.config, + apiVersion: undefined, + }, + warnings: [], + } + const cliHelper = new CLIHelper(work) + + // Act + await cliHelper._handleDefault() + + // Assert + expect(work.config.apiVersion).toEqual(latestAPIVersionSupported) + expect(work.warnings.length).toEqual(1) + } + ) + }) + + test('when "sourceApiVersion" attribut is not set', async () => { + // Arrange + fs.__setMockFiles({ + ...mockFiles, + 'sfdx-project.json': `{}`, + }) + + const work = { + ...testConfig, + config: { + ...testConfig.config, + apiVersion: undefined, + }, + warnings: [], + } + const cliHelper = new CLIHelper(work) + + // Act + await cliHelper._handleDefault() + + // Assert + expect(work.config.apiVersion).toEqual(latestAPIVersionSupported) + expect(work.warnings.length).toEqual(1) + }) + }) + describe('when sfdx-project.json file does not exist', () => { + test('config.apiVersion equals the latest version', async () => { + // Arrange + const work = { + ...testConfig, + config: { + ...testConfig.config, + apiVersion: undefined, + }, + warnings: [], + } + const cliHelper = new CLIHelper(work) + + // Act + await cliHelper._handleDefault() + + // Assert + expect(work.config.apiVersion).toEqual(latestAPIVersionSupported) + expect(work.warnings.length).toEqual(0) + }) + }) + }) + }) }) diff --git a/__tests__/unit/lib/utils/packageHelper.test.js b/__tests__/unit/lib/utils/packageHelper.test.js index 811ebbbf..c8f27acd 100644 --- a/__tests__/unit/lib/utils/packageHelper.test.js +++ b/__tests__/unit/lib/utils/packageHelper.test.js @@ -3,7 +3,6 @@ const PackageBuilder = require('../../../../src/utils/packageHelper') const { fillPackageWithParameter, } = require('../../../../src/utils/packageHelper') -const metadataManager = require('../../../../src/metadata/metadataManager') const options = { apiVersion: '46' } const tests = [ @@ -97,7 +96,8 @@ describe(`test if package builder`, () => { let globalMetadata let packageConstructor beforeAll(async () => { - globalMetadata = await metadataManager.getDefinition('directoryName', 50) + // eslint-disable-next-line no-undef + globalMetadata = await getGlobalMetadata() packageConstructor = new PackageBuilder(options, globalMetadata) }) diff --git a/__tests__/unit/lib/utils/repoGitDiff.test.js b/__tests__/unit/lib/utils/repoGitDiff.test.js index 6388114a..87b7f42e 100644 --- a/__tests__/unit/lib/utils/repoGitDiff.test.js +++ b/__tests__/unit/lib/utils/repoGitDiff.test.js @@ -1,6 +1,5 @@ 'use strict' const RepoGitDiff = require('../../../../src/utils/repoGitDiff') -const metadataManager = require('../../../../src/metadata/metadataManager') const { ADDITION, DELETION, @@ -17,7 +16,8 @@ const TAB = '\t' describe(`test if repoGitDiff`, () => { let globalMetadata beforeAll(async () => { - globalMetadata = await metadataManager.getDefinition('directoryName', 50) + // eslint-disable-next-line no-undef + globalMetadata = await getGlobalMetadata() }) beforeEach(() => { diff --git a/__tests__/unit/lib/utils/typeUtils.test.js b/__tests__/unit/lib/utils/typeUtils.test.js index 713f0ec2..89758b93 100644 --- a/__tests__/unit/lib/utils/typeUtils.test.js +++ b/__tests__/unit/lib/utils/typeUtils.test.js @@ -1,11 +1,11 @@ 'use strict' -const metadataManager = require('../../../../src/metadata/metadataManager') const { getType: sut } = require('../../../../src/utils/typeUtils') describe('typeUtils', () => { let globalMetadata beforeAll(async () => { - globalMetadata = await metadataManager.getDefinition('directoryName', 50) + // eslint-disable-next-line no-undef + globalMetadata = await getGlobalMetadata() }) describe('getType', () => { describe('when passing "having subtypes" kind of line', () => { diff --git a/messages/delta.js b/messages/delta.js index a5d82abf..bf92a711 100644 --- a/messages/delta.js +++ b/messages/delta.js @@ -10,7 +10,8 @@ module.exports = { ignoreFlag: 'file listing paths to explicitly ignore for any diff actions', ignoreDestructiveFlag: 'file listing paths to explicitly ignore for any destructive actions', - apiVersionFlag: 'salesforce API version', + apiVersionFlag: + 'salesforce metadata API version, default to sfdx-project.json "sourceApiVersion" attribut or latest version', deltaFlag: 'generate delta files in [--output] folder', ignoreWhitespaceFlag: 'ignore git diff whitespace (space, tab, eol) changes', includeFlag: 'file listing paths to explicitly include for any diff actions', diff --git a/package.json b/package.json index 63cbd126..af2980e6 100644 --- a/package.json +++ b/package.json @@ -29,8 +29,8 @@ "@oclif/command": "^1.8.18", "@oclif/config": "^1.18.5", "@oclif/errors": "^1.3.6", - "@salesforce/command": "^5.2.11", - "@salesforce/core": "^3.30.10", + "@salesforce/command": "^5.2.13", + "@salesforce/core": "^3.31.16", "fast-xml-parser": "^4.0.11", "fs-extra": "^10.1.0", "ignore": "^5.2.0", @@ -63,7 +63,7 @@ "release": "standard-version --no-verify --commit-all", "release:github": "conventional-github-releaser -p angular", "release:tags": "git push --follow-tags origin main -f --no-verify", - "increment:apiversion": "jq '.sfdc.latestApiVersion = (.sfdc.latestApiVersion|tonumber + 1 |tostring)' package.json | sponge package.json && filename=`ls src/metadata/v*.json | tail -1` && version=${filename//[!0-9]/} && ((version++)) && targetname=\"src/metadata/v${version}.json\" && \\cp $filename $targetname && yarn pack", + "increment:apiversion": "filename=`ls src/metadata/v*.json | tail -1` && version=${filename//[!0-9]/} && ((version++)) && targetname=\"src/metadata/v${version}.json\" && \\cp $filename $targetname && yarn pack", "upgrade:dependencies": "yarn yarn-upgrade-all" }, "devDependencies": { @@ -71,23 +71,23 @@ "@commitlint/config-angular": "^17.1.0", "@commitlint/prompt-cli": "^17.1.2", "@oclif/dev-cli": "^1.26.10", - "@oclif/plugin-help": "^5.1.14", - "@oclif/test": "^2.2.2", + "@oclif/plugin-help": "^5.1.15", + "@oclif/test": "^2.2.4", "@salesforce/dev-config": "^3.1.0", "@types/chai": "^4.3.3", "@types/mocha": "^10.0.0", - "@types/node": "^18.8.3", - "@typescript-eslint/eslint-plugin": "^5.39.0", - "@typescript-eslint/parser": "^5.39.0", + "@types/node": "^18.11.3", + "@typescript-eslint/eslint-plugin": "^5.40.1", + "@typescript-eslint/parser": "^5.40.1", "conventional-github-releaser": "^3.1.5", - "eslint": "^8.24.0", + "eslint": "^8.25.0", "eslint-config-prettier": "^8.5.0", "eslint-config-salesforce-typescript": "^1.1.1", "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsdoc": "^39.3.6", + "eslint-plugin-jsdoc": "^39.3.14", "eslint-plugin-prettier": "^4.2.1", "husky": "^8.0.1", - "jest": "^29.1.2", + "jest": "^29.2.1", "lint-staged": "^13.0.3", "nyc": "^15.1.0", "prettier": "^2.7.1", @@ -106,8 +106,5 @@ }, "publishConfig": { "access": "public" - }, - "sfdc": { - "latestApiVersion": "55" } } diff --git a/src/commands/sgd/source/delta.ts b/src/commands/sgd/source/delta.ts index eee289f9..0bd2bd74 100644 --- a/src/commands/sgd/source/delta.ts +++ b/src/commands/sgd/source/delta.ts @@ -8,9 +8,6 @@ const { SOURCE_DEFAULT_VALUE, OUTPUT_DEFAULT_VALUE, } = require('../../../utils/cliHelper') -const { - sfdc: { latestApiVersion }, -} = require('../../../../package.json') // Initialize Messages with the current plugin directory Messages.importMessagesDirectory(__dirname) @@ -64,7 +61,6 @@ export default class SourceDeltaGenerate extends SfdxCommand { 'api-version': flags.number({ char: 'a', description: messages.getMessage('apiVersionFlag'), - default: parseFloat(latestApiVersion), }), 'generate-delta': flags.boolean({ char: 'd', diff --git a/src/locales/en.js b/src/locales/en.js index a65a01db..344a84f6 100644 --- a/src/locales/en.js +++ b/src/locales/en.js @@ -1,10 +1,10 @@ module.exports = { - errorGitSHAisBlank: '--%s is blank: "%s"', - errorParameterIsNotGitSHA: '--%s is not a valid sha pointer: "%s"', - errorAPIVersionIsNan: 'api-version %s is not a number', - errorPathIsNotDir: '%s folder does not exist', - errorPathIsNotFile: '%s file does not exist', - errorPathIsNotGit: '%s is not a git repository', + errorGitSHAisBlank: `--%s is blank: '%s'`, + errorParameterIsNotGitSHA: `--%s is not a valid sha pointer: '%s'`, + errorPathIsNotDir: `'%s' folder does not exist`, + errorPathIsNotFile: `'%s' file does not exist`, + errorPathIsNotGit: `'%s' is not a git repository`, errorToNotHeadWithDeltaGenerate: '--generate-delta (-d) parameter cannot be used when --to (-t) parameter is not equivalent to HEAD', + warningApiVersionNotSupported: `API version not found or not supported, using '%s' instead`, } diff --git a/src/main.js b/src/main.js index a084858e..72868e53 100644 --- a/src/main.js +++ b/src/main.js @@ -1,32 +1,28 @@ 'use strict' const TypeHandlerFactory = require('./service/typeHandlerFactory') -const metadataManager = require('./metadata/metadataManager') +const { getDefinition } = require('./metadata/metadataManager') const CLIHelper = require('./utils/cliHelper') const RepoGitDiff = require('./utils/repoGitDiff') const { getPostProcessors } = require('./post-processor/postProcessorManager') module.exports = async config => { - const cliHelper = new CLIHelper(config) + const work = { + config: config, + diffs: { package: new Map(), destructiveChanges: new Map() }, + warnings: [], + } + const cliHelper = new CLIHelper(work) await cliHelper.validateConfig() - const metadata = await metadataManager.getDefinition( - 'directoryName', - config.apiVersion - ) + const metadata = await getDefinition('directoryName', config.apiVersion) const repoGitDiffHelper = new RepoGitDiff(config, metadata) const lines = await repoGitDiffHelper.getLines() - const work = await treatDiff(config, lines, metadata) + await treatDiff(work, lines, metadata) return work } -const treatDiff = async (config, lines, metadata) => { - const work = { - config: config, - diffs: { package: new Map(), destructiveChanges: new Map() }, - warnings: [], - } - +const treatDiff = async (work, lines, metadata) => { const typeHandlerFactory = new TypeHandlerFactory(work, metadata) await Promise.all( @@ -34,6 +30,4 @@ const treatDiff = async (config, lines, metadata) => { ) await getPostProcessors(work, metadata).execute() - - return work } diff --git a/src/metadata/metadataManager.js b/src/metadata/metadataManager.js index cea30638..554593a4 100644 --- a/src/metadata/metadataManager.js +++ b/src/metadata/metadataManager.js @@ -2,41 +2,48 @@ const { resolve } = require('path') const { readdir } = require('fs').promises -const LATEST = 'latest' - -let _apiMap +const _apiMap = new Map() +let _latestVersion = null const describeMetadata = new Map() -const getApiMap = async () => { - if (!_apiMap) { +const buildAPIMap = async () => { + if (_apiMap.size === 0) { const dir = await readdir(__dirname) - _apiMap = dir + dir .filter(file => /^[a-z]+\d+\.json$/.test(file)) - .reduce((accu, file) => { - const version = file.match(/\d+/)[0] - accu.set(version, file) - if (!accu.has(LATEST) || accu.get(LATEST) < version) - accu.set(LATEST, version) - return accu - }, new Map()) - _apiMap.set(LATEST, _apiMap.get(_apiMap.get(LATEST))) + .forEach(file => { + const version = parseInt(file.match(/\d+/)[0]) + _apiMap.set(version, file) + _latestVersion = Math.max(_latestVersion, version) + }) } - return _apiMap } -module.exports = { - getDefinition: async (grouping, apiVersion) => { - if (!describeMetadata.has(apiVersion)) { - const apiMap = await getApiMap() - const apiFile = apiMap.has(apiVersion) - ? apiMap.get(apiVersion) - : apiMap.get(LATEST) - describeMetadata.set(apiVersion, require(resolve(__dirname, apiFile))) - } +const getLatestSupportedVersion = async () => { + await buildAPIMap() + return _latestVersion +} - return describeMetadata.get(apiVersion).reduce((metadata, describe) => { - metadata.set(describe[grouping], describe) - return metadata - }, new Map()) - }, +const isVersionSupported = async version => { + await buildAPIMap() + return _apiMap.has(version) } + +const getDefinition = async (grouping, apiVersion) => { + if (!describeMetadata.has(apiVersion)) { + await buildAPIMap() + const apiFile = _apiMap.has(apiVersion) + ? _apiMap.get(apiVersion) + : _apiMap.get(_latestVersion) + describeMetadata.set(apiVersion, require(resolve(__dirname, apiFile))) + } + + return describeMetadata.get(apiVersion).reduce((metadata, describe) => { + metadata.set(describe[grouping], describe) + return metadata + }, new Map()) +} + +module.exports.getDefinition = getDefinition +module.exports.getLatestSupportedVersion = getLatestSupportedVersion +module.exports.isVersionSupported = isVersionSupported diff --git a/src/utils/cliHelper.js b/src/utils/cliHelper.js index 88f0ff56..5b9f7925 100644 --- a/src/utils/cliHelper.js +++ b/src/utils/cliHelper.js @@ -4,8 +4,13 @@ const messages = require('../locales/en') const RepoSetup = require('./repoSetup') const { sanitizePath } = require('./childProcessUtils') const { GIT_FOLDER, POINTER_REF_TYPES } = require('./gitConstants') +const { + getLatestSupportedVersion, + isVersionSupported, +} = require('../metadata/metadataManager') const { format } = require('util') const { stat } = require('fs').promises +const { readFile } = require('./fsHelper') const { join } = require('path') const fsExists = async (dir, fn) => { @@ -31,11 +36,14 @@ const isGit = async dir => { const isBlank = str => !str || /^\s*$/.test(str) const GIT_SHA_PARAMETERS = ['to', 'from'] +const SOURCE_API_VERSION_ATTRIBUT = 'sourceApiVersion' +const SFDX_PROJECT_FILE_NAME = 'sfdx-project.json' class CLIHelper { - constructor(config) { - this.config = config - this.repoSetup = new RepoSetup(config) + constructor(work) { + this.work = work + this.config = work.config + this.repoSetup = new RepoSetup(work.config) } async _validateGitSha() { @@ -68,12 +76,9 @@ class CLIHelper { async validateConfig() { this._sanitizeConfig() + await this._handleDefault() const errors = [] - if (isNaN(this.config.apiVersion)) { - errors.push(format(messages.errorAPIVersionIsNan, this.config.apiVersion)) - } - const isGitPromise = isGit(this.config.repo) const isToEqualHeadPromise = this.repoSetup.isToEqualHead() const directoriesPromise = this._filterDirectories() @@ -134,6 +139,49 @@ class CLIHelper { ) } + async _handleDefault() { + await this._getApiVersion() + await this._apiVersionDefault() + } + + async _getApiVersion() { + const isInputVersionSupported = await isVersionSupported( + this.config.apiVersion + ) + if (!isInputVersionSupported) { + const sfdxProjectPath = join(this.config.repo, SFDX_PROJECT_FILE_NAME) + const exists = await fileExists(sfdxProjectPath) + if (exists) { + const sfdxProjectRaw = await readFile(sfdxProjectPath) + const sfdxProject = JSON.parse(sfdxProjectRaw) + this.config.apiVersion = + parseInt(sfdxProject[SOURCE_API_VERSION_ATTRIBUT]) || 'default' + } + } + } + + async _apiVersionDefault() { + const isInputVersionSupported = await isVersionSupported( + this.config.apiVersion + ) + + if (!isInputVersionSupported) { + const latestAPIVersionSupported = await getLatestSupportedVersion() + if ( + this.config.apiVersion !== undefined && + this.config.apiVersion !== null + ) { + this.work.warnings.push({ + message: format( + messages.warningApiVersionNotSupported, + latestAPIVersionSupported + ), + }) + } + this.config.apiVersion = latestAPIVersionSupported + } + } + _sanitizeConfig() { this.config.apiVersion = parseInt(this.config.apiVersion) this.config.repo = sanitizePath(this.config.repo) diff --git a/yarn.lock b/yarn.lock index c4570441..a8abde00 100644 --- a/yarn.lock +++ b/yarn.lock @@ -500,10 +500,10 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@es-joy/jsdoccomment@~0.31.0": - version "0.31.0" - resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.31.0.tgz#dbc342cc38eb6878c12727985e693eaef34302bc" - integrity sha512-tc1/iuQcnaiSIUVad72PBierDFpsxdUHtEF/OrfqvM1CBAsIoMP51j52jTMb3dXriwhieTo289InzZj72jL3EQ== +"@es-joy/jsdoccomment@~0.33.0": + version "0.33.0" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.33.0.tgz#59416d08442d0fdbb316fc1cb491e750db80b9ad" + integrity sha512-bkxMGTlHPE4vfarXt1L1fOm81O18jTRFNgh3Fm4iPKctfWxcpJw4cpth5BhLkGZy4HFzGn/KfD/zGks/J+ZIIw== dependencies: comment-parser "1.3.1" esquery "^1.4.0" @@ -524,10 +524,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/eslintrc@^1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.2.tgz#58b69582f3b7271d8fa67fe5251767a5b38ea356" - integrity sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ== +"@eslint/eslintrc@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -593,109 +593,109 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.1.2.tgz#0ae975a70004696f8320490fcaa1a4152f7b62e4" - integrity sha512-ujEBCcYs82BTmRxqfHMQggSlkUZP63AE5YEaTPj7eFyJOzukkTorstOUC7L6nE3w5SYadGVAnTsQ/ZjTGL0qYQ== +"@jest/console@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.2.1.tgz#5f2c62dcdd5ce66e94b6d6729e021758bceea090" + integrity sha512-MF8Adcw+WPLZGBiNxn76DOuczG3BhODTcMlDCA4+cFi41OkaY/lyI0XUUhi73F88Y+7IHoGmD80pN5CtxQUdSw== dependencies: - "@jest/types" "^29.1.2" + "@jest/types" "^29.2.1" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^29.1.2" - jest-util "^29.1.2" + jest-message-util "^29.2.1" + jest-util "^29.2.1" slash "^3.0.0" -"@jest/core@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.1.2.tgz#e5ce7a71e7da45156a96fb5eeed11d18b67bd112" - integrity sha512-sCO2Va1gikvQU2ynDN8V4+6wB7iVrD2CvT0zaRst4rglf56yLly0NQ9nuRRAWFeimRf+tCdFsb1Vk1N9LrrMPA== +"@jest/core@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.2.1.tgz#30af794ebd73bfb87cd8ba36718738dfe38b772e" + integrity sha512-kuLKYqnqgerXkBUwlHVxeSuhSnd+JMnMCLfU98bpacBSfWEJPegytDh3P2m15/JHzet32hGGld4KR4OzMb6/Tg== dependencies: - "@jest/console" "^29.1.2" - "@jest/reporters" "^29.1.2" - "@jest/test-result" "^29.1.2" - "@jest/transform" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/console" "^29.2.1" + "@jest/reporters" "^29.2.1" + "@jest/test-result" "^29.2.1" + "@jest/transform" "^29.2.1" + "@jest/types" "^29.2.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^29.0.0" - jest-config "^29.1.2" - jest-haste-map "^29.1.2" - jest-message-util "^29.1.2" - jest-regex-util "^29.0.0" - jest-resolve "^29.1.2" - jest-resolve-dependencies "^29.1.2" - jest-runner "^29.1.2" - jest-runtime "^29.1.2" - jest-snapshot "^29.1.2" - jest-util "^29.1.2" - jest-validate "^29.1.2" - jest-watcher "^29.1.2" + jest-changed-files "^29.2.0" + jest-config "^29.2.1" + jest-haste-map "^29.2.1" + jest-message-util "^29.2.1" + jest-regex-util "^29.2.0" + jest-resolve "^29.2.1" + jest-resolve-dependencies "^29.2.1" + jest-runner "^29.2.1" + jest-runtime "^29.2.1" + jest-snapshot "^29.2.1" + jest-util "^29.2.1" + jest-validate "^29.2.1" + jest-watcher "^29.2.1" micromatch "^4.0.4" - pretty-format "^29.1.2" + pretty-format "^29.2.1" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.1.2.tgz#bb51a43fce9f960ba9a48f0b5b556f30618ebc0a" - integrity sha512-rG7xZ2UeOfvOVzoLIJ0ZmvPl4tBEQ2n73CZJSlzUjPw4or1oSWC0s0Rk0ZX+pIBJ04aVr6hLWFn1DFtrnf8MhQ== +"@jest/environment@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.2.1.tgz#acb1994fbd5ad02819a1a34a923c531e6923b665" + integrity sha512-EutqA7T/X6zFjw6mAWRHND+ZkTPklmIEWCNbmwX6uCmOrFrWaLbDZjA+gePHJx6fFMMRvNfjXcvzXEtz54KPlg== dependencies: - "@jest/fake-timers" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/fake-timers" "^29.2.1" + "@jest/types" "^29.2.1" "@types/node" "*" - jest-mock "^29.1.2" + jest-mock "^29.2.1" -"@jest/expect-utils@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.1.2.tgz#66dbb514d38f7d21456bc774419c9ae5cca3f88d" - integrity sha512-4a48bhKfGj/KAH39u0ppzNTABXQ8QPccWAFUFobWBaEMSMp+sB31Z2fK/l47c4a/Mu1po2ffmfAIPxXbVTXdtg== +"@jest/expect-utils@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.2.1.tgz#eae61c90f2066540f60d23b8f254f03b7869b22f" + integrity sha512-yr4aHNg5Z1CjKby5ozm7sKjgBlCOorlAoFcvrOQ/4rbZRfgZQdnmh7cth192PYIgiPZo2bBXvqdOApnAMWFJZg== dependencies: - jest-get-type "^29.0.0" + jest-get-type "^29.2.0" -"@jest/expect@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.1.2.tgz#334a86395f621f1ab63ad95b06a588b9114d7b7a" - integrity sha512-FXw/UmaZsyfRyvZw3M6POgSNqwmuOXJuzdNiMWW9LCYo0GRoRDhg+R5iq5higmRTHQY7hx32+j7WHwinRmoILQ== +"@jest/expect@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.2.1.tgz#8d99be3886ebfcffd6cabb2b46602a301b976ffe" + integrity sha512-o14R2t2tHHHudwji43UKkzmmH49xfF5T++FQBK2tl88qwuBWQOcx7fNUYl+mA/9TPNAN0FkQ3usnpyS8FUwsvQ== dependencies: - expect "^29.1.2" - jest-snapshot "^29.1.2" + expect "^29.2.1" + jest-snapshot "^29.2.1" -"@jest/fake-timers@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.1.2.tgz#f157cdf23b4da48ce46cb00fea28ed1b57fc271a" - integrity sha512-GppaEqS+QQYegedxVMpCe2xCXxxeYwQ7RsNx55zc8f+1q1qevkZGKequfTASI7ejmg9WwI+SJCrHe9X11bLL9Q== +"@jest/fake-timers@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.2.1.tgz#786d60e8cb60ca70c9f913cb49fcc77610c072bb" + integrity sha512-KWil+8fef7Uj/P/PTZlPKk1Pw117wAmr71VWFV8ZDtRtkwmTG8oY4IRf0Ss44J2y5CYRy8d/zLOhxyoGRENjvA== dependencies: - "@jest/types" "^29.1.2" + "@jest/types" "^29.2.1" "@sinonjs/fake-timers" "^9.1.2" "@types/node" "*" - jest-message-util "^29.1.2" - jest-mock "^29.1.2" - jest-util "^29.1.2" + jest-message-util "^29.2.1" + jest-mock "^29.2.1" + jest-util "^29.2.1" -"@jest/globals@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.1.2.tgz#826ede84bc280ae7f789cb72d325c48cd048b9d3" - integrity sha512-uMgfERpJYoQmykAd0ffyMq8wignN4SvLUG6orJQRe9WAlTRc9cdpCaE/29qurXixYJVZWUqIBXhSk8v5xN1V9g== +"@jest/globals@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.2.1.tgz#6933beb8b4e43b990409a19c462fde7b71210e63" + integrity sha512-Z4EejYPP1OPVq2abk1+9urAwJqkgw5jB2UJGlPjb5ZwzPQF8WLMcigKEfFzZb2OHhEVPP0RZD0/DbVTY1R6iQA== dependencies: - "@jest/environment" "^29.1.2" - "@jest/expect" "^29.1.2" - "@jest/types" "^29.1.2" - jest-mock "^29.1.2" + "@jest/environment" "^29.2.1" + "@jest/expect" "^29.2.1" + "@jest/types" "^29.2.1" + jest-mock "^29.2.1" -"@jest/reporters@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.1.2.tgz#5520898ed0a4ecf69d8b671e1dc8465d0acdfa6e" - integrity sha512-X4fiwwyxy9mnfpxL0g9DD0KcTmEIqP0jUdnc2cfa9riHy+I6Gwwp5vOZiwyg0vZxfSDxrOlK9S4+340W4d+DAA== +"@jest/reporters@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.2.1.tgz#599e4376823751fdda50f2ca97243e013da10c4d" + integrity sha512-sCsfUKM/yIF4nNed3e/rIgVIS58EiASGMDEPWqItfLZ9UO1ALW2ASDNJzdWkxEt0T8o2Ztj619G0KKrvK+McAw== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.1.2" - "@jest/test-result" "^29.1.2" - "@jest/transform" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/console" "^29.2.1" + "@jest/test-result" "^29.2.1" + "@jest/transform" "^29.2.1" + "@jest/types" "^29.2.1" "@jridgewell/trace-mapping" "^0.3.15" "@types/node" "*" chalk "^4.0.0" @@ -708,13 +708,12 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-message-util "^29.1.2" - jest-util "^29.1.2" - jest-worker "^29.1.2" + jest-message-util "^29.2.1" + jest-util "^29.2.1" + jest-worker "^29.2.1" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" - terminal-link "^2.0.0" v8-to-istanbul "^9.0.1" "@jest/schemas@^29.0.0": @@ -724,60 +723,60 @@ dependencies: "@sinclair/typebox" "^0.24.1" -"@jest/source-map@^29.0.0": - version "29.0.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.0.0.tgz#f8d1518298089f8ae624e442bbb6eb870ee7783c" - integrity sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ== +"@jest/source-map@^29.2.0": + version "29.2.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.2.0.tgz#ab3420c46d42508dcc3dc1c6deee0b613c235744" + integrity sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ== dependencies: "@jridgewell/trace-mapping" "^0.3.15" callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.1.2.tgz#6a8d006eb2b31ce0287d1fc10d12b8ff8504f3c8" - integrity sha512-jjYYjjumCJjH9hHCoMhA8PCl1OxNeGgAoZ7yuGYILRJX9NjgzTN0pCT5qAoYR4jfOP8htIByvAlz9vfNSSBoVg== +"@jest/test-result@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.2.1.tgz#f42dbf7b9ae465d0a93eee6131473b8bb3bd2edb" + integrity sha512-lS4+H+VkhbX6z64tZP7PAUwPqhwj3kbuEHcaLuaBuB+riyaX7oa1txe0tXgrFj5hRWvZKvqO7LZDlNWeJ7VTPA== dependencies: - "@jest/console" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/console" "^29.2.1" + "@jest/types" "^29.2.1" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.1.2.tgz#10bfd89c08bfdba382eb05cc79c1d23a01238a93" - integrity sha512-fU6dsUqqm8sA+cd85BmeF7Gu9DsXVWFdGn9taxM6xN1cKdcP/ivSgXh5QucFRFz1oZxKv3/9DYYbq0ULly3P/Q== +"@jest/test-sequencer@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.2.1.tgz#cafd2c5f3528c70bd4cc243800459ac366e480cc" + integrity sha512-O/pnk0/xGj3lxPVNwB6HREJ7AYvUdyP2xo/s14/9Dtf091HoOeyIhWLKQE/4HzB8lNQBMo6J5mg0bHz/uCWK7w== dependencies: - "@jest/test-result" "^29.1.2" + "@jest/test-result" "^29.2.1" graceful-fs "^4.2.9" - jest-haste-map "^29.1.2" + jest-haste-map "^29.2.1" slash "^3.0.0" -"@jest/transform@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.1.2.tgz#20f814696e04f090421f6d505c14bbfe0157062a" - integrity sha512-2uaUuVHTitmkx1tHF+eBjb4p7UuzBG7SXIaA/hNIkaMP6K+gXYGxP38ZcrofzqN0HeZ7A90oqsOa97WU7WZkSw== +"@jest/transform@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.2.1.tgz#f3d8154edd19cdbcaf1d6646bd8f4ff7812318a2" + integrity sha512-xup+iEuaIRSQabQaeqxaQyN0vg1Dctrp9oTObQsNf3sZEowTIa5cANYuoyi8Tqhg4GCqEVLTf18KW7ii0UeFVA== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^29.1.2" + "@jest/types" "^29.2.1" "@jridgewell/trace-mapping" "^0.3.15" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^29.1.2" - jest-regex-util "^29.0.0" - jest-util "^29.1.2" + jest-haste-map "^29.2.1" + jest-regex-util "^29.2.0" + jest-util "^29.2.1" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" write-file-atomic "^4.0.1" -"@jest/types@^29.1.2": - version "29.1.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.1.2.tgz#7442d32b16bcd7592d9614173078b8c334ec730a" - integrity sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg== +"@jest/types@^29.2.1": + version "29.2.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.2.1.tgz#ec9c683094d4eb754e41e2119d8bdaef01cf6da0" + integrity sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw== dependencies: "@jest/schemas" "^29.0.0" "@types/istanbul-lib-coverage" "^2.0.0" @@ -915,44 +914,10 @@ is-wsl "^2.1.1" tslib "^2.3.1" -"@oclif/core@^1.14.1", "@oclif/core@^1.3.6", "@oclif/core@^1.6.4": - version "1.16.1" - resolved "https://registry.yarnpkg.com/@oclif/core/-/core-1.16.1.tgz#39663c903f859f8e37b375d7466b92b4394e1c8d" - integrity sha512-MfzgqcWzWymndd934pd52JAwy0RIgWWYnC0Ed7bxUVYWF4HFb3KmsE7x9/QBP9392Q14vxXi2GNLHboM/5vaDA== - dependencies: - "@oclif/linewrap" "^1.0.0" - "@oclif/screen" "^3.0.2" - ansi-escapes "^4.3.2" - ansi-styles "^4.3.0" - cardinal "^2.1.1" - chalk "^4.1.2" - clean-stack "^3.0.1" - cli-progress "^3.10.0" - debug "^4.3.4" - ejs "^3.1.6" - fs-extra "^9.1.0" - get-package-type "^0.1.0" - globby "^11.1.0" - hyperlinker "^1.0.0" - indent-string "^4.0.0" - is-wsl "^2.2.0" - js-yaml "^3.14.1" - natural-orderby "^2.0.3" - object-treeify "^1.1.33" - password-prompt "^1.1.2" - semver "^7.3.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - supports-color "^8.1.1" - supports-hyperlinks "^2.2.0" - tslib "^2.3.1" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - -"@oclif/core@^1.16.4": - version "1.16.4" - resolved "https://registry.yarnpkg.com/@oclif/core/-/core-1.16.4.tgz#fafa338ada0624d7f1adac036302b05a37cd96d0" - integrity sha512-l+xHtVMteJWeTZZ+f2yLyNjf69X0mhAH8GILXnmoAGAemXbc1DVstvloxOouarvm9xyHHhquzO1Qg5l6xa1VIw== +"@oclif/core@^1.16.5", "@oclif/core@^1.18.0": + version "1.18.0" + resolved "https://registry.yarnpkg.com/@oclif/core/-/core-1.18.0.tgz#93c790c663c6b24a609d1ea44362f5438cb19d73" + integrity sha512-12SWbbDbMrhBmEuN9cOQkbN+sFUKlSTw+NlCPVVIg3uEhnmkXgx2wZJtCN4c+IBMJjC27L9lDneeoe70yQuiVg== dependencies: "@oclif/linewrap" "^1.0.0" "@oclif/screen" "^3.0.2" @@ -1081,19 +1046,12 @@ widest-line "^3.1.0" wrap-ansi "^6.2.0" -"@oclif/plugin-help@^5.1.11": - version "5.1.12" - resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-5.1.12.tgz#24a18631eb9b22cb55e1a3b8e4f6039fd42727e6" - integrity sha512-HvH/RubJxqCinP0vUWQLTOboT+SfjfL8h40s+PymkWaldIcXlpoRaJX50vz+SjZIs7uewZwEk8fzLqpF/BWXlg== +"@oclif/plugin-help@^5.1.15": + version "5.1.15" + resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-5.1.15.tgz#c9466d3efc694cfd0e83eaca565b8799b477549c" + integrity sha512-RfLo7vOTga/02w7jTAHFOi3m4X34Xbfyl20spg4Jq7NM6WduDaIj2auXrHW3w8OkEi4Zl/g0AvB4PIyLr+NYYw== dependencies: - "@oclif/core" "^1.3.6" - -"@oclif/plugin-help@^5.1.14": - version "5.1.14" - resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-5.1.14.tgz#641e6f2c7effb4a21573d50c649af662a919bcf9" - integrity sha512-jhpD0a2bEp3YW93sQcUM3b15DH+svQqC9pMXNp1m1VyAPoskdaELgt5P/5SjmNuFwqws8scxpbYKlr2/lvvkGQ== - dependencies: - "@oclif/core" "^1.16.4" + "@oclif/core" "^1.16.5" "@oclif/screen@^1.0.4": version "1.0.4" @@ -1105,20 +1063,12 @@ resolved "https://registry.yarnpkg.com/@oclif/screen/-/screen-3.0.2.tgz#969054308fe98d130c02844a45cc792199b75670" integrity sha512-S/SF/XYJeevwIgHFmVDAFRUvM3m+OjhvCAYMk78ZJQCYCQ5wS7j+LTt1ZEv2jpEEGg2tx/F6TYYWxddNAYHrFQ== -"@oclif/test@^2.1.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@oclif/test/-/test-2.1.1.tgz#140ed05ece651cdf427306b5c878826e273a1722" - integrity sha512-vuBDXnXbnU073xNUqj+V4Fbrp+6Xhs1sgeWUIMj69SP9qC3pUBPfEPzIoK00ga6/WxZ+2qUgqCBAOPGz3nmTEg== - dependencies: - "@oclif/core" "^1.6.4" - fancy-test "^2.0.0" - -"@oclif/test@^2.2.2": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@oclif/test/-/test-2.2.2.tgz#1dc0992b85b6e6bf8f463758f410994866a572fa" - integrity sha512-gzVB+sstU45NHHjaMws3+/VjQmmO4VbDr1AcUg+/IzjMIwEvM6ssYD/d1kNPup0OjIgQqRQgGyVxKJX/vqHMtg== +"@oclif/test@^2.2.0", "@oclif/test@^2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@oclif/test/-/test-2.2.4.tgz#30c29cb4a0cd370e8d95280fe40097473edbd884" + integrity sha512-bLaapIKHWyeuWCbD64uUCJCH+OJHFlEi6u/3sRPgi00kEyP95mM23IvkggDWEzQNh92IFj1xx5Bg8qnp0E2tjw== dependencies: - "@oclif/core" "^1.16.4" + "@oclif/core" "^1.18.0" fancy-test "^2.0.4" "@oozcitak/dom@1.15.10": @@ -1162,28 +1112,27 @@ mv "~2" safe-json-stringify "~1" -"@salesforce/command@^5.2.11": - version "5.2.11" - resolved "https://registry.yarnpkg.com/@salesforce/command/-/command-5.2.11.tgz#43fdb687c8cd6a5f76dafd548ea176663c8a6620" - integrity sha512-6KhXbxlV+noVFL8FNhVBPDiD5Z4fEcezh1rClcjdturt2Zg/cp9KPIFqZoFn34zt30u+DlhhU3GDlfE18IoNHw== +"@salesforce/command@^5.2.13": + version "5.2.13" + resolved "https://registry.yarnpkg.com/@salesforce/command/-/command-5.2.13.tgz#9bd019bc997a9619977362a7348af1b65b1800c0" + integrity sha512-+7+ZWjB3kQqJtcJpqiSrhW8mclgEmy+d26kDch0YUCxhUvoWQjCk23D4jDkZrFPJrv7sudeQXLSosqEIGppF3w== dependencies: - "@oclif/core" "^1.14.1" - "@oclif/plugin-help" "^5.1.11" - "@oclif/test" "^2.1.0" - "@salesforce/core" "^3.30.9" + "@oclif/core" "^1.18.0" + "@oclif/test" "^2.2.0" + "@salesforce/core" "^3.31.9" "@salesforce/kit" "^1.6.1" "@salesforce/ts-types" "^1.5.21" chalk "^2.4.2" -"@salesforce/core@^3.30.10": - version "3.30.10" - resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-3.30.10.tgz#146724f2bbc294afbcb3fa41eac281d5d880f2f7" - integrity sha512-mVt/gLuF/zimBEs1oDThHm6GjKCRYkc6MuLjfwZrAo3m2H2QFH828HZEVU0nulkC4lF7F0kMXuLqk8n6sWwScw== +"@salesforce/core@^3.31.16": + version "3.31.16" + resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-3.31.16.tgz#af52b01eda974b8f000c81d7111e299db64ee38c" + integrity sha512-at5J9chWR0RQxymQTNiyoNxsVJ56Opq79F7FIKt7Y0T/o+OkdOCnveny2tcVEFeJz4OjRV9+57R9eCsn0gg3gQ== dependencies: "@salesforce/bunyan" "^2.0.0" - "@salesforce/kit" "^1.5.41" + "@salesforce/kit" "^1.7.0" "@salesforce/schemas" "^1.1.0" - "@salesforce/ts-types" "^1.5.20" + "@salesforce/ts-types" "^1.5.21" "@types/graceful-fs" "^4.1.5" "@types/semver" "^7.3.9" ajv "^8.11.0" @@ -1194,19 +1143,19 @@ form-data "^4.0.0" graceful-fs "^4.2.9" js2xmlparser "^4.0.1" - jsforce beta + jsforce "^2.0.0-beta.19" jsonwebtoken "8.5.1" - ts-retry-promise "^0.6.0" + ts-retry-promise "^0.7.0" -"@salesforce/core@^3.30.9": - version "3.30.9" - resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-3.30.9.tgz#a2a577db60f1276d08b81e185d49161a75b54d76" - integrity sha512-dZFr2QS0joxl/FgdR+ZYhIVTEsJ7t+u02eaZCXLOqug/rzBq9xFoGPQaBboXx4CSf7k71Ox/Ty0sMSZNzkXb0A== +"@salesforce/core@^3.31.9": + version "3.31.10" + resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-3.31.10.tgz#8ad004c0e3559a50d5dee3aa71e03bb57686c190" + integrity sha512-ie05IaLVcM8jhRjCh3sVUBcEtTb2dC0FWUTIXaGKHRSqdJPRuTKE+Uwbp7RYb4Wywjiunf8+721msYOwAO4QbA== dependencies: "@salesforce/bunyan" "^2.0.0" - "@salesforce/kit" "^1.5.41" + "@salesforce/kit" "^1.7.0" "@salesforce/schemas" "^1.1.0" - "@salesforce/ts-types" "^1.5.20" + "@salesforce/ts-types" "^1.5.21" "@types/graceful-fs" "^4.1.5" "@types/semver" "^7.3.9" ajv "^8.11.0" @@ -1217,24 +1166,15 @@ form-data "^4.0.0" graceful-fs "^4.2.9" js2xmlparser "^4.0.1" - jsforce beta + jsforce "^2.0.0-beta.19" jsonwebtoken "8.5.1" - ts-retry-promise "^0.6.0" + ts-retry-promise "^0.7.0" "@salesforce/dev-config@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@salesforce/dev-config/-/dev-config-3.1.0.tgz#8eb5b35860ff60d1c1dc3fd9329b01a28475d5b9" integrity sha512-cPph7ibj3DeSzWDFLcLtxOh5fmUlDUY2Ezq43n0V6auVP+l8orxRHjCExHS86SB3QKVgXkC8yYhryXiS8KF7Zw== -"@salesforce/kit@^1.5.41": - 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" - tslib "^2.2.0" - "@salesforce/kit@^1.6.1": version "1.6.1" resolved "https://registry.yarnpkg.com/@salesforce/kit/-/kit-1.6.1.tgz#73a16205f957e527b2cc9bfcebc55b6880f3169b" @@ -1244,18 +1184,20 @@ shx "^0.3.3" tslib "^2.2.0" +"@salesforce/kit@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@salesforce/kit/-/kit-1.7.0.tgz#f14ef71662742edf0fb74ffb23c530fad5ccb4c9" + integrity sha512-AxJi7W9skYEVQrZMGyWtG3xOOLzdRu7638Hlea3gtPdMpMRc0aB1Nvpg7Ru+VLtULNhXnnQ3nXesDl0d2TA04w== + dependencies: + "@salesforce/ts-types" "^1.5.21" + shx "^0.3.3" + tslib "^2.2.0" + "@salesforce/schemas@^1.1.0": version "1.1.3" resolved "https://registry.yarnpkg.com/@salesforce/schemas/-/schemas-1.1.3.tgz#fce83f55c7557d47b9c814d5d02978ad734300b3" integrity sha512-XWohlOT2oQDqAJH00OXS3f2MGjkwZ6pr4emnnkHSQbg7UdGW0rvGpEnRKqBbDUfZ4K5YKSo9Gj216ZtaP3JLXg== -"@salesforce/ts-types@^1.5.20": - version "1.5.20" - resolved "https://registry.yarnpkg.com/@salesforce/ts-types/-/ts-types-1.5.20.tgz#f6875a710ceca48223b240026a14af6d3b39882f" - integrity sha512-Ov6um4CWd63EvkRavkHG0J/P9XYL55sdkDWPMr7+AIgqh5flHxDRz09/C4e9M94aX30rzJxW4TVX6EBf4Cu2BQ== - dependencies: - tslib "^2.2.0" - "@salesforce/ts-types@^1.5.21": version "1.5.21" resolved "https://registry.yarnpkg.com/@salesforce/ts-types/-/ts-types-1.5.21.tgz#e62784872f0e74bf4ae13381dc58aa4644ee2df3" @@ -1437,10 +1379,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.28.tgz#ddb82da2fff476a8e827e8773c84c19d9c235278" integrity sha512-CK2fnrQlIgKlCV3N2kM+Gznb5USlwA1KFX3rJVHmgVk6NJxFPuQ86pAcvKnu37IA4BGlSRz7sEE1lHL1aLZ/eQ== -"@types/node@^18.8.3": - version "18.8.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.8.3.tgz#ce750ab4017effa51aed6a7230651778d54e327c" - integrity sha512-0os9vz6BpGwxGe9LOhgP/ncvYN5Tx1fNcd2TM3rD/aCGBkysb+ZWpXEocG24h6ZzOi13+VB8HndAQFezsSOw1w== +"@types/node@^18.11.3": + version "18.11.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.3.tgz#78a6d7ec962b596fc2d2ec102c4dd3ef073fea6a" + integrity sha512-fNjDQzzOsZeKZu5NATgXUPsaFaTxeRgFXoosrHivTl8RGeV733OLawXsGfEk9a8/tySyZUyiZ6E8LcjPFZ2y1A== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -1457,7 +1399,7 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.0.tgz#ea03e9f0376a4446f44797ca19d9c46c36e352dc" integrity sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A== -"@types/semver@^7.3.9": +"@types/semver@^7.3.12", "@types/semver@^7.3.9": version "7.3.12" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.12.tgz#920447fdd78d76b19de0438b7f60df3c4a80bf1c" integrity sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A== @@ -1491,14 +1433,14 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.39.0": - version "5.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.39.0.tgz#778b2d9e7f293502c7feeea6c74dca8eb3e67511" - integrity sha512-xVfKOkBm5iWMNGKQ2fwX5GVgBuHmZBO1tCRwXmY5oAIsPscfwm2UADDuNB8ZVYCtpQvJK4xpjrK7jEhcJ0zY9A== +"@typescript-eslint/eslint-plugin@^5.40.1": + version "5.40.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.40.1.tgz#3203a6ff396b1194083faaa6e5110c401201d7d5" + integrity sha512-FsWboKkWdytGiXT5O1/R9j37YgcjO8MKHSUmWnIEjVaz0krHkplPnYi7mwdb+5+cs0toFNQb0HIrN7zONdIEWg== dependencies: - "@typescript-eslint/scope-manager" "5.39.0" - "@typescript-eslint/type-utils" "5.39.0" - "@typescript-eslint/utils" "5.39.0" + "@typescript-eslint/scope-manager" "5.40.1" + "@typescript-eslint/type-utils" "5.40.1" + "@typescript-eslint/utils" "5.40.1" debug "^4.3.4" ignore "^5.2.0" regexpp "^3.2.0" @@ -1515,14 +1457,14 @@ "@typescript-eslint/typescript-estree" "5.36.2" debug "^4.3.4" -"@typescript-eslint/parser@^5.39.0": - version "5.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.39.0.tgz#93fa0bc980a3a501e081824f6097f7ca30aaa22b" - integrity sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA== +"@typescript-eslint/parser@^5.40.1": + version "5.40.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.40.1.tgz#e7f8295dd8154d0d37d661ddd8e2f0ecfdee28dd" + integrity sha512-IK6x55va5w4YvXd4b3VrXQPldV9vQTxi5ov+g4pMANsXPTXOcfjx08CRR1Dfrcc51syPtXHF5bgLlMHYFrvQtg== dependencies: - "@typescript-eslint/scope-manager" "5.39.0" - "@typescript-eslint/types" "5.39.0" - "@typescript-eslint/typescript-estree" "5.39.0" + "@typescript-eslint/scope-manager" "5.40.1" + "@typescript-eslint/types" "5.40.1" + "@typescript-eslint/typescript-estree" "5.40.1" debug "^4.3.4" "@typescript-eslint/scope-manager@5.36.2": @@ -1533,21 +1475,21 @@ "@typescript-eslint/types" "5.36.2" "@typescript-eslint/visitor-keys" "5.36.2" -"@typescript-eslint/scope-manager@5.39.0": - version "5.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz#873e1465afa3d6c78d8ed2da68aed266a08008d0" - integrity sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw== +"@typescript-eslint/scope-manager@5.40.1": + version "5.40.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.40.1.tgz#a7a5197dfd234622a2421ea590ee0ccc02e18dfe" + integrity sha512-jkn4xsJiUQucI16OLCXrLRXDZ3afKhOIqXs4R3O+M00hdQLKR58WuyXPZZjhKLFCEP2g+TXdBRtLQ33UfAdRUg== dependencies: - "@typescript-eslint/types" "5.39.0" - "@typescript-eslint/visitor-keys" "5.39.0" + "@typescript-eslint/types" "5.40.1" + "@typescript-eslint/visitor-keys" "5.40.1" -"@typescript-eslint/type-utils@5.39.0": - version "5.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.39.0.tgz#0a8c00f95dce4335832ad2dc6bc431c14e32a0a6" - integrity sha512-KJHJkOothljQWzR3t/GunL0TPKY+fGJtnpl+pX+sJ0YiKTz3q2Zr87SGTmFqsCMFrLt5E0+o+S6eQY0FAXj9uA== +"@typescript-eslint/type-utils@5.40.1": + version "5.40.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.40.1.tgz#091e4ce3bebbdb68f4980bae9dee2e4e1725f601" + integrity sha512-DLAs+AHQOe6n5LRraXiv27IYPhleF0ldEmx6yBqBgBLaNRKTkffhV1RPsjoJBhVup2zHxfaRtan8/YRBgYhU9Q== dependencies: - "@typescript-eslint/typescript-estree" "5.39.0" - "@typescript-eslint/utils" "5.39.0" + "@typescript-eslint/typescript-estree" "5.40.1" + "@typescript-eslint/utils" "5.40.1" debug "^4.3.4" tsutils "^3.21.0" @@ -1556,10 +1498,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.36.2.tgz#a5066e500ebcfcee36694186ccc57b955c05faf9" integrity sha512-9OJSvvwuF1L5eS2EQgFUbECb99F0mwq501w0H0EkYULkhFa19Qq7WFbycdw1PexAc929asupbZcgjVIe6OK/XQ== -"@typescript-eslint/types@5.39.0": - version "5.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.39.0.tgz#f4e9f207ebb4579fd854b25c0bf64433bb5ed78d" - integrity sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw== +"@typescript-eslint/types@5.40.1": + version "5.40.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.40.1.tgz#de37f4f64de731ee454bb2085d71030aa832f749" + integrity sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw== "@typescript-eslint/typescript-estree@5.36.2": version "5.36.2" @@ -1574,30 +1516,32 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.39.0": - version "5.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz#c0316aa04a1a1f4f7f9498e3c13ef1d3dc4cf88b" - integrity sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA== +"@typescript-eslint/typescript-estree@5.40.1": + version "5.40.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.1.tgz#9a7d25492f02c69882ce5e0cd1857b0c55645d72" + integrity sha512-5QTP/nW5+60jBcEPfXy/EZL01qrl9GZtbgDZtDPlfW5zj/zjNrdI2B5zMUHmOsfvOr2cWqwVdWjobCiHcedmQA== dependencies: - "@typescript-eslint/types" "5.39.0" - "@typescript-eslint/visitor-keys" "5.39.0" + "@typescript-eslint/types" "5.40.1" + "@typescript-eslint/visitor-keys" "5.40.1" 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.39.0": - version "5.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.39.0.tgz#b7063cca1dcf08d1d21b0d91db491161ad0be110" - integrity sha512-+DnY5jkpOpgj+EBtYPyHRjXampJfC0yUZZzfzLuUWVZvCuKqSdJVC8UhdWipIw7VKNTfwfAPiOWzYkAwuIhiAg== +"@typescript-eslint/utils@5.40.1": + version "5.40.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.40.1.tgz#3204fb73a559d3b7bab7dc9d3c44487c2734a9ca" + integrity sha512-a2TAVScoX9fjryNrW6BZRnreDUszxqm9eQ9Esv8n5nXApMW0zeANUYlwh/DED04SC/ifuBvXgZpIK5xeJHQ3aw== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.39.0" - "@typescript-eslint/types" "5.39.0" - "@typescript-eslint/typescript-estree" "5.39.0" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.40.1" + "@typescript-eslint/types" "5.40.1" + "@typescript-eslint/typescript-estree" "5.40.1" eslint-scope "^5.1.1" eslint-utils "^3.0.0" + semver "^7.3.7" "@typescript-eslint/visitor-keys@5.36.2": version "5.36.2" @@ -1607,12 +1551,12 @@ "@typescript-eslint/types" "5.36.2" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@5.39.0": - version "5.39.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz#8f41f7d241b47257b081ddba5d3ce80deaae61e2" - integrity sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg== +"@typescript-eslint/visitor-keys@5.40.1": + version "5.40.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz#f3d2bf5af192f4432b84cec6fdcb387193518754" + integrity sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw== dependencies: - "@typescript-eslint/types" "5.39.0" + "@typescript-eslint/types" "5.40.1" eslint-visitor-keys "^3.3.0" JSONStream@^1.0.4: @@ -1888,15 +1832,15 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -babel-jest@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.1.2.tgz#540d3241925c55240fb0c742e3ffc5f33a501978" - integrity sha512-IuG+F3HTHryJb7gacC7SQ59A9kO56BctUsT67uJHp1mMCHUOMXpDwOHWGifWqdWVknN2WNkCVQELPjXx0aLJ9Q== +babel-jest@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.2.1.tgz#213c47e28072de11bdb98c9d29b89f2ab99664f1" + integrity sha512-gQJwArok0mqoREiCYhXKWOgUhElJj9DpnssW6GL8dG7ARYqHEhrM9fmPHTjdqEGRVXZAd6+imo3/Vwa8TjLcsw== dependencies: - "@jest/transform" "^29.1.2" + "@jest/transform" "^29.2.1" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.0.2" + babel-preset-jest "^29.2.0" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -1912,10 +1856,10 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^29.0.2: - version "29.0.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.0.2.tgz#ae61483a829a021b146c016c6ad39b8bcc37c2c8" - integrity sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg== +babel-plugin-jest-hoist@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.2.0.tgz#23ee99c37390a98cfddf3ef4a78674180d823094" + integrity sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -1940,12 +1884,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^29.0.2: - version "29.0.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.0.2.tgz#e14a7124e22b161551818d89e5bdcfb3b2b0eac7" - integrity sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA== +babel-preset-jest@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.2.0.tgz#3048bea3a1af222e3505e4a767a974c95a7620dc" + integrity sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA== dependencies: - babel-plugin-jest-hoist "^29.0.2" + babel-plugin-jest-hoist "^29.2.0" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -2932,10 +2876,10 @@ detect-newline@^3.0.0, detect-newline@^3.1.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^29.0.0: - version "29.0.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.0.0.tgz#bae49972ef3933556bcb0800b72e8579d19d9e4f" - integrity sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA== +diff-sequences@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.2.0.tgz#4c55b5b40706c7b5d2c5c75999a50c56d214e8f6" + integrity sha512-413SY5JpYeSBZxmenGEmCVQ8mCgtFJF0w9PROdaS6z987XC2Pd2GOKqOITLtMftmyFZqgtCOb/QA7/Z3ZXfzIw== diff@^4.0.1: version "4.0.2" @@ -3177,17 +3121,17 @@ eslint-plugin-import@^2.26.0: resolve "^1.22.0" tsconfig-paths "^3.14.1" -eslint-plugin-jsdoc@^39.3.6: - version "39.3.6" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.3.6.tgz#6ba29f32368d72a51335a3dc9ccd22ad0437665d" - integrity sha512-R6dZ4t83qPdMhIOGr7g2QII2pwCjYyKP+z0tPOfO1bbAbQyKC20Y2Rd6z1te86Lq3T7uM8bNo+VD9YFpE8HU/g== +eslint-plugin-jsdoc@^39.3.14: + version "39.3.14" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.3.14.tgz#2591bf48907a7527a6e689fd721634364d08fe4e" + integrity sha512-kle7ot5xvzXwWzg7ElzTPM/y1IWUo0kfa5X+ZwOC/7Jw81OJaqIaNEk+2ZH+HcKkbwRUQ3RTdK9qsm4p5vbXAQ== dependencies: - "@es-joy/jsdoccomment" "~0.31.0" + "@es-joy/jsdoccomment" "~0.33.0" comment-parser "1.3.1" debug "^4.3.4" escape-string-regexp "^4.0.0" esquery "^1.4.0" - semver "^7.3.7" + semver "^7.3.8" spdx-expression-parse "^3.0.1" eslint-plugin-prettier@^4.2.1: @@ -3230,14 +3174,13 @@ eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@^8.24.0: - version "8.24.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.24.0.tgz#489516c927a5da11b3979dbfb2679394523383c8" - integrity sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ== +eslint@^8.25.0: + version "8.25.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.25.0.tgz#00eb962f50962165d0c4ee3327708315eaa8058b" + integrity sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A== dependencies: - "@eslint/eslintrc" "^1.3.2" + "@eslint/eslintrc" "^1.3.3" "@humanwhocodes/config-array" "^0.10.5" - "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" "@humanwhocodes/module-importer" "^1.0.1" ajv "^6.10.0" chalk "^4.0.0" @@ -3416,16 +3359,16 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expect@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.1.2.tgz#82f8f28d7d408c7c68da3a386a490ee683e1eced" - integrity sha512-AuAGn1uxva5YBbBlXb+2JPxJRuemZsmlGcapPXWNSBNsQtAULfjioREGBWuI0EOvYUKjDnrCy8PW5Zlr1md5mw== +expect@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.2.1.tgz#25752d0df92d3daa5188dc8804de1f30759658cf" + integrity sha512-BJtA754Fba0YWRWHgjKUMTA3ltWarKgITXHQnbZ2mTxTXC4yMQlR0FI7HkB3fJYkhWBf4qjNiqvg3LDtXCcVRQ== dependencies: - "@jest/expect-utils" "^29.1.2" - jest-get-type "^29.0.0" - jest-matcher-utils "^29.1.2" - jest-message-util "^29.1.2" - jest-util "^29.1.2" + "@jest/expect-utils" "^29.2.1" + jest-get-type "^29.2.0" + jest-matcher-utils "^29.2.1" + jest-message-util "^29.2.1" + jest-util "^29.2.1" external-editor@^3.0.3: version "3.1.0" @@ -3441,20 +3384,6 @@ extract-stack@^2.0.0: resolved "https://registry.yarnpkg.com/extract-stack/-/extract-stack-2.0.0.tgz#11367bc865bfcd9bc0db3123e5edb57786f11f9b" integrity sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ== -fancy-test@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fancy-test/-/fancy-test-2.0.0.tgz#f1477ae4190820318816914aabe273c0a0dbd597" - integrity sha512-SFb2D/VX9SV+wNYXO1IIh1wyxUC1GS0mYCFJOWD1ia7MPj9yE2G8jaPkw4t/pg0Sj7/YJP56OzMY4nAuJSOugQ== - dependencies: - "@types/chai" "*" - "@types/lodash" "*" - "@types/node" "*" - "@types/sinon" "*" - lodash "^4.17.13" - mock-stdin "^1.0.0" - nock "^13.0.0" - stdout-stderr "^0.1.9" - fancy-test@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/fancy-test/-/fancy-test-2.0.4.tgz#b7650e13598e5ad2a27f0d89ad07813bfb09d53e" @@ -4605,283 +4534,283 @@ jake@^10.8.5: filelist "^1.0.1" minimatch "^3.0.4" -jest-changed-files@^29.0.0: - version "29.0.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.0.0.tgz#aa238eae42d9372a413dd9a8dadc91ca1806dce0" - integrity sha512-28/iDMDrUpGoCitTURuDqUzWQoWmOmOKOFST1mi2lwh62X4BFf6khgH3uSuo1e49X/UDjuApAj3w0wLOex4VPQ== +jest-changed-files@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.2.0.tgz#b6598daa9803ea6a4dce7968e20ab380ddbee289" + integrity sha512-qPVmLLyBmvF5HJrY7krDisx6Voi8DmlV3GZYX0aFNbaQsZeoz1hfxcCMbqDGuQCxU1dJy9eYc2xscE8QrCCYaA== dependencies: execa "^5.0.0" p-limit "^3.1.0" -jest-circus@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.1.2.tgz#4551068e432f169a53167fe1aef420cf51c8a735" - integrity sha512-ajQOdxY6mT9GtnfJRZBRYS7toNIJayiiyjDyoZcnvPRUPwJ58JX0ci0PKAKUo2C1RyzlHw0jabjLGKksO42JGA== +jest-circus@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.2.1.tgz#1385353d9bca6acf58f916068bbeffcfc95bef02" + integrity sha512-W+ZQQ5ln4Db2UZNM4NJIeasnhCdDhSuYW4eLgNAUi0XiSSpF634Kc5wiPvGiHvTgXMFVn1ZgWIijqhi9+kLNLg== dependencies: - "@jest/environment" "^29.1.2" - "@jest/expect" "^29.1.2" - "@jest/test-result" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/environment" "^29.2.1" + "@jest/expect" "^29.2.1" + "@jest/test-result" "^29.2.1" + "@jest/types" "^29.2.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" is-generator-fn "^2.0.0" - jest-each "^29.1.2" - jest-matcher-utils "^29.1.2" - jest-message-util "^29.1.2" - jest-runtime "^29.1.2" - jest-snapshot "^29.1.2" - jest-util "^29.1.2" + jest-each "^29.2.1" + jest-matcher-utils "^29.2.1" + jest-message-util "^29.2.1" + jest-runtime "^29.2.1" + jest-snapshot "^29.2.1" + jest-util "^29.2.1" p-limit "^3.1.0" - pretty-format "^29.1.2" + pretty-format "^29.2.1" slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.1.2.tgz#423b9c5d3ea20a50b1354b8bf3f2a20e72110e89" - integrity sha512-vsvBfQ7oS2o4MJdAH+4u9z76Vw5Q8WBQF5MchDbkylNknZdrPTX1Ix7YRJyTlOWqRaS7ue/cEAn+E4V1MWyMzw== +jest-cli@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.2.1.tgz#fbfa90b87b27a04e1041cc9d33ee80f32e2f2528" + integrity sha512-UIMD5aNqvPKpdlJSaeUAoLfxsh9TZvOkaMETx5qXnkboc317bcbb0eLHbIj8sFBHdcJAIAM+IRKnIU7Wi61MBw== dependencies: - "@jest/core" "^29.1.2" - "@jest/test-result" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/core" "^29.2.1" + "@jest/test-result" "^29.2.1" + "@jest/types" "^29.2.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^29.1.2" - jest-util "^29.1.2" - jest-validate "^29.1.2" + jest-config "^29.2.1" + jest-util "^29.2.1" + jest-validate "^29.2.1" prompts "^2.0.1" yargs "^17.3.1" -jest-config@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.1.2.tgz#7d004345ca4c09f5d8f802355f54494e90842f4d" - integrity sha512-EC3Zi86HJUOz+2YWQcJYQXlf0zuBhJoeyxLM6vb6qJsVmpP7KcCP1JnyF0iaqTaXdBP8Rlwsvs7hnKWQWWLwwA== +jest-config@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.2.1.tgz#2182af014d6c73978208626335db5134803dd183" + integrity sha512-EV5F1tQYW/quZV2br2o88hnYEeRzG53Dfi6rSG3TZBuzGQ6luhQBux/RLlU5QrJjCdq3LXxRRM8F1LP6DN1ycA== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.1.2" - "@jest/types" "^29.1.2" - babel-jest "^29.1.2" + "@jest/test-sequencer" "^29.2.1" + "@jest/types" "^29.2.1" + babel-jest "^29.2.1" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^29.1.2" - jest-environment-node "^29.1.2" - jest-get-type "^29.0.0" - jest-regex-util "^29.0.0" - jest-resolve "^29.1.2" - jest-runner "^29.1.2" - jest-util "^29.1.2" - jest-validate "^29.1.2" + jest-circus "^29.2.1" + jest-environment-node "^29.2.1" + jest-get-type "^29.2.0" + jest-regex-util "^29.2.0" + jest-resolve "^29.2.1" + jest-runner "^29.2.1" + jest-util "^29.2.1" + jest-validate "^29.2.1" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^29.1.2" + pretty-format "^29.2.1" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.1.2.tgz#bb7aaf5353227d6f4f96c5e7e8713ce576a607dc" - integrity sha512-4GQts0aUopVvecIT4IwD/7xsBaMhKTYoM4/njE/aVw9wpw+pIUVp8Vab/KnSzSilr84GnLBkaP3JLDnQYCKqVQ== +jest-diff@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.2.1.tgz#027e42f5a18b693fb2e88f81b0ccab533c08faee" + integrity sha512-gfh/SMNlQmP3MOUgdzxPOd4XETDJifADpT937fN1iUGz+9DgOu2eUPHH25JDkLVcLwwqxv3GzVyK4VBUr9fjfA== dependencies: chalk "^4.0.0" - diff-sequences "^29.0.0" - jest-get-type "^29.0.0" - pretty-format "^29.1.2" + diff-sequences "^29.2.0" + jest-get-type "^29.2.0" + pretty-format "^29.2.1" -jest-docblock@^29.0.0: - version "29.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.0.0.tgz#3151bcc45ed7f5a8af4884dcc049aee699b4ceae" - integrity sha512-s5Kpra/kLzbqu9dEjov30kj1n4tfu3e7Pl8v+f8jOkeWNqM6Ds8jRaJfZow3ducoQUrf2Z4rs2N5S3zXnb83gw== +jest-docblock@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.2.0.tgz#307203e20b637d97cee04809efc1d43afc641e82" + integrity sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A== dependencies: detect-newline "^3.0.0" -jest-each@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.1.2.tgz#d4c8532c07a846e79f194f7007ce7cb1987d1cd0" - integrity sha512-AmTQp9b2etNeEwMyr4jc0Ql/LIX/dhbgP21gHAizya2X6rUspHn2gysMXaj6iwWuOJ2sYRgP8c1P4cXswgvS1A== +jest-each@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.2.1.tgz#6b0a88ee85c2ba27b571a6010c2e0c674f5c9b29" + integrity sha512-sGP86H/CpWHMyK3qGIGFCgP6mt+o5tu9qG4+tobl0LNdgny0aitLXs9/EBacLy3Bwqy+v4uXClqJgASJWcruYw== dependencies: - "@jest/types" "^29.1.2" + "@jest/types" "^29.2.1" chalk "^4.0.0" - jest-get-type "^29.0.0" - jest-util "^29.1.2" - pretty-format "^29.1.2" - -jest-environment-node@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.1.2.tgz#005e05cc6ea4b9b5ba55906ab1ce53c82f6907a7" - integrity sha512-C59yVbdpY8682u6k/lh8SUMDJPbOyCHOTgLVVi1USWFxtNV+J8fyIwzkg+RJIVI30EKhKiAGNxYaFr3z6eyNhQ== - dependencies: - "@jest/environment" "^29.1.2" - "@jest/fake-timers" "^29.1.2" - "@jest/types" "^29.1.2" + jest-get-type "^29.2.0" + jest-util "^29.2.1" + pretty-format "^29.2.1" + +jest-environment-node@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.2.1.tgz#f90311d0f0e8ef720349f83c97a076e403f90665" + integrity sha512-PulFKwEMz6nTAdLUwglFKei3b/LixwlRiqTN6nvPE1JtrLtlnpd6LXnFI1NFHYJGlTmIWilMP2n9jEtPPKX50g== + dependencies: + "@jest/environment" "^29.2.1" + "@jest/fake-timers" "^29.2.1" + "@jest/types" "^29.2.1" "@types/node" "*" - jest-mock "^29.1.2" - jest-util "^29.1.2" + jest-mock "^29.2.1" + jest-util "^29.2.1" -jest-get-type@^29.0.0: - version "29.0.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.0.0.tgz#843f6c50a1b778f7325df1129a0fd7aa713aef80" - integrity sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw== +jest-get-type@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.2.0.tgz#726646f927ef61d583a3b3adb1ab13f3a5036408" + integrity sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA== -jest-haste-map@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.1.2.tgz#93f3634aa921b6b654e7c94137b24e02e7ca6ac9" - integrity sha512-xSjbY8/BF11Jh3hGSPfYTa/qBFrm3TPM7WU8pU93m2gqzORVLkHFWvuZmFsTEBPRKndfewXhMOuzJNHyJIZGsw== +jest-haste-map@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.2.1.tgz#f803fec57f8075e6c55fb5cd551f99a72471c699" + integrity sha512-wF460rAFmYc6ARcCFNw4MbGYQjYkvjovb9GBT+W10Um8q5nHq98jD6fHZMDMO3tA56S8XnmNkM8GcA8diSZfnA== dependencies: - "@jest/types" "^29.1.2" + "@jest/types" "^29.2.1" "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" - jest-regex-util "^29.0.0" - jest-util "^29.1.2" - jest-worker "^29.1.2" + jest-regex-util "^29.2.0" + jest-util "^29.2.1" + jest-worker "^29.2.1" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-leak-detector@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.1.2.tgz#4c846db14c58219430ccbc4f01a1ec52ebee4fc2" - integrity sha512-TG5gAZJpgmZtjb6oWxBLf2N6CfQ73iwCe6cofu/Uqv9iiAm6g502CAnGtxQaTfpHECBdVEMRBhomSXeLnoKjiQ== +jest-leak-detector@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.2.1.tgz#ec551686b7d512ec875616c2c3534298b1ffe2fc" + integrity sha512-1YvSqYoiurxKOJtySc+CGVmw/e1v4yNY27BjWTVzp0aTduQeA7pdieLiW05wTYG/twlKOp2xS/pWuikQEmklug== dependencies: - jest-get-type "^29.0.0" - pretty-format "^29.1.2" + jest-get-type "^29.2.0" + pretty-format "^29.2.1" -jest-matcher-utils@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.1.2.tgz#e68c4bcc0266e70aa1a5c13fb7b8cd4695e318a1" - integrity sha512-MV5XrD3qYSW2zZSHRRceFzqJ39B2z11Qv0KPyZYxnzDHFeYZGJlgGi0SW+IXSJfOewgJp/Km/7lpcFT+cgZypw== +jest-matcher-utils@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.2.1.tgz#2bf876c5f891b33786aadf5d65d5da5970744122" + integrity sha512-hUTBh7H/Mnb6GTpihbLh8uF5rjAMdekfW/oZNXUMAXi7bbmym2HiRpzgqf/zzkjgejMrVAkPdVSQj+32enlUww== dependencies: chalk "^4.0.0" - jest-diff "^29.1.2" - jest-get-type "^29.0.0" - pretty-format "^29.1.2" + jest-diff "^29.2.1" + jest-get-type "^29.2.0" + pretty-format "^29.2.1" -jest-message-util@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.1.2.tgz#c21a33c25f9dc1ebfcd0f921d89438847a09a501" - integrity sha512-9oJ2Os+Qh6IlxLpmvshVbGUiSkZVc2FK+uGOm6tghafnB2RyjKAxMZhtxThRMxfX1J1SOMhTn9oK3/MutRWQJQ== +jest-message-util@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.2.1.tgz#3a51357fbbe0cc34236f17a90d772746cf8d9193" + integrity sha512-Dx5nEjw9V8C1/Yj10S/8ivA8F439VS8vTq1L7hEgwHFn9ovSKNpYW/kwNh7UglaEgXO42XxzKJB+2x0nSglFVw== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.1.2" + "@jest/types" "^29.2.1" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.1.2" + pretty-format "^29.2.1" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.1.2.tgz#de47807edbb9d4abf8423f1d8d308d670105678c" - integrity sha512-PFDAdjjWbjPUtQPkQufvniXIS3N9Tv7tbibePEjIIprzjgo0qQlyUiVMrT4vL8FaSJo1QXifQUOuPH3HQC/aMA== +jest-mock@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.2.1.tgz#a0d361cffcb28184fa9c5443adbf591fa5759775" + integrity sha512-NDphaY/GqyQpTfnTZiTqqpMaw4Z0I7XnB7yBgrT6IwYrLGxpOhrejYr4ANY4YvO2sEGdd8Tx/6D0+WLQy7/qDA== dependencies: - "@jest/types" "^29.1.2" + "@jest/types" "^29.2.1" "@types/node" "*" - jest-util "^29.1.2" + jest-util "^29.2.1" jest-pnp-resolver@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^29.0.0: - version "29.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.0.0.tgz#b442987f688289df8eb6c16fa8df488b4cd007de" - integrity sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug== +jest-regex-util@^29.2.0: + version "29.2.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.2.0.tgz#82ef3b587e8c303357728d0322d48bbfd2971f7b" + integrity sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA== -jest-resolve-dependencies@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.1.2.tgz#a6919e58a0c7465582cb8ec2d745b4e64ae8647f" - integrity sha512-44yYi+yHqNmH3OoWZvPgmeeiwKxhKV/0CfrzaKLSkZG9gT973PX8i+m8j6pDrTYhhHoiKfF3YUFg/6AeuHw4HQ== +jest-resolve-dependencies@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.2.1.tgz#8d717dd41dc615fef1d412d395ea3deccfb1b9fa" + integrity sha512-o3mUGX2j08usj1jIAIE8KmUVpqVAn54k80kI27ldbZf2oJn6eghhB6DvJxjrcH40va9CQgWTfU5f2Ag/MoUqgQ== dependencies: - jest-regex-util "^29.0.0" - jest-snapshot "^29.1.2" + jest-regex-util "^29.2.0" + jest-snapshot "^29.2.1" -jest-resolve@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.1.2.tgz#9dd8c2fc83e59ee7d676b14bd45a5f89e877741d" - integrity sha512-7fcOr+k7UYSVRJYhSmJHIid3AnDBcLQX3VmT9OSbPWsWz1MfT7bcoerMhADKGvKCoMpOHUQaDHtQoNp/P9JMGg== +jest-resolve@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.2.1.tgz#a4d2f76db88aeb6ec5f5453c9a40b52483d17799" + integrity sha512-1dJTW76Z9622Viq4yRcwBuEXuzGtE9B2kdl05RC8Om/lAzac9uEgC+M8Q5osVidbuBPmxm8wSrcItYhca2ZAtQ== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^29.1.2" + jest-haste-map "^29.2.1" jest-pnp-resolver "^1.2.2" - jest-util "^29.1.2" - jest-validate "^29.1.2" + jest-util "^29.2.1" + jest-validate "^29.2.1" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.1.2.tgz#f18b2b86101341e047de8c2f51a5fdc4e97d053a" - integrity sha512-yy3LEWw8KuBCmg7sCGDIqKwJlULBuNIQa2eFSVgVASWdXbMYZ9H/X0tnXt70XFoGf92W2sOQDOIFAA6f2BG04Q== +jest-runner@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.2.1.tgz#885afe64661cb2f51f84c1b97afb713d1093c124" + integrity sha512-PojFI+uVhQ4u4YZKCN/a3yU0/l/pJJXhq1sW3JpCp8CyvGBYGddRFPKZ1WihApusxqWRTHjBJmGyPWv6Av2lWA== dependencies: - "@jest/console" "^29.1.2" - "@jest/environment" "^29.1.2" - "@jest/test-result" "^29.1.2" - "@jest/transform" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/console" "^29.2.1" + "@jest/environment" "^29.2.1" + "@jest/test-result" "^29.2.1" + "@jest/transform" "^29.2.1" + "@jest/types" "^29.2.1" "@types/node" "*" chalk "^4.0.0" emittery "^0.10.2" graceful-fs "^4.2.9" - jest-docblock "^29.0.0" - jest-environment-node "^29.1.2" - jest-haste-map "^29.1.2" - jest-leak-detector "^29.1.2" - jest-message-util "^29.1.2" - jest-resolve "^29.1.2" - jest-runtime "^29.1.2" - jest-util "^29.1.2" - jest-watcher "^29.1.2" - jest-worker "^29.1.2" + jest-docblock "^29.2.0" + jest-environment-node "^29.2.1" + jest-haste-map "^29.2.1" + jest-leak-detector "^29.2.1" + jest-message-util "^29.2.1" + jest-resolve "^29.2.1" + jest-runtime "^29.2.1" + jest-util "^29.2.1" + jest-watcher "^29.2.1" + jest-worker "^29.2.1" p-limit "^3.1.0" source-map-support "0.5.13" -jest-runtime@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.1.2.tgz#dbcd57103d61115479108d5864bdcd661d9c6783" - integrity sha512-jr8VJLIf+cYc+8hbrpt412n5jX3tiXmpPSYTGnwcvNemY+EOuLNiYnHJ3Kp25rkaAcTWOEI4ZdOIQcwYcXIAZw== - dependencies: - "@jest/environment" "^29.1.2" - "@jest/fake-timers" "^29.1.2" - "@jest/globals" "^29.1.2" - "@jest/source-map" "^29.0.0" - "@jest/test-result" "^29.1.2" - "@jest/transform" "^29.1.2" - "@jest/types" "^29.1.2" +jest-runtime@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.2.1.tgz#62e3a23c33710ae4d9c3304dda851a5fb225b574" + integrity sha512-PSQ880OoIW9y8E6/jjhGn3eQNgNc6ndMzCZaKqy357bv7FqCfSyYepu3yDC6Sp1Vkt+GhP2M/PVgldS2uZSFZg== + dependencies: + "@jest/environment" "^29.2.1" + "@jest/fake-timers" "^29.2.1" + "@jest/globals" "^29.2.1" + "@jest/source-map" "^29.2.0" + "@jest/test-result" "^29.2.1" + "@jest/transform" "^29.2.1" + "@jest/types" "^29.2.1" "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^29.1.2" - jest-message-util "^29.1.2" - jest-mock "^29.1.2" - jest-regex-util "^29.0.0" - jest-resolve "^29.1.2" - jest-snapshot "^29.1.2" - jest-util "^29.1.2" + jest-haste-map "^29.2.1" + jest-message-util "^29.2.1" + jest-mock "^29.2.1" + jest-regex-util "^29.2.0" + jest-resolve "^29.2.1" + jest-snapshot "^29.2.1" + jest-util "^29.2.1" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.1.2.tgz#7dd277e88c45f2d2ff5888de1612e63c7ceb575b" - integrity sha512-rYFomGpVMdBlfwTYxkUp3sjD6usptvZcONFYNqVlaz4EpHPnDvlWjvmOQ9OCSNKqYZqLM2aS3wq01tWujLg7gg== +jest-snapshot@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.2.1.tgz#f3843b3099c8fec7e6218dea18cc506f10ea5d30" + integrity sha512-KZdLD7iEz5M4ZYd+ezZ/kk73z+DtNbk/yJ4Qx7408Vb0CCuclJIZPa/HmIwSsCfIlOBNcYTKufr7x/Yv47oYlg== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" @@ -4889,82 +4818,82 @@ jest-snapshot@^29.1.2: "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.1.2" - "@jest/transform" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/expect-utils" "^29.2.1" + "@jest/transform" "^29.2.1" + "@jest/types" "^29.2.1" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^29.1.2" + expect "^29.2.1" graceful-fs "^4.2.9" - jest-diff "^29.1.2" - jest-get-type "^29.0.0" - jest-haste-map "^29.1.2" - jest-matcher-utils "^29.1.2" - jest-message-util "^29.1.2" - jest-util "^29.1.2" + jest-diff "^29.2.1" + jest-get-type "^29.2.0" + jest-haste-map "^29.2.1" + jest-matcher-utils "^29.2.1" + jest-message-util "^29.2.1" + jest-util "^29.2.1" natural-compare "^1.4.0" - pretty-format "^29.1.2" + pretty-format "^29.2.1" semver "^7.3.5" -jest-util@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.1.2.tgz#ac5798e93cb6a6703084e194cfa0898d66126df1" - integrity sha512-vPCk9F353i0Ymx3WQq3+a4lZ07NXu9Ca8wya6o4Fe4/aO1e1awMMprZ3woPFpKwghEOW+UXgd15vVotuNN9ONQ== +jest-util@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.2.1.tgz#f26872ba0dc8cbefaba32c34f98935f6cf5fc747" + integrity sha512-P5VWDj25r7kj7kl4pN2rG/RN2c1TLfYYYZYULnS/35nFDjBai+hBeo3MDrYZS7p6IoY3YHZnt2vq4L6mKnLk0g== dependencies: - "@jest/types" "^29.1.2" + "@jest/types" "^29.2.1" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.1.2.tgz#83a728b8f6354da2e52346878c8bc7383516ca51" - integrity sha512-k71pOslNlV8fVyI+mEySy2pq9KdXdgZtm7NHrBX8LghJayc3wWZH0Yr0mtYNGaCU4F1OLPXRkwZR0dBm/ClshA== +jest-validate@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.2.1.tgz#db814ce12c4c7e4746044922762e56eb177d066c" + integrity sha512-DZVX5msG6J6DL5vUUw+++6LEkXUsPwB5R7fsfM7BXdz2Ipr0Ib046ak+8egrwAR++pvSM/5laxLK977ieIGxkQ== dependencies: - "@jest/types" "^29.1.2" + "@jest/types" "^29.2.1" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^29.0.0" + jest-get-type "^29.2.0" leven "^3.1.0" - pretty-format "^29.1.2" + pretty-format "^29.2.1" -jest-watcher@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.1.2.tgz#de21439b7d889e2fcf62cc2a4779ef1a3f1f3c62" - integrity sha512-6JUIUKVdAvcxC6bM8/dMgqY2N4lbT+jZVsxh0hCJRbwkIEnbr/aPjMQ28fNDI5lB51Klh00MWZZeVf27KBUj5w== +jest-watcher@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.2.1.tgz#1cb91f8aa9e77b1332af139944ad65e51430d7c3" + integrity sha512-7jFaHUaRq50l4w/f6RuY713bvI5XskMmjWCE54NGYcY74fLkShS8LucXJke1QfGnwDSCoIqGnGGGKPwdaBYz2Q== dependencies: - "@jest/test-result" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/test-result" "^29.2.1" + "@jest/types" "^29.2.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.10.2" - jest-util "^29.1.2" + jest-util "^29.2.1" string-length "^4.0.1" -jest-worker@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.1.2.tgz#a68302af61bce82b42a9a57285ca7499d29b2afc" - integrity sha512-AdTZJxKjTSPHbXT/AIOjQVmoFx0LHFcVabWu0sxI7PAy7rFf8c0upyvgBKgguVXdM4vY74JdwkyD4hSmpTW8jA== +jest-worker@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.2.1.tgz#8ba68255438252e1674f990f0180c54dfa26a3b1" + integrity sha512-ROHTZ+oj7sBrgtv46zZ84uWky71AoYi0vEV9CdEtc1FQunsoAGe5HbQmW76nI5QWdvECVPrSi1MCVUmizSavMg== dependencies: "@types/node" "*" - jest-util "^29.1.2" + jest-util "^29.2.1" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.1.2.tgz#f821a1695ffd6cd0efc3b59d2dfcc70a98582499" - integrity sha512-5wEIPpCezgORnqf+rCaYD1SK+mNN7NsstWzIsuvsnrhR/hSxXWd82oI7DkrbJ+XTD28/eG8SmxdGvukrGGK6Tw== +jest@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.2.1.tgz#352ec0b81a0e436691d546d984cd7d8f72ffd26a" + integrity sha512-K0N+7rx+fv3Us3KhuwRSJt55MMpZPs9Q3WSO/spRZSnsalX8yEYOTQ1PiSN7OvqzoRX4JEUXCbOJRlP4n8m5LA== dependencies: - "@jest/core" "^29.1.2" - "@jest/types" "^29.1.2" + "@jest/core" "^29.2.1" + "@jest/types" "^29.2.1" import-local "^3.0.2" - jest-cli "^29.1.2" + jest-cli "^29.2.1" js-sdsl@^4.1.4: version "4.1.5" @@ -5016,10 +4945,10 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -jsforce@beta: - version "2.0.0-beta.18" - resolved "https://registry.yarnpkg.com/jsforce/-/jsforce-2.0.0-beta.18.tgz#2791a2e6ec15d4d8b41f0782e23b833f5dbe5678" - integrity sha512-9IKv3M/U/FCdL6G8WlFqWiBTvLx1TRmGW+JhcSWHZb0YlMLHiGNVymvLyPsvRfO9sNP6VR3A5AIntqD+UsDKkQ== +jsforce@^2.0.0-beta.19: + version "2.0.0-beta.19" + resolved "https://registry.yarnpkg.com/jsforce/-/jsforce-2.0.0-beta.19.tgz#4a136b88d6a9f6668714c4ccbb0acd55e46ea493" + integrity sha512-WdF6hs7kukXNGvp/VRhu2DngldgiBBorsc2WA5us08oJGbEIPwn/itqYJWKJ+rfPXepz5JbkWQd48XHGjqmPpw== dependencies: "@babel/runtime" "^7.12.5" "@babel/runtime-corejs3" "^7.12.5" @@ -6281,10 +6210,10 @@ pretty-format@^23.0.1: ansi-regex "^3.0.0" ansi-styles "^3.2.0" -pretty-format@^29.1.2: - version "29.1.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.1.2.tgz#b1f6b75be7d699be1a051f5da36e8ae9e76a8e6a" - integrity sha512-CGJ6VVGXVRP2o2Dorl4mAwwvDWT25luIsYhkyVQW32E4nL+TgW939J7LlKT/npq5Cpq6j3s+sy+13yk7xYpBmg== +pretty-format@^29.2.1: + version "29.2.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.2.1.tgz#86e7748fe8bbc96a6a4e04fa99172630907a9611" + integrity sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA== dependencies: "@jest/schemas" "^29.0.0" ansi-styles "^5.0.0" @@ -6734,6 +6663,13 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.3.8: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + sentence-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" @@ -7181,7 +7117,7 @@ supports-color@^8.0.0, supports-color@^8.1.0, supports-color@^8.1.1: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.1.0, supports-hyperlinks@^2.2.0: +supports-hyperlinks@^2.1.0, supports-hyperlinks@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== @@ -7215,14 +7151,6 @@ tar-stream@^2.1.4, tar-stream@^2.2.0: inherits "^2.0.3" readable-stream "^3.1.1" -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -7355,10 +7283,10 @@ ts-node@^10.8.1, ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -ts-retry-promise@^0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/ts-retry-promise/-/ts-retry-promise-0.6.2.tgz#6925149cd5da40c536f704269232ab3966271d06" - integrity sha512-QFnm3RuFivgkQGKm8XX7F7sAMQEI7pzVkfSlcWMYH+MoIRy7BI3sE8135YPapP8Fra5KgAuOq2QFT969N14cAw== +ts-retry-promise@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/ts-retry-promise/-/ts-retry-promise-0.7.0.tgz#08f2dcbbf5d2981495841cb63389a268324e8147" + integrity sha512-x6yWZXC4BfXy4UyMweOFvbS1yJ/Y5biSz/mEPiILtJZLrqD3ZxIpzVOGGgifHHdaSe3WxzFRtsRbychI6zofOg== tsconfig-paths@^3.14.1: version "3.14.1"