diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 00000000..5a182ef1 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +yarn lint-staged diff --git a/.prettierignore b/.prettierignore index 50b89dc2..729a8d21 100644 --- a/.prettierignore +++ b/.prettierignore @@ -3,14 +3,15 @@ *.styl *.svg .*ignore +.husky/ .DS_Store .nojekyll .nvmrc -docs/.vuepress/dist +docs/.vuepress/dist/ /change/ /CHANGELOG.* /lib/ LICENSE -node_modules +node_modules/ SECURITY.md yarn.lock \ No newline at end of file diff --git a/change/beachball-ba6f3e9b-61fb-49ad-a371-b74b8f4ab642.json b/change/beachball-ba6f3e9b-61fb-49ad-a371-b74b8f4ab642.json new file mode 100644 index 00000000..fde236a5 --- /dev/null +++ b/change/beachball-ba6f3e9b-61fb-49ad-a371-b74b8f4ab642.json @@ -0,0 +1,7 @@ +{ + "type": "none", + "comment": "Update formatting", + "packageName": "beachball", + "email": "elcraig@microsoft.com", + "dependentChangeType": "none" +} diff --git a/package.json b/package.json index 9f86e3fa..43209293 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "docs": "vuepress dev docs --host localhost", "docs:build": "vuepress build docs", "format": "prettier --write '**/*'", + "prepare": "husky install", "pub": "node ./lib/cli.js publish", "release": "node ./lib/cli.js publish -y", "release:docs": "yarn docs:build && yarn gh-pages -d docs/.vuepress/dist --dotfiles", @@ -40,17 +41,22 @@ "test:watch": "jest --watch", "update-snapshots": "yarn test:unit -u && yarn test:func -u && yarn test:e2e -u" }, + "lint-staged": { + "*": [ + "prettier --write" + ] + }, "dependencies": { "cosmiconfig": "^8.3.6", "execa": "^5.0.0", "fs-extra": "^11.1.1", "lodash": "^4.17.15", "minimatch": "^3.0.4", + "p-graph": "^1.1.2", "p-limit": "^3.0.2", "prompts": "^2.4.2", "semver": "^7.0.0", "toposort": "^2.0.2", - "p-graph": "^1.1.2", "workspace-tools": "^0.38.0", "yargs-parser": "^21.0.0" }, @@ -67,8 +73,10 @@ "@types/yargs-parser": "^21.0.0", "find-free-port": "^2.0.0", "gh-pages": "^5.0.0", + "husky": "^8.0.0", "jest": "^29.0.0", "jest-mock": "^29.0.0", + "lint-staged": "^12.0.0", "normalized-tmpdir": "^1.0.1", "prettier": "~2.8.4", "strip-ansi": "^6.0.1", diff --git a/src/__e2e__/publishE2E.test.ts b/src/__e2e__/publishE2E.test.ts index 9a03d3c6..bc08a411 100644 --- a/src/__e2e__/publishE2E.test.ts +++ b/src/__e2e__/publishE2E.test.ts @@ -22,14 +22,14 @@ import os from 'os'; jest.mock('../packageManager/npm'); describe('publish command (e2e)', () => { - const concurrencyValues = [[1],[os.cpus().length]]; + const concurrencyValues = [[1], [os.cpus().length]]; const npmMock = initNpmMock(); let repositoryFactory: RepositoryFactory | undefined; let repo: Repository | undefined; // show error logs for these tests - initMockLogs({ alsoLog: ['error'] }); + const logs = initMockLogs({ alsoLog: ['error'] }); function getOptions(overrides?: Partial): BeachballOptions { return { @@ -101,94 +101,100 @@ describe('publish command (e2e)', () => { }); }); - it.each(concurrencyValues)('can perform a successful npm publish from a race condition, concurrency: %s', async (concurrency: number) => { - repositoryFactory = new RepositoryFactory('single'); - repo = repositoryFactory.cloneRepository(); + it.each(concurrencyValues)( + 'can perform a successful npm publish from a race condition, concurrency: %s', + async (concurrency: number) => { + repositoryFactory = new RepositoryFactory('single'); + repo = repositoryFactory.cloneRepository(); - const options = getOptions({ concurrency: concurrency }); + const options = getOptions({ concurrency: concurrency }); - generateChangeFiles(['foo'], options); - repo.push(); + generateChangeFiles(['foo'], options); + repo.push(); - // Adds a step that injects a race condition - let fetchCount = 0; + // Adds a step that injects a race condition + let fetchCount = 0; - addGitObserver((args, output) => { - if (args[0] === 'fetch') { - if (fetchCount === 0) { - const anotherRepo = repositoryFactory!.cloneRepository(); - // inject a checkin - anotherRepo.updateJsonFile('package.json', { version: '1.0.2' }); - anotherRepo.push(); + addGitObserver((args, output) => { + if (args[0] === 'fetch') { + if (fetchCount === 0) { + const anotherRepo = repositoryFactory!.cloneRepository(); + // inject a checkin + anotherRepo.updateJsonFile('package.json', { version: '1.0.2' }); + anotherRepo.push(); + } + + fetchCount++; } + }); - fetchCount++; - } - }); + await publish(options); - await publish(options); + expect(await npmShow('foo')).toMatchObject({ + name: 'foo', + versions: ['1.1.0'], + 'dist-tags': { latest: '1.1.0' }, + }); - expect(await npmShow('foo')).toMatchObject({ - name: 'foo', - versions: ['1.1.0'], - 'dist-tags': { latest: '1.1.0' }, - }); + repo.checkout(defaultBranchName); + repo.pull(); + expect(repo.getCurrentTags()).toEqual(['foo_v1.1.0']); - repo.checkout(defaultBranchName); - repo.pull(); - expect(repo.getCurrentTags()).toEqual(['foo_v1.1.0']); + // this indicates 2 tries + expect(fetchCount).toBe(2); + } + ); - // this indicates 2 tries - expect(fetchCount).toBe(2); - }); + it.each(concurrencyValues)( + 'can perform a successful npm publish from a race condition in the dependencies, concurrency: %s', + async (concurrency: number) => { + repositoryFactory = new RepositoryFactory('single'); + repo = repositoryFactory.cloneRepository(); - it.each(concurrencyValues)('can perform a successful npm publish from a race condition in the dependencies, concurrency: %s', async (concurrency: number) => { - repositoryFactory = new RepositoryFactory('single'); - repo = repositoryFactory.cloneRepository(); + const options = getOptions({ concurrency: concurrency }); - const options = getOptions({ concurrency: concurrency }); + generateChangeFiles(['foo'], options); + repo.push(); - generateChangeFiles(['foo'], options); - repo.push(); + // Adds a step that injects a race condition + let fetchCount = 0; - // Adds a step that injects a race condition - let fetchCount = 0; + addGitObserver((args, output) => { + if (args[0] === 'fetch') { + if (fetchCount === 0) { + const anotherRepo = repositoryFactory!.cloneRepository(); + // inject a checkin + const packageJsonFile = anotherRepo.pathTo('package.json'); + const contents = fs.readJSONSync(packageJsonFile, 'utf-8'); + delete contents.dependencies.baz; + anotherRepo.commitChange('package.json', JSON.stringify(contents, null, 2)); + anotherRepo.push(); + } - addGitObserver((args, output) => { - if (args[0] === 'fetch') { - if (fetchCount === 0) { - const anotherRepo = repositoryFactory!.cloneRepository(); - // inject a checkin - const packageJsonFile = anotherRepo.pathTo('package.json'); - const contents = fs.readJSONSync(packageJsonFile, 'utf-8'); - delete contents.dependencies.baz; - anotherRepo.commitChange('package.json', JSON.stringify(contents, null, 2)); - anotherRepo.push(); + fetchCount++; } + }); - fetchCount++; - } - }); + await publish(options); - await publish(options); + expect(await npmShow('foo')).toMatchObject({ + name: 'foo', + versions: ['1.1.0'], + 'dist-tags': { latest: '1.1.0' }, + }); - expect(await npmShow('foo')).toMatchObject({ - name: 'foo', - versions: ['1.1.0'], - 'dist-tags': { latest: '1.1.0' }, - }); + repo.checkout(defaultBranchName); + repo.pull(); + expect(repo.getCurrentTags()).toEqual(['foo_v1.1.0']); - repo.checkout(defaultBranchName); - repo.pull(); - expect(repo.getCurrentTags()).toEqual(['foo_v1.1.0']); + // this indicates 2 tries + expect(fetchCount).toBe(2); - // this indicates 2 tries - expect(fetchCount).toBe(2); - - const packageJsonFile = repo.pathTo('package.json'); - const contents = JSON.parse(fs.readFileSync(packageJsonFile, 'utf-8')); - expect(contents.dependencies.baz).toBeUndefined(); - }); + const packageJsonFile = repo.pathTo('package.json'); + const contents = JSON.parse(fs.readFileSync(packageJsonFile, 'utf-8')); + expect(contents.dependencies.baz).toBeUndefined(); + } + ); it('can perform a successful npm publish without bump', async () => { repositoryFactory = new RepositoryFactory('single'); @@ -302,35 +308,38 @@ describe('publish command (e2e)', () => { expect(repo.getCurrentTags()).toEqual(['bar_v1.3.4', 'foo_v1.1.0']); }); - it.each(concurrencyValues)('should not perform npm publish on out-of-scope package, concurrency: %s', async (concurrency: number) => { - repositoryFactory = new RepositoryFactory('monorepo'); - repo = repositoryFactory.cloneRepository(); + it.each(concurrencyValues)( + 'should not perform npm publish on out-of-scope package, concurrency: %s', + async (concurrency: number) => { + repositoryFactory = new RepositoryFactory('monorepo'); + repo = repositoryFactory.cloneRepository(); - const options = getOptions({ - scope: ['!packages/foo'], - concurrency: concurrency, - }); + const options = getOptions({ + scope: ['!packages/foo'], + concurrency: concurrency, + }); - generateChangeFiles(['foo'], options); - generateChangeFiles(['bar'], options); - repo.push(); + generateChangeFiles(['foo'], options); + generateChangeFiles(['bar'], options); + repo.push(); - await publish(options); + await publish(options); - await npmShow('foo', { shouldFail: true }); + await npmShow('foo', { shouldFail: true }); - expect(repo.getCurrentTags()).toEqual([]); + expect(repo.getCurrentTags()).toEqual([]); - expect(await npmShow('bar')).toMatchObject({ - name: 'bar', - versions: ['1.4.0'], - 'dist-tags': { latest: '1.4.0' }, - }); + expect(await npmShow('bar')).toMatchObject({ + name: 'bar', + versions: ['1.4.0'], + 'dist-tags': { latest: '1.4.0' }, + }); - repo.checkout(defaultBranchName); - repo.pull(); - expect(repo.getCurrentTags()).toEqual(['bar_v1.4.0']); - }); + repo.checkout(defaultBranchName); + repo.pull(); + expect(repo.getCurrentTags()).toEqual(['bar_v1.4.0']); + } + ); it('should respect prepublish hooks', async () => { repositoryFactory = new RepositoryFactory('monorepo'); @@ -435,7 +444,7 @@ describe('publish command (e2e)', () => { const options = getOptions({ depth: 10, - }); + }); generateChangeFiles(['foo'], options); @@ -542,6 +551,7 @@ describe('publish command (e2e)', () => { }); it('handles errors correctly when one of the packages fails during concurrent publishing', async () => { + logs.setOverrideOptions({ alsoLog: [] }); const packageNames = ['pkg1', 'pkg2', 'pkg3', 'pkg4', 'pkg5', 'pkg6', 'pkg7', 'pkg8']; const packages: { [packageName: string]: PackageJsonFixture } = {}; const packageToFail = 'pkg4'; @@ -571,12 +581,14 @@ describe('publish command (e2e)', () => { stdout: '', success: false, all: 'Failed to publish package', - } + }; } return _mockNpmPublish(registryData, args, opts); }); - await expect(publish(options)).rejects.toThrow('Error publishing! Refer to the previous logs for recovery instructions.'); + await expect(publish(options)).rejects.toThrow( + 'Error publishing! Refer to the previous logs for recovery instructions.' + ); for (const name of packageNames) { if (['pkg7', 'pkg8', packageToFail].includes(name)) { @@ -621,7 +633,7 @@ describe('publish command (e2e)', () => { let maxConcurrency = 0; const options = getOptions({ hooks: { - postpublish: async (packagePath) => { + postpublish: async packagePath => { currentConcurrency++; await simulateWait(100); const packageName = path.basename(packagePath); diff --git a/src/__fixtures__/mockNpm.test.ts b/src/__fixtures__/mockNpm.test.ts index 9ae23a88..b03de4cc 100644 --- a/src/__fixtures__/mockNpm.test.ts +++ b/src/__fixtures__/mockNpm.test.ts @@ -163,7 +163,9 @@ describe('_mockNpmShow', () => { // support for this could be added later it('currently throws if requested version is a range', async () => { - await expect(() => _mockNpmShow(data, ['foo@^1.0.0'], { cwd: undefined })).rejects.toThrow(/not currently supported/); + await expect(() => _mockNpmShow(data, ['foo@^1.0.0'], { cwd: undefined })).rejects.toThrow( + /not currently supported/ + ); }); }); @@ -199,7 +201,9 @@ describe('_mockNpmPublish', () => { }); it('throws if cwd is not specified', async () => { - await expect(() => _mockNpmPublish({}, [], { cwd: undefined })).rejects.toThrow('cwd is required for mock npm publish'); + await expect(() => _mockNpmPublish({}, [], { cwd: undefined })).rejects.toThrow( + 'cwd is required for mock npm publish' + ); }); it('errors if reading package.json fails', async () => { diff --git a/src/__fixtures__/mockNpm.ts b/src/__fixtures__/mockNpm.ts index 984a1dbb..f428841d 100644 --- a/src/__fixtures__/mockNpm.ts +++ b/src/__fixtures__/mockNpm.ts @@ -88,7 +88,7 @@ export function initNpmMock(): NpmMock { if (!func) { throw new Error(`Command not supported by mock npm: ${command}`); } - return await func(registryData, args, opts) as NpmResult; + return (await func(registryData, args, opts)) as NpmResult; }); }); @@ -187,7 +187,11 @@ export const _mockNpmShow: MockNpmCommand = async (registryData, args) => { }; /** (exported for testing) Mock npm publish to the registry data */ -export const _mockNpmPublish: MockNpmCommand = async (registryData, args: string[], opts: Parameters[1]) => { +export const _mockNpmPublish: MockNpmCommand = async ( + registryData, + args: string[], + opts: Parameters[1] +) => { if (!opts?.cwd) { throw new Error('cwd is required for mock npm publish'); } diff --git a/src/__functional__/changelog/prepareChangelogPaths.test.ts b/src/__functional__/changelog/prepareChangelogPaths.test.ts index 28783618..bc72f6f1 100644 --- a/src/__functional__/changelog/prepareChangelogPaths.test.ts +++ b/src/__functional__/changelog/prepareChangelogPaths.test.ts @@ -187,8 +187,8 @@ describe('prepareChangelogPaths', () => { [file1]: 'md 1', [file2]: 'md 2', }); - // ensure different timestamps by waiting 1ms - await new Promise(resolve => setTimeout(resolve, 1)); + // ensure different timestamps by waiting 5ms + await new Promise(resolve => setTimeout(resolve, 5)); fs.writeFileSync(path.join(tempDir, `CHANGELOG-${lastHash}.md`), 'last md'); const paths = prepareChangelogPathsWrapper({ diff --git a/src/__tests__/monorepo/getPackageGraph.test.ts b/src/__tests__/monorepo/getPackageGraph.test.ts index 2d854b83..c8b1b37a 100644 --- a/src/__tests__/monorepo/getPackageGraph.test.ts +++ b/src/__tests__/monorepo/getPackageGraph.test.ts @@ -8,7 +8,11 @@ describe('getPackageGraph', () => { /** * @returns all package names in the package graph */ - async function getPackageGraphPackageNames(affectedPackages: Iterable, packageInfos: PackageInfos, runHook?: (packageInfo: PackageInfo) => Promise): Promise { + async function getPackageGraphPackageNames( + affectedPackages: Iterable, + packageInfos: PackageInfos, + runHook?: (packageInfo: PackageInfo) => Promise + ): Promise { const visitedPackages: string[] = []; const packageGraph = getPackageGraph(affectedPackages, packageInfos, async (packageInfo: PackageInfo) => { visitedPackages.push(packageInfo.name); @@ -27,8 +31,12 @@ describe('getPackageGraph', () => { /** * Ensure that both `toposortPackages` and `getPackageGraph` are running the same logic for sorting packages. */ - async function validateToposortPackagesAndPackageGraph(inputPackages: string[], packageInfos: PackageInfos, possibleSolutions: string[][]): Promise { - const toposortPackagesOutput = (toposortPackages(inputPackages, packageInfos)) + async function validateToposortPackagesAndPackageGraph( + inputPackages: string[], + packageInfos: PackageInfos, + possibleSolutions: string[][] + ): Promise { + const toposortPackagesOutput = toposortPackages(inputPackages, packageInfos); const getPackageGraphPackageNamesOutput = await getPackageGraphPackageNames(inputPackages, packageInfos); expect(possibleSolutions).toContainEqual(toposortPackagesOutput); @@ -53,9 +61,7 @@ describe('getPackageGraph', () => { foo2: {}, }); - await validateToposortPackagesAndPackageGraph(['foo', 'foo2', 'foo3'], packageInfos, [ - ['foo2', 'foo3', 'foo'] - ]); + await validateToposortPackagesAndPackageGraph(['foo', 'foo2', 'foo3'], packageInfos, [['foo2', 'foo3', 'foo']]); }); it('sort packages with different kinds of dependencies', async () => { @@ -81,7 +87,7 @@ describe('getPackageGraph', () => { }); await validateToposortPackagesAndPackageGraph(['foo', 'foo2', 'foo3', 'foo4'], packageInfos, [ - ['foo2', 'foo3', 'foo4', 'foo'] + ['foo2', 'foo3', 'foo4', 'foo'], ]); }); @@ -92,9 +98,7 @@ describe('getPackageGraph', () => { foo3: { dependencies: { foo2: '1.0.0' } }, }); - await validateToposortPackagesAndPackageGraph(['foo', 'foo3'], packageInfos, [ - ['foo3', 'foo'] - ]); + await validateToposortPackagesAndPackageGraph(['foo', 'foo3'], packageInfos, [['foo3', 'foo']]); }); it('do not sort packages if it is not included harder scenario', async () => { @@ -102,24 +106,24 @@ describe('getPackageGraph', () => { foo: { dependencies: { foo3: '1.0.0', bar: '1.0.0' } }, foo2: { dependencies: { foo4: '1.0.0' } }, foo3: { dependencies: { foo2: '1.0.0' } }, - foo4: { dependencies: {}}, + foo4: { dependencies: {} }, bar: { dependencies: { foo: '1.0.0' } }, }); - await validateToposortPackagesAndPackageGraph(['foo', 'foo3'], packageInfos, [ - ['foo3', 'foo'] - ]); + await validateToposortPackagesAndPackageGraph(['foo', 'foo3'], packageInfos, [['foo3', 'foo']]); }); it('throws if contains circular dependencies inside affected packages', async () => { const packageInfos = makePackageInfos({ - foo: { dependencies: { bar: '1.0.0', } }, + foo: { dependencies: { bar: '1.0.0' } }, bar: { dependencies: { foo: '1.0.0' } }, }); await expect(async () => { await getPackageGraphPackageNames(['foo', 'bar'], packageInfos); - }).rejects.toThrow(/We could not find a node in the graph with no dependencies, this likely means there is a cycle including all nodes/); + }).rejects.toThrow( + /We could not find a node in the graph with no dependencies, this likely means there is a cycle including all nodes/ + ); }); it('throws if contains circular dependencies', async () => { @@ -130,25 +134,27 @@ describe('getPackageGraph', () => { await expect(async () => { await getPackageGraphPackageNames(['foo', 'bar'], packageInfos); - }).rejects.toThrow(/We could not find a node in the graph with no dependencies, this likely means there is a cycle including all nodes/); + }).rejects.toThrow( + /We could not find a node in the graph with no dependencies, this likely means there is a cycle including all nodes/ + ); }); it(`doesn't throws if graph contains circular dependencies outside affected packages`, async () => { const packageInfos = makePackageInfos({ - foo: { dependencies: { } }, - bar: { dependencies: { } }, + foo: { dependencies: {} }, + bar: { dependencies: {} }, bar2: { dependencies: { bar3: '1.0.0' } }, bar3: { dependencies: { bar2: '1.0.0', bar: '1.0.0' } }, }); - await getPackageGraphPackageNames(['foo', 'bar'], packageInfos) + await getPackageGraphPackageNames(['foo', 'bar'], packageInfos); }); it('throws if package info is missing', async () => { const packageInfos = {} as any as PackageInfos; await expect(async () => { - await getPackageGraphPackageNames(['foo', 'bar'], packageInfos) + await getPackageGraphPackageNames(['foo', 'bar'], packageInfos); }).rejects.toThrow(`Package info is missing for foo.`); }); }); diff --git a/src/bump/callHook.ts b/src/bump/callHook.ts index f1fed96c..1231db1f 100644 --- a/src/bump/callHook.ts +++ b/src/bump/callHook.ts @@ -30,7 +30,7 @@ export async function callHook( await packageGraph.run({ concurrency: concurrency, - continue: false - }) + continue: false, + }); } } diff --git a/src/monorepo/getPackageGraph.ts b/src/monorepo/getPackageGraph.ts index 90630d4b..68ed3db5 100644 --- a/src/monorepo/getPackageGraph.ts +++ b/src/monorepo/getPackageGraph.ts @@ -14,11 +14,14 @@ export function getPackageGraph( }); } - const dependencyGraph: [string | undefined, string][] = getPackageDependencyGraph(Array.from(affectedPackages), packageInfos); + const dependencyGraph: [string | undefined, string][] = getPackageDependencyGraph( + Array.from(affectedPackages), + packageInfos + ); const filteredDependencyGraph = filterDependencyGraph(dependencyGraph); return pGraph(nodeMap, filteredDependencyGraph); } function filterDependencyGraph(dependencyGraph: [string | undefined, string][]): [string, string][] { return dependencyGraph.filter(([dep, _]) => dep !== undefined) as [string, string][]; -} \ No newline at end of file +} diff --git a/src/publish/publishToRegistry.ts b/src/publish/publishToRegistry.ts index 649abca3..5b89c228 100644 --- a/src/publish/publishToRegistry.ts +++ b/src/publish/publishToRegistry.ts @@ -69,7 +69,7 @@ export async function publishToRegistry(originalBumpInfo: PublishBumpInfo, optio concurrency: options.concurrency, // This option is set to true to ensure that all tasks that are started are awaited, // this doesn't actually start tasks for packages of which dependencies have failed. - continue: true + continue: true, }); } } catch (error) { diff --git a/yarn.lock b/yarn.lock index 26e5671c..b77fb6cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2228,6 +2228,14 @@ agentkeepalive@^2.2.0: resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-2.2.0.tgz#c5d1bd4b129008f1163f236f86e5faea2026e2ef" integrity sha512-TnB6ziK363p7lR8QpeLC8aMr8EGYBKZTpgzQLfqTs3bR0Oo5VbKdwKf8h0dSzsYrB7lSCgfJnMZKqShvlq5Oyg== +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -2286,7 +2294,7 @@ ansi-colors@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== -ansi-escapes@^4.1.0, ansi-escapes@^4.2.1: +ansi-escapes@^4.1.0, ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -2313,6 +2321,11 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -2332,6 +2345,11 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +ansi-styles@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -2491,6 +2509,11 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + async-each@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.6.tgz#52f1d9403818c179b7561e11a5d1b77eb2160e77" @@ -3268,11 +3291,39 @@ clean-css@4.2.x: dependencies: source-map "~0.6.0" +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + cli-boxes@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -3365,6 +3416,11 @@ color@^3.0.0: color-convert "^1.9.3" color-string "^1.6.0" +colorette@^2.0.16: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -3392,6 +3448,11 @@ commander@7: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +commander@^9.3.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + commander@~2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" @@ -4466,7 +4527,7 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4: version "4.3.7" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== @@ -4823,6 +4884,11 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -4888,6 +4954,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -5301,7 +5372,7 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^5.0.0: +execa@^5.0.0, execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -6359,6 +6430,11 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +husky@^8.0.0: + version "8.0.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" + integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== + iconv-lite@0.4, iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -6471,6 +6547,11 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" @@ -6718,6 +6799,11 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" @@ -7711,6 +7797,11 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lilconfig@2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" + integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -7723,6 +7814,40 @@ linkify-it@^2.0.0: dependencies: uc.micro "^1.0.1" +lint-staged@^12.0.0: + version "12.5.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-12.5.0.tgz#d6925747480ae0e380d13988522f9dd8ef9126e3" + integrity sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g== + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.16" + commander "^9.3.0" + debug "^4.3.4" + execa "^5.1.1" + lilconfig "2.0.5" + listr2 "^4.0.5" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-inspect "^1.12.2" + pidtree "^0.5.0" + string-argv "^0.3.1" + supports-color "^9.2.2" + yaml "^1.10.2" + +listr2@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-4.0.5.tgz#9dcc50221583e8b4c71c43f9c7dfd0ef546b75d5" + integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.5" + through "^2.3.8" + wrap-ansi "^7.0.0" + load-script@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" @@ -7873,6 +7998,16 @@ lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17. resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + loglevel@^1.6.8: version "1.9.2" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.2.tgz#c2e028d6c757720107df4e64508530db6621ba08" @@ -8134,7 +8269,7 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -8565,7 +8700,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.13.1: +object-inspect@^1.12.2, object-inspect@^1.13.1: version "1.13.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== @@ -8653,7 +8788,7 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.2: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -8745,6 +8880,13 @@ p-map@^2.0.0: resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + p-retry@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" @@ -8947,6 +9089,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pidtree@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.5.0.tgz#ad5fbc1de78b8a5f99d6fbdd4f6e4eee21d1aca1" + integrity sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -9906,6 +10053,14 @@ responselike@^1.0.2: dependencies: lowercase-keys "^1.0.0" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -9921,6 +10076,11 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfdc@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + rgb-regex@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" @@ -9977,6 +10137,13 @@ rw@1: resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== +rxjs@^7.5.5: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + safe-array-concat@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" @@ -10289,6 +10456,32 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + smoothscroll-polyfill@^0.4.3: version "0.4.4" resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.4.tgz#3a259131dc6930e6ca80003e1cb03b603b69abf8" @@ -10543,6 +10736,11 @@ strict-uri-encode@^1.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== +string-argv@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== + string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" @@ -10569,6 +10767,15 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2 is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string.prototype.trim@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" @@ -10625,6 +10832,13 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + strip-bom-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" @@ -10727,6 +10941,11 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" +supports-color@^9.2.2: + version "9.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" + integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -10817,7 +11036,7 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -"through@>=2.2.7 <3", through@~2.3.4: +"through@>=2.2.7 <3", through@^2.3.8, through@~2.3.4: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== @@ -10975,6 +11194,11 @@ ts-jest@^29.0.0: semver "^7.6.3" yargs-parser "^21.1.1" +tslib@^2.1.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tsscmp@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" @@ -11872,6 +12096,15 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -11961,6 +12194,11 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"