From 3a2705d7687cb3be4b4f12c62b0222555cd7942d Mon Sep 17 00:00:00 2001 From: filmaj Date: Sat, 27 Jun 2026 14:10:13 -0400 Subject: [PATCH 1/7] test(chore): playing around with config caching --- packages/@sanity/cli/package.json | 1 + .../commands/datasets/__tests__/copy.test.ts | 54 +- .../@sanity/cli/test/mockSanityCommand.ts | 118 +- pnpm-lock.yaml | 2053 ++++++++++++++++- pnpm-workspace.yaml | 1 + 5 files changed, 2127 insertions(+), 100 deletions(-) diff --git a/packages/@sanity/cli/package.json b/packages/@sanity/cli/package.json index adfa0fc9ee..82d68a6ac0 100644 --- a/packages/@sanity/cli/package.json +++ b/packages/@sanity/cli/package.json @@ -146,6 +146,7 @@ }, "devDependencies": { "@eslint/compat": "catalog:", + "@heroku-cli/test-utils": "catalog:", "@repo/package.config": "workspace:*", "@repo/tsconfig": "workspace:*", "@sanity/cli-test": "workspace:*", diff --git a/packages/@sanity/cli/src/commands/datasets/__tests__/copy.test.ts b/packages/@sanity/cli/src/commands/datasets/__tests__/copy.test.ts index 9a5fe6752c..7a652e6317 100644 --- a/packages/@sanity/cli/src/commands/datasets/__tests__/copy.test.ts +++ b/packages/@sanity/cli/src/commands/datasets/__tests__/copy.test.ts @@ -3,17 +3,6 @@ import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest' import {createMockSanityCommand} from '../../../../test/mockSanityCommand.js' -// First: create the mocks and mocked SanityCommand class -const {MockedSanityCommand, mocks} = createMockSanityCommand() -// Second: install the mock on cli-core -vi.mock('@sanity/cli-core', async (importOriginal) => { - const actual = await importOriginal() - return { - ...actual, - SanityCommand: MockedSanityCommand, - } -}) - // Third: mock dataset copy command imports const mockPromptForDataset = vi.hoisted(() => vi.fn()) const mockPromptForDatasetName = vi.hoisted(() => vi.fn()) @@ -76,9 +65,6 @@ vi.mock('@sanity/cli-core/ux', async () => { } }) -// Finally, import the module under test: dataset copy command -const {CopyDatasetCommand} = await import('../copy.js') - const TEST_PROJECT_ID = '1337newb' function createMockDataset(name: string) { return { @@ -93,6 +79,12 @@ function createMockDataset(name: string) { } } +const {createCmdInstance, mocks} = await createMockSanityCommand( + import.meta.dirname, + '../copy.js', + 'CopyDatasetCommand', +) + describe('#dataset:copy', () => { beforeEach(() => { mocks.SanityCmdGetProjectId.mockResolvedValue(TEST_PROJECT_ID) @@ -109,7 +101,7 @@ describe('#dataset:copy', () => { {desc: '--list with --detach', flags: ['--list', '--detach']}, {desc: '--attach with --detach', flags: ['--attach', 'job-123', '--detach']}, ])('errors when using mutually exclusive flags: $desc', async ({flags}) => { - await expect(CopyDatasetCommand.run(flags)).rejects.toThrow( + await expect(createCmdInstance(flags).run()).rejects.toThrow( expect.objectContaining({ message: expect.stringContaining('cannot also be provided when using'), }), @@ -120,7 +112,7 @@ describe('#dataset:copy', () => { {flag: '--offset', value: '2'}, {flag: '--limit', value: '10'}, ])('errors when $flag is used without --list', async ({flag, value}) => { - await expect(CopyDatasetCommand.run([flag, value])).rejects.toThrow( + await expect(createCmdInstance([flag, value]).run()).rejects.toThrow( expect.objectContaining({ message: expect.stringMatching(/all of the following must be provided.*--list/i), }), @@ -155,7 +147,7 @@ describe('#dataset:copy', () => { }, ]) - await CopyDatasetCommand.run(['--list', '--offset', '2', '--limit', '10']) + await createCmdInstance(['--list', '--offset', '2', '--limit', '10']).run() expect(mockListDatasetCopyJobs).toHaveBeenCalledWith({ limit: 10, @@ -172,7 +164,7 @@ describe('#dataset:copy', () => { test('shows message when no copy jobs exist', async () => { mockListDatasetCopyJobs.mockResolvedValue([]) - await CopyDatasetCommand.run(['--list']) + await createCmdInstance(['--list']).run() expect(mocks.SanityCmdOutputLog).toHaveBeenCalledWith( expect.stringMatching(/doesn't have any dataset copy jobs/i), ) @@ -180,7 +172,7 @@ describe('#dataset:copy', () => { test('errors and exits if list copy job API throws', async () => { mockListDatasetCopyJobs.mockRejectedValue('boom') - await CopyDatasetCommand.run(['--list']) + await createCmdInstance(['--list']).run() expect(mocks.SanityCmdOutputError).toHaveBeenCalledWith( expect.stringMatching(/failed to list dataset copy jobs.*boom/i), {exit: 1}, @@ -190,7 +182,7 @@ describe('#dataset:copy', () => { describe('attach mode', () => { test('rejects whitespace-only jobId', async () => { - await CopyDatasetCommand.run(['--attach', ' ']) + await createCmdInstance(['--attach', ' ']).run() expect(mocks.SanityCmdOutputError).toHaveBeenCalledWith( expect.stringMatching(/supply a valid jobId/i), @@ -207,7 +199,7 @@ describe('#dataset:copy', () => { ), ) - await CopyDatasetCommand.run(['--attach', 'job-123']) + await createCmdInstance(['--attach', 'job-123']).run() expect(mockFollowCopyJob).toHaveBeenCalledWith({ jobId: 'job-123', @@ -220,7 +212,7 @@ describe('#dataset:copy', () => { test('errors out if progress tracking throws', async () => { mockFollowCopyJob.mockThrow(new Error('boom')) - await CopyDatasetCommand.run(['--attach', 'job-123']) + await createCmdInstance(['--attach', 'job-123']).run() expect(mocks.SanityCmdOutputError).toHaveBeenCalledWith( expect.stringMatching(/failed to attach to copy.*boom/i), @@ -238,7 +230,7 @@ describe('#dataset:copy', () => { ), ) - await CopyDatasetCommand.run(['--attach', 'job-123']) + await createCmdInstance(['--attach', 'job-123']).run() expect(mockFollowCopyJob).toHaveBeenCalledWith({ jobId: 'job-123', @@ -261,7 +253,7 @@ describe('#dataset:copy', () => { mockCopyDataset.mockResolvedValue({jobId: 'job-456'}) mockFollowCopyJob.mockReturnValue(of({progress: 100, type: 'progress'})) - await CopyDatasetCommand.run(['production', 'backup']) + await createCmdInstance(['production', 'backup']).run() expect(mockCopyDataset).toHaveBeenCalledWith( expect.objectContaining({ @@ -293,7 +285,7 @@ describe('#dataset:copy', () => { mockPromptForDataset.mockResolvedValue('production') mockPromptForDatasetName.mockResolvedValue('backup') - await CopyDatasetCommand.run([]) + await createCmdInstance([]).run() expect(mockPromptForDataset).toHaveBeenCalledOnce() expect(mockPromptForDatasetName).toHaveBeenCalledWith({ @@ -348,7 +340,7 @@ describe('#dataset:copy', () => { ])('errors when $description', async ({args, expectedError, setupMocks}) => { setupMocks() - await CopyDatasetCommand.run(args) + await createCmdInstance(args).run() expect(mocks.SanityCmdOutputError).toHaveBeenCalledWith( expect.stringMatching(new RegExp(expectedError)), @@ -364,12 +356,12 @@ describe('#dataset:copy', () => { mockCopyDataset.mockResolvedValue({jobId: 'job-skip'}) mockFollowCopyJob.mockReturnValue(of({progress: 100, type: 'progress'})) - await CopyDatasetCommand.run([ + await createCmdInstance([ 'production', 'backup', '--skip-history', '--skip-content-releases', - ]) + ]).run() expect(mockCopyDataset).toHaveBeenCalledWith( expect.objectContaining({ @@ -392,7 +384,7 @@ describe('#dataset:copy', () => { ]) mockCopyDataset.mockResolvedValue({jobId: 'job-detach'}) - await CopyDatasetCommand.run(['production', 'backup', '--detach']) + await createCmdInstance(['production', 'backup', '--detach']).run() expect(mocks.SanityCmdOutputLog).toHaveBeenCalledWith( expect.stringMatching(/job job-detach started/i), @@ -410,7 +402,7 @@ describe('#dataset:copy', () => { ]) mockCopyDataset.mockRejectedValue(new Error('boom')) - await CopyDatasetCommand.run(['production', 'backup']) + await createCmdInstance(['production', 'backup']).run() expect(mocks.SanityCmdOutputError).toHaveBeenCalledWith( expect.stringMatching(/dataset copying failed: boom/i), @@ -421,7 +413,7 @@ describe('#dataset:copy', () => { test('handles list datasets error', async () => { mockListDatasets.mockRejectedValue(new Error('boom')) - await CopyDatasetCommand.run(['production', 'backup']) + await createCmdInstance(['production', 'backup']).run() expect(mocks.SanityCmdOutputError).toHaveBeenCalledWith( expect.stringMatching(/failed to fetch datasets: boom/i), diff --git a/packages/@sanity/cli/test/mockSanityCommand.ts b/packages/@sanity/cli/test/mockSanityCommand.ts index 701a670e31..9915cac662 100644 --- a/packages/@sanity/cli/test/mockSanityCommand.ts +++ b/packages/@sanity/cli/test/mockSanityCommand.ts @@ -1,8 +1,20 @@ -import {Command} from '@oclif/core' +import {join} from 'node:path' + +import {getConfig} from '@heroku-cli/test-utils' +import {Command, type Interfaces} from '@oclif/core' import {type Output, type SanityCommandInterface} from '@sanity/cli-core' import {vi} from 'vitest' -export function createMockSanityCommand() { +interface CommandInstance { + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ + run(): Promise +} + +export async function createMockSanityCommand( + dirname: string, + cmdImportPath: string, + cmdExport: string, +) { const mocks = { // Mock OCLIF Command methods OclifCmdExit: vi.fn((_code?: number) => undefined as never), @@ -16,53 +28,65 @@ export function createMockSanityCommand() { SanityCmdOutputWarn: vi.fn(), SanityCmdResolveIsInteractive: vi.fn(), } + class MockedSanityCommand extends Command implements SanityCommandInterface { + args = {} + flags = {} + output: Output = { + error: mocks.SanityCmdOutputError, + log: mocks.SanityCmdOutputLog, + warn: mocks.SanityCmdOutputWarn, + } + public exit(code?: number) { + return mocks.OclifCmdExit(code) + } + public async getCliConfig() { + return mocks.SanityCmdGetCliConfig() + } + public async getProjectId(opts?: Record) { + return mocks.SanityCmdGetProjectId(opts) + } + public async getProjectRoot() { + return mocks.SanityCmdGetProjectRoot() + } + // Same implementation as SanityCommand's, minus telemetry + public async init(): Promise { + const {args, flags} = await this.parse({ + args: this.ctor.args, + baseFlags: super.ctor.baseFlags, + enableJsonFlag: this.ctor.enableJsonFlag, + flags: this.ctor.flags, + strict: this.ctor.strict, + }) - return { - MockedSanityCommand: class MockedSanityCommand - extends Command - implements SanityCommandInterface - { - args = {} - flags = {} - output: Output = { - error: mocks.SanityCmdOutputError, - log: mocks.SanityCmdOutputLog, - warn: mocks.SanityCmdOutputWarn, - } - public exit(code?: number) { - return mocks.OclifCmdExit(code) - } - public async getCliConfig() { - return mocks.SanityCmdGetCliConfig() - } - public async getProjectId(opts?: Record) { - return mocks.SanityCmdGetProjectId(opts) - } - public async getProjectRoot() { - return mocks.SanityCmdGetProjectRoot() - } - // Same implementation as SanityCommand's, minus telemetry - public async init(): Promise { - const {args, flags} = await this.parse({ - args: this.ctor.args, - baseFlags: super.ctor.baseFlags, - enableJsonFlag: this.ctor.enableJsonFlag, - flags: this.ctor.flags, - strict: this.ctor.strict, - }) + this.args = args + this.flags = flags - this.args = args - this.flags = flags - - await super.init() - } - public isUnattended() { - return mocks.SanityCmdIsUnattended() - } - public resolveIsInteractive() { - return mocks.SanityCmdResolveIsInteractive() - } - public async run() {} + await super.init() + } + public isUnattended() { + return mocks.SanityCmdIsUnattended() + } + public resolveIsInteractive() { + return mocks.SanityCmdResolveIsInteractive() + } + public async run() {} + } + vi.doMock('@sanity/cli-core', async (importOriginal) => { + const actual = await importOriginal() + return { + ...actual, + SanityCommand: MockedSanityCommand, + } + }) + const oclifConfig = await getConfig() + // eslint-disable-next-line no-restricted-syntax + const cmdModule = await import(join(dirname, cmdImportPath)) + const CommandClass = cmdModule[cmdExport] + // Cast to constructor type to handle protected constructors + const Ctor = CommandClass as {new (argv: string[], config: Interfaces.Config): CommandInstance} + return { + createCmdInstance: (args: string[]) => { + return new Ctor(args, oclifConfig) }, mocks, } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 436d63f7a0..7842dba9ae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,6 +9,9 @@ catalogs: '@eslint/compat': specifier: ^2.1.0 version: 2.1.0 + '@heroku-cli/test-utils': + specifier: ^1.0.0 + version: 1.0.0 '@oclif/core': specifier: ^4.11.7 version: 4.11.7 @@ -203,7 +206,7 @@ importers: version: 5.9.3 vitest: specifier: 'catalog:' - version: 4.1.9(@types/node@26.0.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@26.0.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@26.0.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@26.0.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) fixtures/basic-app: dependencies: @@ -344,7 +347,7 @@ importers: dependencies: next: specifier: ^16.2.6 - version: 16.2.9(@babel/core@7.29.7)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) + version: 16.2.9(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react: specifier: ^19.2.5 version: 19.2.7 @@ -466,7 +469,7 @@ importers: version: 10.5.0(jiti@2.7.0) vitest: specifier: 'catalog:' - version: 4.1.9(@types/node@22.20.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/@repo/package.config: devDependencies: @@ -714,6 +717,9 @@ importers: '@eslint/compat': specifier: 'catalog:' version: 2.1.0(eslint@10.5.0(jiti@2.7.0)) + '@heroku-cli/test-utils': + specifier: 'catalog:' + version: 1.0.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@types/node@22.20.0)(eslint-config-oclif@6.0.173(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0))(nock@14.0.15) '@repo/package.config': specifier: workspace:* version: link:../../@repo/package.config @@ -815,7 +821,7 @@ importers: version: 5.9.3 vitest: specifier: 'catalog:' - version: 4.1.9(@types/node@22.20.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/@sanity/cli-build: dependencies: @@ -963,7 +969,7 @@ importers: version: 5.9.3 vitest: specifier: 'catalog:' - version: 4.1.9(@types/node@22.20.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/@sanity/cli-core: dependencies: @@ -1075,7 +1081,7 @@ importers: version: 5.9.3 vitest: specifier: 'catalog:' - version: 4.1.9(@types/node@22.20.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/@sanity/cli-e2e: devDependencies: @@ -1123,7 +1129,7 @@ importers: version: 5.9.3 vitest: specifier: 'catalog:' - version: 4.1.9(@types/node@22.20.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/@sanity/cli-test: dependencies: @@ -1193,7 +1199,7 @@ importers: version: 5.9.3 vitest: specifier: 'catalog:' - version: 4.1.9(@types/node@22.20.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) yaml: specifier: 'catalog:' version: 2.9.0 @@ -1208,10 +1214,10 @@ importers: version: 10.1.8(eslint@10.5.0(jiti@2.7.0)) eslint-import-resolver-typescript: specifier: ^4.4.5 - version: 4.4.5(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0)) + version: 4.4.5(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@10.5.0(jiti@2.7.0)))(eslint-plugin-import@2.32.0)(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-import-x: specifier: ^4.16.2 - version: 4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0)) + version: 4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@10.5.0(jiti@2.7.0)) eslint-plugin-n: specifier: ^17.24.0 version: 17.24.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3) @@ -1294,7 +1300,7 @@ importers: version: 5.9.3 vitest: specifier: 'catalog:' - version: 4.1.9(@types/node@22.20.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/create-sanity: dependencies: @@ -1307,7 +1313,7 @@ importers: version: 0.3.21 vitest: specifier: 'catalog:' - version: 4.1.9(@types/node@26.0.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@26.0.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@26.0.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@26.0.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages: @@ -1335,6 +1341,17 @@ packages: '@algorithm.ts/lcs@4.0.6': resolution: {integrity: sha512-uu6TgA77++klfI1kM3q9LotWsTrzOzsnot8CmICzdNSG7GWxKvVb+IMMUVILrTbUKoLVfv2Js33PqfXnvkusag==} + '@apm-js-collab/code-transformer-bundler-plugins@0.5.0': + resolution: {integrity: sha512-YxLBY5nGlurL7QeJLq6e5g0ouBpAp0pwgyA/5rHXEXwhiPLn9ZHbT+Y2LlP90GT872cSocfjWRYu/fnpuBudNQ==} + engines: {node: '>=18.0.0'} + + '@apm-js-collab/code-transformer@0.15.0': + resolution: {integrity: sha512-XmXYVs8CzJ1Aj79noVbn2weUO/XWtRyURpGqx7aU7DOXlUQhR0WKOQNF0okh7PCeY37vxf7kU3v57OAkEPm3ww==} + hasBin: true + + '@apm-js-collab/tracing-hooks@0.10.0': + resolution: {integrity: sha512-2/Z3NTewJTruUkmsSnBC5bJlLNUd9keuD1OLlTEpim4FyLhm6m2Rnfv+wrFdUvFfhmH8CRdiDZBqBrn+wyaGuA==} + '@architect/asap@7.0.10': resolution: {integrity: sha512-oJjYDranGTCkp21bziF/fIxJfLTucitqg/ar5mmLPHyroNG3XF3SUIMvuNd1GNIe4oy40wvGEXvTToKYvUeOLA==} engines: {node: '>=16'} @@ -2442,6 +2459,10 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + '@es-joy/jsdoccomment@0.50.2': + resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==} + engines: {node: '>=18'} + '@esbuild/aix-ppc64@0.28.1': resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} engines: {node: '>=18'} @@ -2608,6 +2629,15 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint/compat@1.4.1': + resolution: {integrity: sha512-cfO82V9zxxGBxcQDr1lfaYB7wykTa0b00mGa36FrJl7iTFd0Z2cHfEYuxcBRP/iNijCsWsEkA+jzT8hGYmv33w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.40 || 9 + peerDependenciesMeta: + eslint: + optional: true + '@eslint/compat@2.1.0': resolution: {integrity: sha512-LgaSCymEpw7tF53xvDw9SNsraPb1IBHxpdABIOM0hW8UAlP8znrjYtuxfR58FSJ3L9BhwD+FaPRFQpZq84Nh6g==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -2625,10 +2655,34 @@ packages: resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@eslint/core@0.14.0': + resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.15.2': + resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@1.2.1': resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@eslint/css-tree@3.6.9': + resolution: {integrity: sha512-3D5/OHibNEGk+wKwNwMbz63NMf367EoR4mVNNpxddCHKEb2Nez7z62J2U6YjtErSsZDoY0CsccmoUpdEbkogNA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + '@eslint/css@0.10.0': + resolution: {integrity: sha512-pHoYRWS08oeU0qVez1pZCcbqHzoJnM5VMtrxH2nWDJ0ukq9DkwWV1BTY+PWK+eWBbndN9W0O9WjJTyAHsDoPOg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.5': + resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@10.0.1': resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -2638,10 +2692,22 @@ packages: eslint: optional: true + '@eslint/js@9.39.4': + resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/json@0.13.2': + resolution: {integrity: sha512-yWLyRE18rHgHXhWigRpiyv1LDPkvWtC6oa7QHXW7YdP6gosJoq7BiLZW2yCs9U7zN7X4U3ZeOJjepA10XAOIMw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/object-schema@3.0.5': resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@eslint/plugin-kit@0.3.5': + resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/plugin-kit@0.7.2': resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -2670,6 +2736,30 @@ packages: '@floating-ui/utils@0.2.11': resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + '@heroku-cli/command@12.4.2': + resolution: {integrity: sha512-xUluoJlpTMDjWbtwJXHyyk/XOS6FvWJzeQv0wV2dtlgZ8QBUvdkUWHsQjoql7glOQV5zuyqKwtL7vPMXVkbx7g==} + engines: {node: '>= 20'} + + '@heroku-cli/test-utils@1.0.0': + resolution: {integrity: sha512-cXcX6GYq1mw1Ewb4BLC6afu2ja/WlobrzDJ1+GkROJhl8USR16zr6pwER9N8DZfdwvqDCONtTIeqjC57/w9yUw==} + engines: {node: '>=20'} + peerDependencies: + '@vitest/eslint-plugin': '>=1.6' + eslint: ^9 + eslint-config-oclif: ^6 + nock: '>=14' + peerDependenciesMeta: + '@vitest/eslint-plugin': + optional: true + + '@heroku/http-call@5.5.3': + resolution: {integrity: sha512-2YFK1z/kz0sK5k4XWu1DAh9jW+Tbct2//UB7bcMioDavy19KxmX6rP2flI9DNtVoeRmSS6p1LMSoOBFkzAY/bQ==} + engines: {node: '>=16.0.0'} + + '@heroku/js-blanket@1.0.1': + resolution: {integrity: sha512-e0QQK+6m/Mm4kbNE94JTP4MOBjorDYQgwz9RERQWMo7q4UKRQHiBqBlUdzl2k6mkc7nU/b4dECnHP712Nxw4OQ==} + engines: {node: '>=20.0.0'} + '@hookform/resolvers@4.1.3': resolution: {integrity: sha512-Jsv6UOWYTrEFJ/01ZrnwVXs7KDvP8XIo115i++5PWvNkNvkrsTfGiLS6w+eJ57CYtUtDQalUWovCZDHFJ8u1VQ==} peerDependencies: @@ -2691,6 +2781,10 @@ packages: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} + '@humanwhocodes/momoa@3.3.10': + resolution: {integrity: sha512-KWiFQpSAqEIyrTXko3hFNLeQvSK8zXlJQzhhxsyVn58WFRYXST99b3Nqnu+ttOtjds2Pl2grUHGpe2NzhPynuQ==} + engines: {node: '>=18'} + '@humanwhocodes/retry@0.4.3': resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} @@ -3505,6 +3599,10 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + '@oclif/core@4.11.7': resolution: {integrity: sha512-LHii7kSaLvv5bpbS09I7BlI1AQa3Kak/QDyyZOik79ET8tQyt1U5O38al+sYkMxi139105w5gS+aWe+5BlJ0yQ==} engines: {node: '>=18.0.0'} @@ -3572,6 +3670,42 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + '@opentelemetry/api-logs@0.214.0': + resolution: {integrity: sha512-40lSJeqYO8Uz2Yj7u94/SJWE/wONa7rmMKjI1ZcIjgf3MHNHv1OZUCrCETGuaRF62d5pQD1wKIW+L4lmSMTzZA==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/api@1.9.1': + resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/core@2.8.0': + resolution: {integrity: sha512-hd1Lfh8p545nNz+jq1Ejfz+Mn1hyLuxYn1YzTfFNrxr8urEWMNQLPf1Th8kjOH+HxwawCrtgBp8JpBUR4ZSgww==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/instrumentation@0.214.0': + resolution: {integrity: sha512-MHqEX5Dk59cqVah5LiARMACku7jXSVk9iVDWOea4x3cr7VfdByeDCURK6o1lntT1JS/Tsovw01UJrBhN3/uC5w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/resources@2.8.0': + resolution: {integrity: sha512-qmXQ27ilDbUK/vGMqwL8D4/rhn76C+sherM4wTbjlfknR8Nvfc/hCxjRJPhkzZzUsPiNg16SA31NxMabwttRjg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@2.8.0': + resolution: {integrity: sha512-mhU4jp+vW0mGbFRd+GeXHvmfA4aDqWjBjLC3pE5XMpLs0IE2ryYb019Ts2AQrOq67gaTF25D91+fgvEHDZEnuQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.41.1': + resolution: {integrity: sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==} + engines: {node: '>=14'} + '@optimize-lodash/rollup-plugin@6.0.0': resolution: {integrity: sha512-zTNVDRHGcezQCT2UVK7CSqJi7YKyM1YTJPvCkbE3NecHCsI/mdlizXGqcXgoshzyemsfscY7Tf8MmGnor2HAFg==} engines: {node: '>= 18'} @@ -4400,6 +4534,9 @@ packages: cpu: [x64] os: [win32] + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@rushstack/node-core-library@5.23.1': resolution: {integrity: sha512-wlKmIKIYCKuCASbITvOxLZXepPbwXvrv7S6ig6XNWFchSyhL/E2txmVXspHY49Wu2dzf7nI27a2k/yV5BA3EiA==} peerDependencies: @@ -4751,16 +4888,61 @@ packages: resolution: {integrity: sha512-xHuPIEKhx9zw5quWvv4YgZprnwoVMCfxIhmOIf6KJ9iizyUHeUDcKpLS59xERroqwX4RpvK+l/27AZu4zfZlzQ==} engines: {node: '>=14.18'} + '@sentry/conventions@0.12.0': + resolution: {integrity: sha512-z1JQrl/1SLY+8wpzvork6vl+fpsg/oCCxM7HWWhUnI/R+OGNyoIzieQuggX3uUMY7NBtp8UWCQx6FeFazzOF9g==} + engines: {node: '>=14'} + + '@sentry/core@10.60.0': + resolution: {integrity: sha512-szN7ccOJAEaLb1BBQzCQhABGMTJmKNUk0G2sc7rWhajeXoZoMKIbNkI9RvJrFuV69cbad/d/BKGBjbpJhySAzw==} + engines: {node: '>=18'} + '@sentry/core@8.55.2': resolution: {integrity: sha512-YlEBwybUcOQ/KjMHDmof1vwweVnBtBxYlQp7DE3fOdtW4pqqdHWTnTntQs4VgYfxzjJYgtkd9LHlGtg8qy+JVQ==} engines: {node: '>=14.18'} + '@sentry/node-core@10.60.0': + resolution: {integrity: sha512-aXi9ixvP+hgUZPPZCRwMNHgY2I0gkSeoAKAUuysDJhWDmrygwfGdlkbGmmtW6PQjtMYFx69Igt5btvhjEBoJTw==} + engines: {node: '>=18'} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/core': ^1.30.1 || ^2.1.0 + '@opentelemetry/exporter-trace-otlp-http': '>=0.57.0 <1' + '@opentelemetry/instrumentation': '>=0.57.1 <1' + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@opentelemetry/core': + optional: true + '@opentelemetry/exporter-trace-otlp-http': + optional: true + '@opentelemetry/instrumentation': + optional: true + '@opentelemetry/sdk-trace-base': + optional: true + + '@sentry/node@10.60.0': + resolution: {integrity: sha512-u//paUrkKaCr0oNn7r7UulGydkYMSkU1wQOIpG/P/jf7psZWnyXhgeszHzUfZXo6pCdxXG9z9viPvzGjqPQN7A==} + engines: {node: '>=18'} + + '@sentry/opentelemetry@10.60.0': + resolution: {integrity: sha512-gl+2NVH+9RmTu7pd9kV1tKif+Th+p9tmnXR1l3Sb3Wqo1ir5FaNMKrloWEKMXjnepii9EJUrEHdSC+i8NoexxQ==} + engines: {node: '>=18'} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/core': ^1.30.1 || ^2.1.0 + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 + '@sentry/react@8.55.2': resolution: {integrity: sha512-1TPfKZYkJal2Dyt2W0tf1roOZmu7sqr6/dTqjdsuu2WgGTilMEreK26YqB8ROOYdMjkVJpNCcIKXQHyMp2eCwA==} engines: {node: '>=14.18'} peerDependencies: react: ^16.14.0 || 17.x || 18.x || 19.x + '@sentry/server-utils@10.60.0': + resolution: {integrity: sha512-SX+MzWM3nz5ttKT48rlfktm0ERyIpDLma+b6pYeWgW2oFHKcpIu0g0qMGJrZs4lKM3MlgV7IqLa4texMqTp9kQ==} + engines: {node: '>=18'} + '@simple-libs/child-process-utils@1.0.2': resolution: {integrity: sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==} engines: {node: '>=18'} @@ -4823,6 +5005,18 @@ packages: '@standard-schema/utils@0.3.0': resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} + '@stylistic/eslint-plugin@3.1.0': + resolution: {integrity: sha512-pA6VOrOqk0+S8toJYhQGv2MWpQQR0QpeUo9AhNkC49Y26nxBQ/nH1rta9bUU1rPw2fJ1zZEMV5oCX5AazT7J2g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.40.0' + + '@stylistic/eslint-plugin@5.10.0': + resolution: {integrity: sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.0.0 || ^10.0.0 + '@swc/cli@0.8.1': resolution: {integrity: sha512-L+ACCGHCiS0VqHVep/INLVnvRvJ2XooQFLZq4L8snhxw1jsqz+XRcY313UsyPVturPPE1shW3jic7rt3qEQTSQ==} engines: {node: '>= 20.19.0'} @@ -5042,6 +5236,9 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/linkify-it@5.0.0': resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} @@ -5517,6 +5714,11 @@ packages: xstate: optional: true + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -5617,15 +5819,27 @@ packages: anynum@1.0.1: resolution: {integrity: sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==} + are-docs-informative@0.0.2: + resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} + engines: {node: '>=14'} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + array-includes@3.1.9: + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} + engines: {node: '>= 0.4'} + array-treeify@0.1.5: resolution: {integrity: sha512-Ag85dlQyM0wahhm62ZvsLDLU0TcGNXjonRWpEUvlmmaFBuJNuzoc19Gi51uMs9HXoT2zwSewk6JzxUUw8b412g==} @@ -5633,6 +5847,22 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + arrify@2.0.1: resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} engines: {node: '>=8'} @@ -5645,6 +5875,14 @@ packages: resolution: {integrity: sha512-8OG92q3R35qjC/4i6BLBMg8IB+fClWu/1PEwg2Z9Rn+BuNaiEgJzpzn+pxWOdHJWDCAwu2JP0wCDTozAM4QirQ==} engines: {node: ^22.18.0 || >=24.11.0} + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} @@ -5658,6 +5896,10 @@ packages: resolution: {integrity: sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==} engines: {node: '>=4'} + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + aws4@1.13.2: resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} @@ -5782,6 +6024,9 @@ packages: resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} engines: {node: '>=18'} + brace-expansion@1.1.15: + resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} + brace-expansion@2.1.1: resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} @@ -5807,6 +6052,10 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + builtin-modules@5.2.0: resolution: {integrity: sha512-02yxLeyxF4dNl6SlY6/5HfRSrSdZ/sCPoxy2kZNP5dZZX8LSAD9aE2gtJIUgWrsQTiMPl3mxESyrobSwvRGisQ==} engines: {node: '>=18.20'} @@ -5854,6 +6103,10 @@ packages: camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + camelcase@8.0.0: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} @@ -5880,6 +6133,10 @@ packages: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + chalk@5.6.2: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} @@ -6008,6 +6265,10 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} + comment-parser@1.4.1: + resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} + engines: {node: '>= 12.0.0'} + comment-parser@1.4.7: resolution: {integrity: sha512-0h+uSNtQGW3D98eQt3jJ8L06Fves8hncB4V/PKdw/Qb8Hnk19VaKuTr55UNRYiSoVa7WwrFls+rh3ux9agmkeQ==} engines: {node: '>= 12.0.0'} @@ -6021,12 +6282,18 @@ packages: compute-scroll-into-view@3.1.1: resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + confusing-browser-globals@1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + console-table-printer@2.16.1: resolution: {integrity: sha512-Sc9FRJ4O9xKGNrvulNdPfK5SyBcZ6lcaRnDE4AQ/uw6IDtjHhsqyzzqcnMikjyGaiOOF2tNOKoBhbVjRvFy9Lw==} @@ -6142,6 +6409,18 @@ packages: resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + dataloader@2.2.3: resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} @@ -6151,6 +6430,14 @@ packages: debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -6160,6 +6447,10 @@ packages: supports-color: optional: true + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} @@ -6220,6 +6511,10 @@ packages: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -6247,6 +6542,10 @@ packages: resolution: {integrity: sha512-yw5D++UCIB6a033PvQaUvSpW2QuKW0+DOId763n0Q4z3brxS7G8oQr8yBQ1nQFkognKrAVrV6I55TLeU9cfXTg==} engines: {node: '>=16'} + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} @@ -6345,6 +6644,14 @@ packages: error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + es-abstract-get@1.0.0: + resolution: {integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==} + engines: {node: '>= 0.4'} + + es-abstract@1.24.2: + resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} + engines: {node: '>= 0.4'} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -6367,6 +6674,14 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.1: + resolution: {integrity: sha512-CxN9N56HYfd2m/acc/NOFrZQsN9kU4eh+2kk6A707Kz1krH8tKmfrs5RnftB8WNX80T0NS7vSQsDOlg23diR2g==} + engines: {node: '>= 0.4'} + es-toolkit@1.47.1: resolution: {integrity: sha512-5RAqEwf4P4E17p+W75KLOWw/nOvKZzSQpxM32IpI2KZLaVonjTrZ0Ai5ghMaVI9eKC2p8eoQgcBdkEDgzFk6+Q==} @@ -6393,12 +6708,34 @@ packages: peerDependencies: eslint: '>=6.0.0' + eslint-config-oclif@6.0.173: + resolution: {integrity: sha512-eLrXAxnu9fTvP0/aYiubc9r9Fd6fh0h60Ks3DwAPYpUo1hb+hycjNhEVtCCM20m1s/rzQ49CyYCkryzIhEd9ow==} + engines: {node: '>=18.18.0'} + eslint-config-prettier@10.1.8: resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} hasBin: true peerDependencies: eslint: '>=7.0.0' + eslint-config-xo-space@0.35.0: + resolution: {integrity: sha512-+79iVcoLi3PvGcjqYDpSPzbLfqYpNcMlhsCBRsnmDoHAn4npJG6YxmHpelQKpXM7v/EeZTUKb4e1xotWlei8KA==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=8.56.0' + + eslint-config-xo@0.44.0: + resolution: {integrity: sha512-YG4gdaor0mJJi8UBeRJqDPO42MedTWYMaUyucF5bhm2pi/HS98JIxfFQmTLuyj6hGpQlAazNfyVnn7JuDn+Sew==} + engines: {node: '>=18'} + peerDependencies: + eslint: '>=8.56.0' + + eslint-config-xo@0.49.0: + resolution: {integrity: sha512-hGtD689+fdJxggx1QbEjWfgGOsTasmYqtfk3Rsxru9QyKg2iOhXO2fvR9C7ck8AGw+n2wy6FsA8/MBIzznt5/Q==} + engines: {node: '>=20'} + peerDependencies: + eslint: '>=9.33.0' + eslint-import-context@0.1.9: resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -6408,6 +6745,22 @@ packages: unrs-resolver: optional: true + eslint-import-resolver-node@0.3.10: + resolution: {integrity: sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==} + + eslint-import-resolver-typescript@3.10.1: + resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + eslint-import-resolver-typescript@4.4.5: resolution: {integrity: sha512-nbE5XLph6TLtGYcu/U6e6ZVXyKBhbDWK5cLGk76eJ7NdZpwf1P9EFkpt1Z01mNZNrrilsAYWKH6zUkL4reoXbw==} engines: {node: ^16.17.0 || >=18.6.0} @@ -6421,6 +6774,27 @@ packages: eslint-plugin-import-x: optional: true + eslint-module-utils@2.13.0: + resolution: {integrity: sha512-bLohSkT6469rRs8czj0tLTD8vaeIS/whvPRJVjDr7IuoTT1k5DYDERlNycjDj/HkOlvQdYurmfZ/g3fG5bgeLQ==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + eslint-plugin-es-x@7.8.0: resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} engines: {node: ^14.18.0 || >=16.0.0} @@ -6440,12 +6814,40 @@ packages: eslint-import-resolver-node: optional: true + eslint-plugin-import@2.32.0: + resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jsdoc@50.8.0: + resolution: {integrity: sha512-UyGb5755LMFWPrZTEqqvTJ3urLz1iqj+bYOHFNag+sw3NvaMWP9K2z+uIn37XfNALmQLQyrBlJ5mkiVPL7ADEg==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-plugin-mocha@10.5.0: + resolution: {integrity: sha512-F2ALmQVPT1GoP27O1JTZGrV9Pqg8k79OeIuvw63UxMtQKREZtmkK1NFgkZQ2TW7L2JSSFKHFPTtHu5z8R9QNRw==} + engines: {node: '>=14.0.0'} + peerDependencies: + eslint: '>=7.0.0' + eslint-plugin-n@17.24.0: resolution: {integrity: sha512-/gC7/KAYmfNnPNOb3eu8vw+TdVnV0zhdQwexsw6FLXbhzroVj20vRn2qL8lDWDGnAQ2J8DhdfvXxX9EoxvERvw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.23.0' + eslint-plugin-perfectionist@4.15.1: + resolution: {integrity: sha512-MHF0cBoOG0XyBf7G0EAFCuJJu4I18wy0zAoT1OHfx2o6EOx1EFTIzr2HGeuZa1kDcusoX0xJ9V7oZmaeFd773Q==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + eslint: '>=8.45.0' + eslint-plugin-perfectionist@5.9.1: resolution: {integrity: sha512-30mHLNfEhzwaq5cquyWgnzrNXvT8AzwIwyeH5aj4U5ajhHSF2uiO6i09xpMDLv7koaZVTjLsvYF4m3gK/15tyA==} engines: {node: ^20.0.0 || >=22.0.0} @@ -6455,6 +6857,12 @@ packages: eslint-plugin-tsdoc@0.5.2: resolution: {integrity: sha512-BlvqjWZdBJDIPO/YU3zcPCF23CvjYT3gyu63yo6b609NNV3D1b6zceAREy2xnweuBoDpZcLNuPyAUq9cvx6bbQ==} + eslint-plugin-unicorn@56.0.1: + resolution: {integrity: sha512-FwVV0Uwf8XPfVnKSGpMg7NtlZh0G0gBarCaFcMUOoqPxXryxdYxTRRv4kH6B9TFCVIrjRXG+emcxIk2ayZilog==} + engines: {node: '>=18.18'} + peerDependencies: + eslint: '>=8.56.0' + eslint-plugin-unicorn@63.0.0: resolution: {integrity: sha512-Iqecl9118uQEXYh7adylgEmGfkn5es3/mlQTLLkd4pXkIk9CTGrAbeUux+YljSa2ohXCBmQQ0+Ej1kZaFgcfkA==} engines: {node: ^20.10.0 || >=21.0.0} @@ -6474,10 +6882,24 @@ packages: resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + eslint-utils@3.0.0: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + + eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@5.0.1: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -6492,6 +6914,10 @@ packages: jiti: optional: true + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@11.2.0: resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -6720,6 +7146,10 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + flatted@3.4.2: resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} @@ -6727,6 +7157,10 @@ packages: resolution: {integrity: sha512-Ik/6OCk9RQQ0T5Xw+hKNLWrjSMtv51dD4GRmJjbD5a58TIEpI5a5iXagKVl3Z5UuyslMCA8Xwnu76jQob62Yhg==} engines: {node: '>=10'} + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + form-data-encoder@2.1.4: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} @@ -6782,6 +7216,17 @@ packages: resolution: {integrity: sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==} engines: {node: '>=18'} + function.prototype.name@1.2.0: + resolution: {integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -6826,6 +7271,10 @@ packages: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + get-tsconfig@4.14.0: resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} @@ -6875,6 +7324,14 @@ packages: resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} engines: {node: '>=0.10.0'} + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + globals@15.15.0: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} @@ -6883,6 +7340,10 @@ packages: resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -6928,6 +7389,10 @@ packages: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} hasBin: true + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -6935,6 +7400,10 @@ packages: has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -6973,6 +7442,9 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + hosted-git-info@7.0.2: resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} @@ -7071,6 +7543,10 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + import-in-the-middle@3.2.0: + resolution: {integrity: sha512-vR2B6HKIhaBjcZr2bLpFiJ1VbzOlRQ7aby4/gw5WPIzToLjqpfWw3VJ4sk1uDchoOODEirvO2jyrSPtUSL5CrQ==} + engines: {node: '>=18'} + import-lazy@4.0.0: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} engines: {node: '>=8'} @@ -7112,33 +7588,78 @@ packages: resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} engines: {node: ^20.17.0 || >=22.9.0} + inquirer@12.11.1: + resolution: {integrity: sha512-9VF7mrY+3OmsAfjH3yKz/pLbJ5z22E23hENKw3/LNSaA/sAt3v49bDRY+Ygct1xwuKT+U+cBfTzjCPySna69Qw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + inspect-with-kind@1.0.5: resolution: {integrity: sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==} + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-builtin-module@5.0.0: - resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==} - engines: {node: '>=18.20'} + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + is-builtin-module@5.0.0: + resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==} + engines: {node: '>=18.20'} is-bun-module@2.0.0: resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + is-core-module@2.16.2: resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} engines: {node: '>= 0.4'} + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -7155,10 +7676,18 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true + is-document.all@1.0.0: + resolution: {integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==} + engines: {node: '>= 0.4'} + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -7167,6 +7696,10 @@ packages: resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} engines: {node: '>=18'} + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -7198,12 +7731,24 @@ packages: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + is-node-process@1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -7220,6 +7765,10 @@ packages: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -7234,6 +7783,10 @@ packages: is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + is-retry-allowed@1.2.0: resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} engines: {node: '>=0.10.0'} @@ -7242,6 +7795,14 @@ packages: resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} engines: {node: '>=10'} + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + is-ssh@1.4.1: resolution: {integrity: sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==} @@ -7257,14 +7818,38 @@ packages: resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} engines: {node: '>=18'} + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + is-unicode-supported@2.1.0: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -7353,6 +7938,10 @@ packages: resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} hasBin: true + jsdoc-type-pratt-parser@4.1.0: + resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} + engines: {node: '>=12.0.0'} + jsdom@26.1.0: resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} engines: {node: '>=18'} @@ -7380,6 +7969,10 @@ packages: canvas: optional: true + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -7427,6 +8020,10 @@ packages: json-with-bigint@3.5.8: resolution: {integrity: sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw==} + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -7660,6 +8257,9 @@ packages: md5-o-matic@0.1.1: resolution: {integrity: sha512-QBJSFpsedXUl/Lgs4ySdB2XCzUEcJ3ujpbagdZCkRaYIaC0kFnID8jhc84KEiVv6dNFtIrmW7bqow0lDxgJi6A==} + mdn-data@2.23.0: + resolution: {integrity: sha512-786vq1+4079JSeu2XdcDjrhi/Ry7BWtjDl9WtGPWLiIHb2T66GvIVflZTBoSNZ5JqTtJGYEVMuFA/lbQlMOyDQ==} + mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} @@ -7696,6 +8296,10 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + meriyah@6.1.4: + resolution: {integrity: sha512-Sz8FzjzI0kN13GK/6MVEsVzMZEPvOhnmmI1lU5+/1cGOiK3QUahntrNNtdVeihrO7t9JpoH75iMNXg6R6uWflQ==} + engines: {node: '>=18.0.0'} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -7732,6 +8336,10 @@ packages: resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + minimatch@10.2.3: resolution: {integrity: sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==} engines: {node: 18 || 20 || >=22} @@ -7740,6 +8348,9 @@ packages: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + minimatch@5.1.9: resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} engines: {node: '>=10'} @@ -7770,6 +8381,9 @@ packages: modern-ahocorasick@1.1.0: resolution: {integrity: sha512-sEKPVl2rM+MNVkGQt3ChdmD8YsigmXdn5NifZn6jiwn9LRJpWm8F3guhaqrJT/JOat6pwpbXEk6kv+b9DMIjsQ==} + module-details-from-path@1.0.4: + resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + motion-dom@12.40.0: resolution: {integrity: sha512-HxU3ZaBwNPVQUBQf1xxgq+7JrPNZvjLVxgbpEZL7RrWJnsxOf0/OM+yrHG9ogLQ31Do/r57Oz2gQWPK+6q62mg==} @@ -7869,6 +8483,10 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + node-exports-info@1.6.2: + resolution: {integrity: sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==} + engines: {node: '>= 0.4'} + node-html-parser@7.1.0: resolution: {integrity: sha512-iJo8b2uYGT40Y8BTyy5ufL6IVbN8rbm/1QK2xffXU/1a/v3AAa0d1YAoqBNYqaS4R/HajkWIpIfdE6KcyFh1AQ==} @@ -7883,6 +8501,9 @@ packages: resolution: {integrity: sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==} engines: {node: '>=6'} + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@6.0.2: resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} engines: {node: ^16.14.0 || >=18.0.0} @@ -7925,6 +8546,26 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + observable-callback@1.0.3: resolution: {integrity: sha512-VlS275UyPnwdMtzxDgr/lCiOUyq9uXNll3vdwzDcJ6PB/LuO7gLmxAQopcCA3JoFwwujBwyA7/tP5TXZwWSXew==} engines: {node: '>=16'} @@ -7980,6 +8621,10 @@ packages: outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + oxc-parser@0.135.0: resolution: {integrity: sha512-/DaPStu0s2zzNSRRniKyTPM6Z/o+DapOp2JYNKDL8AsgaBGPK2IdZyB87SQjVH+xeQPz+Qr9mrjglfkYgtbVRA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -8086,6 +8731,9 @@ packages: parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parse-imports-exports@0.2.4: + resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==} + parse-json@4.0.0: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} @@ -8109,6 +8757,9 @@ packages: parse-path@7.1.0: resolution: {integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==} + parse-statements@1.0.11: + resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==} + parse-url@9.2.0: resolution: {integrity: sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==} engines: {node: '>=14.13.0'} @@ -8218,6 +8869,10 @@ packages: resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} engines: {node: '>=10'} + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} @@ -8318,6 +8973,9 @@ packages: raf@3.4.1: resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} + rambda@7.5.0: + resolution: {integrity: sha512-y/M9weqWAH4iopRd7EHDEQQvpFPHj1AA3oHozE9tfITHUtTR7Z9PSlIRRG2l1GuW7sefC1cXFfIcF+cgnShdBA==} + react-clientside-effect@1.2.8: resolution: {integrity: sha512-ma2FePH0z3px2+WOu6h+YycZcEvFmmxIlAb62cF52bG86eMySciO/EQZeQMXd07kPCYB0a1dWDT5J+KE9mCDUw==} peerDependencies: @@ -8445,10 +9103,18 @@ packages: resolution: {integrity: sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw==} engines: {node: '>=20'} + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + read-pkg@10.1.0: resolution: {integrity: sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==} engines: {node: '>=20'} + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} @@ -8485,6 +9151,10 @@ packages: redux@5.0.1: resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + refractor@5.0.0: resolution: {integrity: sha512-QXOrHQF5jOpjjLfiNk5GFnWhRXvxjUVnlFxkeDmewR5sXkr3iM46Zo+CnRR8B+MDVqkULW4EcLVcRBNOPXHosw==} @@ -8499,6 +9169,10 @@ packages: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + regexpu-core@6.4.0: resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} engines: {node: '>=4'} @@ -8514,6 +9188,10 @@ packages: regjsgen@0.8.0: resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true + regjsparser@0.13.2: resolution: {integrity: sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==} hasBin: true @@ -8530,6 +9208,10 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + require-in-the-middle@8.0.1: + resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==} + engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'} + require-like@0.1.2: resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==} @@ -8563,6 +9245,11 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true + resolve@2.0.0-next.7: + resolution: {integrity: sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==} + engines: {node: '>= 0.4'} + hasBin: true + responselike@3.0.0: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} @@ -8634,6 +9321,10 @@ packages: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} + run-async@4.0.6: + resolution: {integrity: sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==} + engines: {node: '>=0.12.0'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -8655,12 +9346,24 @@ packages: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} + safe-array-concat@1.1.4: + resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} + engines: {node: '>=0.4'} + safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -8709,6 +9412,9 @@ packages: resolution: {integrity: sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg==} hasBin: true + semifies@1.0.0: + resolution: {integrity: sha512-xXR3KGeoxTNWPD4aBvL5NUpMTT7WMANr3EWnaS190QVkY52lqqcVRD7Q05UVbBhiWDGWMlJEUam9m7uFFGVScw==} + semver-regex@4.0.5: resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} engines: {node: '>=12'} @@ -8746,6 +9452,14 @@ packages: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + sha256-uint8array@0.10.7: resolution: {integrity: sha512-1Q6JQU4tX9NqsDGodej6pkrUVQVNapLZnvkwIhddH/JqzBZF1fSaxSWNY6sziXBE8aEa2twtGkXUrwzGeZCMpQ==} @@ -8768,6 +9482,22 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} + engines: {node: '>= 0.4'} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -8862,6 +9592,9 @@ packages: spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@4.0.0: + resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} + spdx-license-ids@3.0.23: resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} @@ -8876,6 +9609,9 @@ packages: resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} engines: {node: '>=12.0.0'} + stable-hash@0.0.5: + resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -8886,6 +9622,10 @@ packages: resolution: {integrity: sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==} engines: {node: '>=18'} + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} @@ -8911,6 +9651,18 @@ packages: resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==} engines: {node: '>=20'} + string.prototype.trim@1.2.11: + resolution: {integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.10: + resolution: {integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -8940,10 +9692,18 @@ packages: resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} engines: {node: '>=18'} + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + strip-indent@4.1.1: resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} engines: {node: '>=12'} + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + strip-json-comments@5.0.3: resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} engines: {node: '>=14.16'} @@ -9157,10 +9917,16 @@ packages: typescript: optional: true + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tsconfig-paths@4.2.0: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} + tsheredoc@1.0.1: + resolution: {integrity: sha512-aOyKWGdZSKEMFnzlccLu3wwB4VgpGhJ6bZON9uM+p8hgHSczfMvPdspxX+Dkr+q8/Dpgla1UwK6pFLmutUEUaw==} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -9184,10 +9950,22 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -9196,6 +9974,22 @@ packages: resolution: {integrity: sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg==} engines: {node: '>=20'} + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.8: + resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==} + engines: {node: '>= 0.4'} + typeid-js@0.3.0: resolution: {integrity: sha512-A1EmvIWG6xwYRfHuYUjPltHqteZ1EiDG+HOmbIYXeHUVztmnGrPIfU9KIK1QC30x59ko0r4JsMlwzsALCyiB3Q==} @@ -9228,6 +10022,10 @@ packages: resolution: {integrity: sha512-1ajSo3813sDoVIHx4inJdUS4l5L2ic5cFiddemPiyjb/PZEoBAhFwHtbaEdRDFxbAKy7FCG7s5ww3/uCFawuIA==} engines: {node: '>=14'} + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} @@ -9546,6 +10344,22 @@ packages: resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.22: + resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} + engines: {node: '>= 0.4'} + which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -9656,10 +10470,18 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + yargs@17.7.3: resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} engines: {node: '>=12'} @@ -9747,6 +10569,30 @@ snapshots: '@algorithm.ts/lcs@4.0.6': {} + '@apm-js-collab/code-transformer-bundler-plugins@0.5.0': + dependencies: + '@apm-js-collab/code-transformer': 0.15.0 + es-module-lexer: 2.1.0 + magic-string: 0.30.21 + module-details-from-path: 1.0.4 + + '@apm-js-collab/code-transformer@0.15.0': + dependencies: + '@types/estree': 1.0.9 + astring: 1.9.0 + esquery: 1.7.0 + meriyah: 6.1.4 + semifies: 1.0.0 + source-map: 0.6.1 + + '@apm-js-collab/tracing-hooks@0.10.0': + dependencies: + '@apm-js-collab/code-transformer': 0.15.0 + debug: 4.4.3(supports-color@8.1.1) + module-details-from-path: 1.0.4 + transitivePeerDependencies: + - supports-color + '@architect/asap@7.0.10': dependencies: '@aws-lite/client': 0.21.10 @@ -11414,6 +12260,14 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} + '@es-joy/jsdoccomment@0.50.2': + dependencies: + '@types/estree': 1.0.9 + '@typescript-eslint/types': 8.61.1 + comment-parser: 1.4.1 + esquery: 1.7.0 + jsdoc-type-pratt-parser: 4.1.0 + '@esbuild/aix-ppc64@0.28.1': optional: true @@ -11499,6 +12353,12 @@ snapshots: '@eslint-community/regexpp@4.12.2': {} + '@eslint/compat@1.4.1(eslint@10.5.0(jiti@2.7.0))': + dependencies: + '@eslint/core': 0.17.0 + optionalDependencies: + eslint: 10.5.0(jiti@2.7.0) + '@eslint/compat@2.1.0(eslint@10.5.0(jiti@2.7.0))': dependencies: '@eslint/core': 1.2.1 @@ -11517,16 +12377,67 @@ snapshots: dependencies: '@eslint/core': 1.2.1 + '@eslint/core@0.14.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/core@0.15.2': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/core@1.2.1': dependencies: '@types/json-schema': 7.0.15 + '@eslint/css-tree@3.6.9': + dependencies: + mdn-data: 2.23.0 + source-map-js: 1.2.1 + + '@eslint/css@0.10.0': + dependencies: + '@eslint/core': 0.14.0 + '@eslint/css-tree': 3.6.9 + '@eslint/plugin-kit': 0.3.5 + + '@eslint/eslintrc@3.3.5': + dependencies: + ajv: 6.15.0 + debug: 4.4.3(supports-color@8.1.1) + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.2.0 + minimatch: 3.1.5 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + '@eslint/js@10.0.1(eslint@10.5.0(jiti@2.7.0))': optionalDependencies: eslint: 10.5.0(jiti@2.7.0) + '@eslint/js@9.39.4': {} + + '@eslint/json@0.13.2': + dependencies: + '@eslint/core': 0.15.2 + '@eslint/plugin-kit': 0.3.5 + '@humanwhocodes/momoa': 3.3.10 + natural-compare: 1.4.0 + '@eslint/object-schema@3.0.5': {} + '@eslint/plugin-kit@0.3.5': + dependencies: + '@eslint/core': 0.15.2 + levn: 0.4.1 + '@eslint/plugin-kit@0.7.2': dependencies: '@eslint/core': 1.2.1 @@ -11553,6 +12464,55 @@ snapshots: '@floating-ui/utils@0.2.11': {} + '@heroku-cli/command@12.4.2(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@types/node@22.20.0)': + dependencies: + '@heroku/http-call': 5.5.3 + '@heroku/js-blanket': 1.0.1 + '@oclif/core': 4.11.7 + '@sentry/node': 10.60.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1)) + ansis: 4.3.1 + debug: 4.4.3(supports-color@8.1.1) + execa: 9.6.1 + inquirer: 12.11.1(@types/node@22.20.0) + open: 11.0.0 + tsheredoc: 1.0.1 + yargs-parser: 20.2.9 + yargs-unparser: 2.0.0 + transitivePeerDependencies: + - '@opentelemetry/core' + - '@opentelemetry/exporter-trace-otlp-http' + - '@types/node' + - supports-color + + '@heroku-cli/test-utils@1.0.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@types/node@22.20.0)(eslint-config-oclif@6.0.173(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0))(nock@14.0.15)': + dependencies: + '@heroku-cli/command': 12.4.2(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@types/node@22.20.0) + '@oclif/core': 4.11.7 + ansis: 4.3.1 + eslint: 10.5.0(jiti@2.7.0) + eslint-config-oclif: 6.0.173(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3) + nock: 14.0.15 + transitivePeerDependencies: + - '@opentelemetry/core' + - '@opentelemetry/exporter-trace-otlp-http' + - '@types/node' + - supports-color + + '@heroku/http-call@5.5.3': + dependencies: + chalk: 4.1.2 + content-type: 1.0.5 + debug: 4.4.3(supports-color@8.1.1) + is-retry-allowed: 2.2.0 + is-stream: 2.0.1 + tunnel-agent: 0.6.0 + transitivePeerDependencies: + - supports-color + + '@heroku/js-blanket@1.0.1': + dependencies: + tslib: 2.8.1 + '@hookform/resolvers@4.1.3(react-hook-form@7.80.0(react@19.2.7))': dependencies: '@standard-schema/utils': 0.3.0 @@ -11572,6 +12532,8 @@ snapshots: '@humanwhocodes/module-importer@1.0.1': {} + '@humanwhocodes/momoa@3.3.10': {} + '@humanwhocodes/retry@0.4.3': {} '@img/colour@1.1.0': @@ -12382,6 +13344,8 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 + '@nolyfill/is-core-module@1.0.39': {} + '@oclif/core@4.11.7': dependencies: ansi-escapes: 4.3.2 @@ -12488,6 +13452,41 @@ snapshots: '@open-draft/until@2.1.0': {} + '@opentelemetry/api-logs@0.214.0': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/api@1.9.1': {} + + '@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.41.1 + + '@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.214.0 + import-in-the-middle: 3.2.0 + require-in-the-middle: 8.0.1 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/resources@2.8.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.41.1 + + '@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.41.1 + + '@opentelemetry/semantic-conventions@1.41.1': {} + '@optimize-lodash/rollup-plugin@6.0.0(rollup@4.62.2)': dependencies: '@optimize-lodash/transform': 4.0.0 @@ -13036,6 +14035,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.62.2': optional: true + '@rtsao/scc@1.1.0': {} + '@rushstack/node-core-library@5.23.1(@types/node@22.20.0)': dependencies: ajv: 8.18.0 @@ -13821,8 +14822,48 @@ snapshots: '@sentry-internal/replay-canvas': 8.55.2 '@sentry/core': 8.55.2 + '@sentry/conventions@0.12.0': {} + + '@sentry/core@10.60.0': {} + '@sentry/core@8.55.2': {} + '@sentry/node-core@10.60.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))': + dependencies: + '@sentry/conventions': 0.12.0 + '@sentry/core': 10.60.0 + '@sentry/opentelemetry': 10.60.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1)) + import-in-the-middle: 3.2.0 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1) + + '@sentry/node@10.60.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/instrumentation': 0.214.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.41.1 + '@sentry/core': 10.60.0 + '@sentry/node-core': 10.60.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.214.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1)) + '@sentry/opentelemetry': 10.60.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1)) + '@sentry/server-utils': 10.60.0 + import-in-the-middle: 3.2.0 + transitivePeerDependencies: + - '@opentelemetry/core' + - '@opentelemetry/exporter-trace-otlp-http' + - supports-color + + '@sentry/opentelemetry@10.60.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1) + '@sentry/conventions': 0.12.0 + '@sentry/core': 10.60.0 + '@sentry/react@8.55.2(react@19.2.7)': dependencies: '@sentry/browser': 8.55.2 @@ -13830,6 +14871,17 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.2.7 + '@sentry/server-utils@10.60.0': + dependencies: + '@apm-js-collab/code-transformer': 0.15.0 + '@apm-js-collab/code-transformer-bundler-plugins': 0.5.0 + '@apm-js-collab/tracing-hooks': 0.10.0 + '@sentry/conventions': 0.12.0 + '@sentry/core': 10.60.0 + magic-string: 0.30.21 + transitivePeerDependencies: + - supports-color + '@simple-libs/child-process-utils@1.0.2': dependencies: '@simple-libs/stream-utils': 1.2.0 @@ -13894,6 +14946,28 @@ snapshots: '@standard-schema/utils@0.3.0': {} + '@stylistic/eslint-plugin@3.1.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3) + eslint: 10.5.0(jiti@2.7.0) + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + estraverse: 5.3.0 + picomatch: 4.0.4 + transitivePeerDependencies: + - supports-color + - typescript + + '@stylistic/eslint-plugin@5.10.0(eslint@10.5.0(jiti@2.7.0))': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0)) + '@typescript-eslint/types': 8.61.1 + eslint: 10.5.0(jiti@2.7.0) + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + estraverse: 5.3.0 + picomatch: 4.0.4 + '@swc/cli@0.8.1(@swc/core@1.15.41)(chokidar@5.0.0)': dependencies: '@swc/core': 1.15.41 @@ -14078,6 +15152,8 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/json5@0.0.29': {} + '@types/linkify-it@5.0.0': {} '@types/lodash-es@4.17.12': @@ -14497,7 +15573,7 @@ snapshots: magicast: 0.5.3 obug: 2.1.3 tinyrainbow: 3.1.0 - vitest: 4.1.9(@types/node@26.0.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@26.0.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + vitest: 4.1.9(@opentelemetry/api@1.9.1)(@types/node@26.0.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@26.0.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) transitivePeerDependencies: - supports-color @@ -14653,6 +15729,10 @@ snapshots: transitivePeerDependencies: - '@types/react' + acorn-import-attributes@1.9.5(acorn@8.17.0): + dependencies: + acorn: 8.17.0 + acorn-jsx@5.3.2(acorn@8.17.0): dependencies: acorn: 8.17.0 @@ -14735,18 +15815,70 @@ snapshots: anynum@1.0.1: {} + are-docs-informative@0.0.2: {} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 argparse@2.0.1: {} + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + array-ify@1.0.0: {} + array-includes@3.1.9: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + math-intrinsics: 1.1.0 + array-treeify@0.1.5: {} array-union@2.1.0: {} + array.prototype.findlastindex@1.2.6: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-shim-unscopables: 1.1.0 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-shim-unscopables: 1.1.0 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-shim-unscopables: 1.1.0 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + arrify@2.0.1: {} assertion-error@2.0.1: {} @@ -14757,6 +15889,10 @@ snapshots: estree-walker: 3.0.3 pathe: 2.0.3 + astring@1.9.0: {} + + async-function@1.0.0: {} + async-retry@1.3.3: dependencies: retry: 0.13.1 @@ -14767,6 +15903,10 @@ snapshots: attr-accept@2.2.5: {} + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + aws4@1.13.2: {} b4a@1.8.1: {} @@ -14886,6 +16026,11 @@ snapshots: widest-line: 5.0.0 wrap-ansi: 9.0.2 + brace-expansion@1.1.15: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + brace-expansion@2.1.1: dependencies: balanced-match: 1.0.2 @@ -14917,6 +16062,8 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + builtin-modules@3.3.0: {} + builtin-modules@5.2.0: {} bundle-name@4.1.0: @@ -14973,6 +16120,8 @@ snapshots: pascal-case: 3.1.2 tslib: 2.8.1 + camelcase@6.3.0: {} + camelcase@8.0.0: {} caniuse-lite@1.0.30001799: {} @@ -14998,6 +16147,11 @@ snapshots: chai@6.2.2: {} + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + chalk@5.6.2: {} change-case@4.1.2: @@ -15124,6 +16278,8 @@ snapshots: commander@8.3.0: {} + comment-parser@1.4.1: {} + comment-parser@1.4.7: {} commondir@1.0.1: {} @@ -15135,6 +16291,8 @@ snapshots: compute-scroll-into-view@3.1.1: {} + concat-map@0.0.1: {} + confbox@0.1.8: {} config-chain@1.1.13: @@ -15142,6 +16300,8 @@ snapshots: ini: 1.3.8 proto-list: 1.2.4 + confusing-browser-globals@1.0.11: {} + console-table-printer@2.16.1: dependencies: simple-wcswidth: 1.1.2 @@ -15266,18 +16426,42 @@ snapshots: transitivePeerDependencies: - '@noble/hashes' + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + dataloader@2.2.3: {} date-fns@4.4.0: {} debounce@1.2.1: {} + debug@3.2.7: + dependencies: + ms: 2.1.3 + debug@4.4.3(supports-color@8.1.1): dependencies: ms: 2.1.3 optionalDependencies: supports-color: 8.1.1 + decamelize@4.0.0: {} + decimal.js@10.6.0: {} decode-named-character-reference@1.3.0: @@ -15325,6 +16509,12 @@ snapshots: define-lazy-prop@3.0.0: {} + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + delayed-stream@1.0.0: {} detect-indent@6.1.0: {} @@ -15341,6 +16531,10 @@ snapshots: doc-path@4.1.4: {} + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + dom-helpers@5.2.1: dependencies: '@babel/runtime': 7.29.7 @@ -15436,6 +16630,70 @@ snapshots: dependencies: is-arrayish: 0.2.1 + es-abstract-get@1.0.0: + dependencies: + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + is-callable: 1.2.7 + object-inspect: 1.13.4 + + es-abstract@1.24.2: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.1 + function.prototype.name: 1.2.0 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.4 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.11 + string.prototype.trimend: 1.0.10 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.8 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.22 + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -15455,6 +16713,18 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.4 + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.4 + + es-to-primitive@1.3.1: + dependencies: + es-abstract-get: 1.0.0 + es-errors: 1.3.0 + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + es-toolkit@1.47.1: {} esbuild@0.28.1: @@ -15497,10 +16767,54 @@ snapshots: eslint: 10.5.0(jiti@2.7.0) semver: 7.8.5 + eslint-config-oclif@6.0.173(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3): + dependencies: + '@eslint/compat': 1.4.1(eslint@10.5.0(jiti@2.7.0)) + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.4 + '@stylistic/eslint-plugin': 3.1.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.61.1(@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3) + eslint-config-xo: 0.49.0(eslint@10.5.0(jiti@2.7.0)) + eslint-config-xo-space: 0.35.0(eslint@10.5.0(jiti@2.7.0)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@10.5.0(jiti@2.7.0)))(eslint-plugin-import@2.32.0)(eslint@10.5.0(jiti@2.7.0)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.5.0(jiti@2.7.0)) + eslint-plugin-jsdoc: 50.8.0(eslint@10.5.0(jiti@2.7.0)) + eslint-plugin-mocha: 10.5.0(eslint@10.5.0(jiti@2.7.0)) + eslint-plugin-n: 17.24.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3) + eslint-plugin-perfectionist: 4.15.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3) + eslint-plugin-unicorn: 56.0.1(eslint@10.5.0(jiti@2.7.0)) + typescript-eslint: 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3) + transitivePeerDependencies: + - eslint + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + - typescript + eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@2.7.0)): dependencies: eslint: 10.5.0(jiti@2.7.0) + eslint-config-xo-space@0.35.0(eslint@10.5.0(jiti@2.7.0)): + dependencies: + eslint: 10.5.0(jiti@2.7.0) + eslint-config-xo: 0.44.0(eslint@10.5.0(jiti@2.7.0)) + + eslint-config-xo@0.44.0(eslint@10.5.0(jiti@2.7.0)): + dependencies: + confusing-browser-globals: 1.0.11 + eslint: 10.5.0(jiti@2.7.0) + + eslint-config-xo@0.49.0(eslint@10.5.0(jiti@2.7.0)): + dependencies: + '@eslint/css': 0.10.0 + '@eslint/json': 0.13.2 + '@stylistic/eslint-plugin': 5.10.0(eslint@10.5.0(jiti@2.7.0)) + confusing-browser-globals: 1.0.11 + eslint: 10.5.0(jiti@2.7.0) + globals: 16.5.0 + eslint-import-context@0.1.9(unrs-resolver@1.12.2): dependencies: get-tsconfig: 4.14.0 @@ -15508,7 +16822,31 @@ snapshots: optionalDependencies: unrs-resolver: 1.12.2 - eslint-import-resolver-typescript@4.4.5(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0)))(eslint@10.5.0(jiti@2.7.0)): + eslint-import-resolver-node@0.3.10: + dependencies: + debug: 3.2.7 + is-core-module: 2.16.2 + resolve: 2.0.0-next.7 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@10.5.0(jiti@2.7.0)))(eslint-plugin-import@2.32.0)(eslint@10.5.0(jiti@2.7.0)): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.3(supports-color@8.1.1) + eslint: 10.5.0(jiti@2.7.0) + get-tsconfig: 4.14.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.17 + unrs-resolver: 1.12.2 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.5.0(jiti@2.7.0)) + eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@10.5.0(jiti@2.7.0)) + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@4.4.5(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@10.5.0(jiti@2.7.0)))(eslint-plugin-import@2.32.0)(eslint@10.5.0(jiti@2.7.0)): dependencies: debug: 4.4.3(supports-color@8.1.1) eslint: 10.5.0(jiti@2.7.0) @@ -15519,7 +16857,19 @@ snapshots: tinyglobby: 0.2.17 unrs-resolver: 1.12.2 optionalDependencies: - eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.5)(eslint@10.5.0(jiti@2.7.0)) + eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@10.5.0(jiti@2.7.0)) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.13.0(@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.5)(eslint@10.5.0(jiti@2.7.0)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3) + eslint: 10.5.0(jiti@2.7.0) + eslint-import-resolver-node: 0.3.10 + eslint-import-resolver-typescript: 4.4.5(eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@10.5.0(jiti@2.7.0)))(eslint-plugin-import@2.32.0)(eslint@10.5.0(jiti@2.7.0)) transitivePeerDependencies: - supports-color @@ -15530,7 +16880,7 @@ snapshots: eslint: 10.5.0(jiti@2.7.0) eslint-compat-utils: 0.5.1(eslint@10.5.0(jiti@2.7.0)) - eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.5.0(jiti@2.7.0)): + eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@10.5.0(jiti@2.7.0)): dependencies: '@package-json/types': 0.0.12 '@typescript-eslint/types': 8.61.1 @@ -15545,9 +16895,92 @@ snapshots: unrs-resolver: 1.12.2 optionalDependencies: '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3) + eslint-import-resolver-node: 0.3.10 transitivePeerDependencies: - supports-color + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.5.0(jiti@2.7.0)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 10.5.0(jiti@2.7.0) + eslint-import-resolver-node: 0.3.10 + eslint-module-utils: 2.13.0(@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.5)(eslint@10.5.0(jiti@2.7.0)) + hasown: 2.0.4 + is-core-module: 2.16.2 + is-glob: 4.0.3 + minimatch: 3.1.5 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.10 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.5)(eslint@10.5.0(jiti@2.7.0)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 10.5.0(jiti@2.7.0) + eslint-import-resolver-node: 0.3.10 + eslint-module-utils: 2.13.0(@typescript-eslint/parser@8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.5)(eslint@10.5.0(jiti@2.7.0)) + hasown: 2.0.4 + is-core-module: 2.16.2 + is-glob: 4.0.3 + minimatch: 3.1.5 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.10 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + optional: true + + eslint-plugin-jsdoc@50.8.0(eslint@10.5.0(jiti@2.7.0)): + dependencies: + '@es-joy/jsdoccomment': 0.50.2 + are-docs-informative: 0.0.2 + comment-parser: 1.4.1 + debug: 4.4.3(supports-color@8.1.1) + escape-string-regexp: 4.0.0 + eslint: 10.5.0(jiti@2.7.0) + espree: 10.4.0 + esquery: 1.7.0 + parse-imports-exports: 0.2.4 + semver: 7.8.5 + spdx-expression-parse: 4.0.0 + transitivePeerDependencies: + - supports-color + + eslint-plugin-mocha@10.5.0(eslint@10.5.0(jiti@2.7.0)): + dependencies: + eslint: 10.5.0(jiti@2.7.0) + eslint-utils: 3.0.0(eslint@10.5.0(jiti@2.7.0)) + globals: 13.24.0 + rambda: 7.5.0 + eslint-plugin-n@17.24.0(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0)) @@ -15563,6 +16996,16 @@ snapshots: transitivePeerDependencies: - typescript + eslint-plugin-perfectionist@4.15.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3): + dependencies: + '@typescript-eslint/types': 8.61.1 + '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3) + eslint: 10.5.0(jiti@2.7.0) + natural-orderby: 5.0.0 + transitivePeerDependencies: + - supports-color + - typescript + eslint-plugin-perfectionist@5.9.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3): dependencies: '@typescript-eslint/utils': 8.61.1(eslint@10.5.0(jiti@2.7.0))(typescript@5.9.3) @@ -15582,6 +17025,26 @@ snapshots: - supports-color - typescript + eslint-plugin-unicorn@56.0.1(eslint@10.5.0(jiti@2.7.0)): + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@2.7.0)) + ci-info: 4.4.0 + clean-regexp: 1.0.0 + core-js-compat: 3.49.0 + eslint: 10.5.0(jiti@2.7.0) + esquery: 1.7.0 + globals: 15.15.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + jsesc: 3.1.0 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + regjsparser: 0.10.0 + semver: 7.8.5 + strip-indent: 3.0.0 + eslint-plugin-unicorn@63.0.0(eslint@10.5.0(jiti@2.7.0)): dependencies: '@babel/helper-validator-identifier': 7.29.7 @@ -15615,8 +17078,17 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 + eslint-utils@3.0.0(eslint@10.5.0(jiti@2.7.0)): + dependencies: + eslint: 10.5.0(jiti@2.7.0) + eslint-visitor-keys: 2.1.0 + + eslint-visitor-keys@2.1.0: {} + eslint-visitor-keys@3.4.3: {} + eslint-visitor-keys@4.2.1: {} + eslint-visitor-keys@5.0.1: {} eslint@10.5.0(jiti@2.7.0): @@ -15656,6 +17128,12 @@ snapshots: transitivePeerDependencies: - supports-color + espree@10.4.0: + dependencies: + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + eslint-visitor-keys: 4.2.1 + espree@11.2.0: dependencies: acorn: 8.17.0 @@ -15900,12 +17378,18 @@ snapshots: flatted: 3.4.2 keyv: 4.5.4 + flat@5.0.2: {} + flatted@3.4.2: {} focus-lock@1.3.6: dependencies: tslib: 2.8.1 + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + form-data-encoder@2.1.4: {} form-data-encoder@4.1.0: {} @@ -15957,6 +17441,22 @@ snapshots: function-timeout@1.0.2: {} + function.prototype.name@1.2.0: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + es-define-property: 1.0.1 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + hasown: 2.0.4 + is-callable: 1.2.7 + is-document.all: 1.0.0 + + functions-have-names@1.2.3: {} + + generator-function@2.0.1: {} + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -16006,6 +17506,12 @@ snapshots: '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + get-tsconfig@4.14.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -16069,10 +17575,21 @@ snapshots: is-windows: 1.0.2 which: 1.3.1 + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globals@14.0.0: {} + globals@15.15.0: {} globals@16.5.0: {} + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + globby@11.1.0: dependencies: array-union: 2.1.0 @@ -16147,12 +17664,18 @@ snapshots: pumpify: 1.5.1 through2: 2.0.5 + has-bigints@1.1.0: {} + has-flag@4.0.0: {} has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.1 + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -16196,6 +17719,8 @@ snapshots: dependencies: parse-passwd: 1.0.0 + hosted-git-info@2.8.9: {} + hosted-git-info@7.0.2: dependencies: lru-cache: 10.4.3 @@ -16289,6 +17814,13 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-in-the-middle@3.2.0: + dependencies: + acorn: 8.17.0 + acorn-import-attributes: 1.9.5(acorn@8.17.0) + cjs-module-lexer: 2.2.0 + module-details-from-path: 1.0.4 + import-lazy@4.0.0: {} import-meta-resolve@4.2.0: {} @@ -16311,10 +17843,28 @@ snapshots: ini@6.0.0: {} + inquirer@12.11.1(@types/node@22.20.0): + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@22.20.0) + '@inquirer/prompts': 7.10.1(@types/node@22.20.0) + '@inquirer/type': 3.0.10(@types/node@22.20.0) + mute-stream: 2.0.0 + run-async: 4.0.6 + rxjs: 7.8.2 + optionalDependencies: + '@types/node': 22.20.0 + inspect-with-kind@1.0.5: dependencies: kind-of: 6.0.3 + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.4 + side-channel: 1.1.1 + is-alphabetical@2.0.1: {} is-alphanumerical@2.0.1: @@ -16322,12 +17872,39 @@ snapshots: is-alphabetical: 2.0.1 is-decimal: 2.0.1 + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-arrayish@0.2.1: {} + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-builtin-module@3.2.1: + dependencies: + builtin-modules: 3.3.0 + is-builtin-module@5.0.0: dependencies: builtin-modules: 5.2.0 @@ -16336,10 +17913,23 @@ snapshots: dependencies: semver: 7.8.5 + is-callable@1.2.7: {} + is-core-module@2.16.2: dependencies: hasown: 2.0.4 + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-decimal@2.0.1: {} is-deflate@1.0.0: {} @@ -16348,14 +17938,30 @@ snapshots: is-docker@3.0.0: {} + is-document.all@1.0.0: + dependencies: + call-bound: 1.0.4 + is-extglob@2.1.1: {} + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + is-fullwidth-code-point@3.0.0: {} is-fullwidth-code-point@5.1.0: dependencies: get-east-asian-width: 1.6.0 + is-generator-function@1.1.2: + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -16379,10 +17985,19 @@ snapshots: is-interactive@2.0.0: {} + is-map@2.0.3: {} + is-module@1.0.0: {} + is-negative-zero@2.0.3: {} + is-node-process@1.2.0: {} + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-number@7.0.0: {} is-obj@2.0.0: {} @@ -16391,6 +18006,8 @@ snapshots: is-plain-obj@1.1.0: {} + is-plain-obj@2.1.0: {} + is-plain-obj@4.1.0: {} is-plain-object@2.0.4: @@ -16403,10 +18020,23 @@ snapshots: dependencies: '@types/estree': 1.0.9 + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + is-retry-allowed@1.2.0: {} is-retry-allowed@2.2.0: {} + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + is-ssh@1.4.1: dependencies: protocols: 2.0.2 @@ -16417,12 +18047,38 @@ snapshots: is-stream@4.0.1: {} + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.22 + is-unicode-supported@2.1.0: {} + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-windows@1.0.2: {} is-wsl@2.2.0: @@ -16509,6 +18165,8 @@ snapshots: dependencies: argparse: 2.0.1 + jsdoc-type-pratt-parser@4.1.0: {} + jsdom@26.1.0: dependencies: cssstyle: 4.6.0 @@ -16589,6 +18247,8 @@ snapshots: transitivePeerDependencies: - '@noble/hashes' + jsesc@0.5.0: {} + jsesc@3.1.0: {} json-2-csv@5.5.11: @@ -16626,6 +18286,10 @@ snapshots: json-with-bigint@3.5.8: {} + json5@1.0.2: + dependencies: + minimist: 1.2.8 + json5@2.2.3: {} jsonc-parser@3.3.1: {} @@ -16850,6 +18514,8 @@ snapshots: md5-o-matic@0.1.1: {} + mdn-data@2.23.0: {} + mdn-data@2.27.1: {} mdurl@2.0.0: {} @@ -16883,6 +18549,8 @@ snapshots: merge2@1.4.1: {} + meriyah@6.1.4: {} + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -16908,6 +18576,8 @@ snapshots: mimic-response@4.0.0: {} + min-indent@1.0.1: {} + minimatch@10.2.3: dependencies: brace-expansion: 5.0.6 @@ -16916,6 +18586,10 @@ snapshots: dependencies: brace-expansion: 5.0.6 + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.15 + minimatch@5.1.9: dependencies: brace-expansion: 2.1.1 @@ -16943,6 +18617,8 @@ snapshots: modern-ahocorasick@1.1.0: {} + module-details-from-path@1.0.4: {} + motion-dom@12.40.0: dependencies: motion-utils: 12.39.0 @@ -16982,7 +18658,7 @@ snapshots: natural-orderby@5.0.0: {} - next@16.2.9(@babel/core@7.29.7)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): + next@16.2.9(@babel/core@7.29.7)(@opentelemetry/api@1.9.1)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): dependencies: '@next/env': 16.2.9 '@swc/helpers': 0.5.15 @@ -17001,6 +18677,7 @@ snapshots: '@next/swc-linux-x64-musl': 16.2.9 '@next/swc-win32-arm64-msvc': 16.2.9 '@next/swc-win32-x64-msvc': 16.2.9 + '@opentelemetry/api': 1.9.1 babel-plugin-react-compiler: 1.0.0 sharp: 0.34.5 transitivePeerDependencies: @@ -17020,6 +18697,13 @@ snapshots: node-addon-api@7.1.1: {} + node-exports-info@1.6.2: + dependencies: + array.prototype.flatmap: 1.3.3 + es-errors: 1.3.0 + object.entries: 1.1.9 + semver: 6.3.1 + node-html-parser@7.1.0: dependencies: css-select: 5.2.2 @@ -17037,6 +18721,13 @@ snapshots: long-timeout: 0.1.1 sorted-array-functions: 1.3.0 + normalize-package-data@2.5.0: + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.12 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 @@ -17074,6 +18765,42 @@ snapshots: object-keys@1.1.1: {} + object.assign@4.1.7: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.entries@1.1.9: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + observable-callback@1.0.3(rxjs@7.8.2): dependencies: rxjs: 7.8.2 @@ -17159,6 +18886,12 @@ snapshots: outvariant@1.4.3: {} + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + oxc-parser@0.135.0: dependencies: '@oxc-project/types': 0.135.0 @@ -17310,6 +19043,10 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 + parse-imports-exports@0.2.4: + dependencies: + parse-statements: 1.0.11 + parse-json@4.0.0: dependencies: error-ex: 1.3.4 @@ -17336,6 +19073,8 @@ snapshots: dependencies: protocols: 2.0.2 + parse-statements@1.0.11: {} + parse-url@9.2.0: dependencies: '@types/parse-path': 7.1.0 @@ -17436,6 +19175,8 @@ snapshots: dependencies: '@babel/runtime': 7.29.7 + possible-typed-array-names@1.1.0: {} + postcss@8.4.31: dependencies: nanoid: 3.3.13 @@ -17526,6 +19267,8 @@ snapshots: dependencies: performance-now: 2.1.0 + rambda@7.5.0: {} + react-clientside-effect@1.2.8(react@19.2.7): dependencies: '@babel/runtime': 7.29.7 @@ -17658,6 +19401,12 @@ snapshots: read-pkg: 10.1.0 type-fest: 5.7.0 + read-pkg-up@7.0.1: + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + read-pkg@10.1.0: dependencies: '@types/normalize-package-data': 2.4.4 @@ -17666,6 +19415,13 @@ snapshots: type-fest: 5.7.0 unicorn-magic: 0.4.0 + read-pkg@5.2.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 @@ -17710,6 +19466,17 @@ snapshots: redux@5.0.1: {} + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + refractor@5.0.0: dependencies: '@types/hast': 3.0.4 @@ -17725,6 +19492,15 @@ snapshots: regexp-tree@0.1.27: {} + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + regexpu-core@6.4.0: dependencies: regenerate: 1.4.2 @@ -17745,6 +19521,10 @@ snapshots: regjsgen@0.8.0: {} + regjsparser@0.10.0: + dependencies: + jsesc: 0.5.0 + regjsparser@0.13.2: dependencies: jsesc: 3.1.0 @@ -17755,6 +19535,13 @@ snapshots: require-from-string@2.0.2: {} + require-in-the-middle@8.0.1: + dependencies: + debug: 4.4.3(supports-color@8.1.1) + module-details-from-path: 1.0.4 + transitivePeerDependencies: + - supports-color + require-like@0.1.2: {} reselect@5.2.0: {} @@ -17785,6 +19572,15 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + resolve@2.0.0-next.7: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.2 + node-exports-info: 1.6.2 + object-keys: 1.1.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + responselike@3.0.0: dependencies: lowercase-keys: 3.0.0 @@ -17892,6 +19688,8 @@ snapshots: run-applescript@7.1.0: {} + run-async@4.0.6: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -17912,10 +19710,29 @@ snapshots: dependencies: mri: 1.2.0 + safe-array-concat@1.1.4: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + safer-buffer@2.1.2: {} sanity-plugin-media@4.3.6(@emotion/is-prop-valid@1.4.0)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react-is@19.2.7)(react@19.2.7)(sanity@6.1.0(@emotion/is-prop-valid@1.4.0)(@oclif/core@4.11.7)(@sanity/cli-core@packages+@sanity+cli-core)(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(styled-components@6.4.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(typescript@5.9.3))(styled-components@6.4.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7)): @@ -18337,6 +20154,8 @@ snapshots: dependencies: commander: 6.2.1 + semifies@1.0.0: {} + semver-regex@4.0.5: {} semver-truncate@3.0.0: @@ -18368,6 +20187,19 @@ snapshots: gopd: 1.2.0 has-property-descriptors: 1.0.2 + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + sha256-uint8array@0.10.7: {} shallow-clone@3.0.1: @@ -18414,6 +20246,34 @@ snapshots: shebang-regex@3.0.0: {} + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} signal-exit@4.1.0: {} @@ -18493,6 +20353,11 @@ snapshots: spdx-exceptions: 2.5.0 spdx-license-ids: 3.0.23 + spdx-expression-parse@4.0.0: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.23 + spdx-license-ids@3.0.23: {} speakingurl@14.0.1: {} @@ -18501,12 +20366,19 @@ snapshots: stable-hash-x@0.2.0: {} + stable-hash@0.0.5: {} + stackback@0.0.2: {} std-env@4.1.0: {} stdin-discarder@0.3.2: {} + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + stream-shift@1.0.3: {} streamx@2.28.0: @@ -18539,6 +20411,30 @@ snapshots: get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 + string.prototype.trim@1.2.11: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + has-property-descriptors: 1.0.2 + safe-regex-test: 1.1.0 + + string.prototype.trimend@1.0.10: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -18566,8 +20462,14 @@ snapshots: strip-final-newline@4.0.0: {} + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + strip-indent@4.1.1: {} + strip-json-comments@3.1.1: {} + strip-json-comments@5.0.3: {} strnum@2.4.1: @@ -18773,12 +20675,21 @@ snapshots: optionalDependencies: typescript: 5.9.3 + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + tsconfig-paths@4.2.0: dependencies: json5: 2.2.3 minimist: 1.2.8 strip-bom: 3.0.0 + tsheredoc@1.0.1: {} + tslib@2.8.1: {} tsx@4.22.4: @@ -18806,14 +20717,53 @@ snapshots: dependencies: prelude-ls: 1.2.1 + type-fest@0.20.2: {} + type-fest@0.21.3: {} + type-fest@0.6.0: {} + + type-fest@0.8.1: {} + type-fest@4.41.0: {} type-fest@5.7.0: dependencies: tagged-tag: 1.0.0 + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.8: + dependencies: + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + typeid-js@0.3.0: dependencies: uuidv7: 0.4.4 @@ -18843,6 +20793,13 @@ snapshots: unbash@4.0.1: {} + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + unbzip2-stream@1.4.3: dependencies: buffer: 5.7.1 @@ -19069,7 +21026,7 @@ snapshots: tsx: 4.22.4 yaml: 2.9.0 - vitest@4.1.9(@types/node@22.20.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)): + vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@22.20.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.9 '@vitest/mocker': 4.1.9(vite@8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) @@ -19092,13 +21049,14 @@ snapshots: vite: 8.1.0(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: + '@opentelemetry/api': 1.9.1 '@types/node': 22.20.0 '@vitest/coverage-istanbul': 4.1.9(vitest@4.1.9) jsdom: 29.1.1(@noble/hashes@2.2.0) transitivePeerDependencies: - msw - vitest@4.1.9(@types/node@26.0.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@26.0.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)): + vitest@4.1.9(@opentelemetry/api@1.9.1)(@types/node@26.0.0)(@vitest/coverage-istanbul@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@8.1.0(@types/node@26.0.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.9 '@vitest/mocker': 4.1.9(vite@8.1.0(@types/node@26.0.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) @@ -19121,6 +21079,7 @@ snapshots: vite: 8.1.0(@types/node@26.0.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: + '@opentelemetry/api': 1.9.1 '@types/node': 26.0.0 '@vitest/coverage-istanbul': 4.1.9(vitest@4.1.9) jsdom: 29.1.1(@noble/hashes@2.2.0) @@ -19166,6 +21125,47 @@ snapshots: transitivePeerDependencies: - '@noble/hashes' + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.2.0 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.22 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.22: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + which@1.3.1: dependencies: isexe: 2.0.0 @@ -19246,8 +21246,17 @@ snapshots: yaml@2.9.0: {} + yargs-parser@20.2.9: {} + yargs-parser@21.1.1: {} + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + yargs@17.7.3: dependencies: cliui: 8.0.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 6976418939..9c8fab86d7 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -46,6 +46,7 @@ catalog: node-pty: ^1.1.0 dotenv: ^17.4.2 strip-ansi: ^7.1.0 + '@heroku-cli/test-utils': ^1.0.0 # CLI Framework '@oclif/core': ^4.11.7 From 1f3802e5f195c3e21d685fb166e43c7367028981 Mon Sep 17 00:00:00 2001 From: filmaj Date: Sat, 27 Jun 2026 15:01:59 -0400 Subject: [PATCH 2/7] test(chore): try a single global mock class and set of mocks? --- .../commands/datasets/__tests__/copy.test.ts | 9 +- .../@sanity/cli/test/mockSanityCommand.ts | 137 +++++++++--------- 2 files changed, 68 insertions(+), 78 deletions(-) diff --git a/packages/@sanity/cli/src/commands/datasets/__tests__/copy.test.ts b/packages/@sanity/cli/src/commands/datasets/__tests__/copy.test.ts index 7a652e6317..dbea8748e7 100644 --- a/packages/@sanity/cli/src/commands/datasets/__tests__/copy.test.ts +++ b/packages/@sanity/cli/src/commands/datasets/__tests__/copy.test.ts @@ -65,6 +65,9 @@ vi.mock('@sanity/cli-core/ux', async () => { } }) +const {CopyDatasetCommand} = await import('../copy.js') +const {createCmdInstance, mocks} = await createMockSanityCommand(CopyDatasetCommand) + const TEST_PROJECT_ID = '1337newb' function createMockDataset(name: string) { return { @@ -79,12 +82,6 @@ function createMockDataset(name: string) { } } -const {createCmdInstance, mocks} = await createMockSanityCommand( - import.meta.dirname, - '../copy.js', - 'CopyDatasetCommand', -) - describe('#dataset:copy', () => { beforeEach(() => { mocks.SanityCmdGetProjectId.mockResolvedValue(TEST_PROJECT_ID) diff --git a/packages/@sanity/cli/test/mockSanityCommand.ts b/packages/@sanity/cli/test/mockSanityCommand.ts index 9915cac662..4d39982f65 100644 --- a/packages/@sanity/cli/test/mockSanityCommand.ts +++ b/packages/@sanity/cli/test/mockSanityCommand.ts @@ -1,87 +1,80 @@ -import {join} from 'node:path' - -import {getConfig} from '@heroku-cli/test-utils' +import {type GenericCmd, getConfig} from '@heroku-cli/test-utils' import {Command, type Interfaces} from '@oclif/core' import {type Output, type SanityCommandInterface} from '@sanity/cli-core' import {vi} from 'vitest' +// Get cached OCLIF config right on import +const oclifConfig = await getConfig() + interface CommandInstance { /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ run(): Promise } - -export async function createMockSanityCommand( - dirname: string, - cmdImportPath: string, - cmdExport: string, -) { - const mocks = { - // Mock OCLIF Command methods - OclifCmdExit: vi.fn((_code?: number) => undefined as never), - // Mock SanityCommand methods - SanityCmdGetCliConfig: vi.fn(), - SanityCmdGetProjectId: vi.fn(), - SanityCmdGetProjectRoot: vi.fn(), - SanityCmdIsUnattended: vi.fn(), - SanityCmdOutputError: vi.fn(() => undefined as never), - SanityCmdOutputLog: vi.fn(), - SanityCmdOutputWarn: vi.fn(), - SanityCmdResolveIsInteractive: vi.fn(), +const mocks = { + // Mock OCLIF Command methods + OclifCmdExit: vi.fn((_code?: number) => undefined as never), + // Mock SanityCommand methods + SanityCmdGetCliConfig: vi.fn(), + SanityCmdGetProjectId: vi.fn(), + SanityCmdGetProjectRoot: vi.fn(), + SanityCmdIsUnattended: vi.fn(), + SanityCmdOutputError: vi.fn(() => undefined as never), + SanityCmdOutputLog: vi.fn(), + SanityCmdOutputWarn: vi.fn(), + SanityCmdResolveIsInteractive: vi.fn(), +} +class MockedSanityCommand extends Command implements SanityCommandInterface { + args = {} + flags = {} + output: Output = { + error: mocks.SanityCmdOutputError, + log: mocks.SanityCmdOutputLog, + warn: mocks.SanityCmdOutputWarn, + } + public exit(code?: number) { + return mocks.OclifCmdExit(code) + } + public async getCliConfig() { + return mocks.SanityCmdGetCliConfig() + } + public async getProjectId(opts?: Record) { + return mocks.SanityCmdGetProjectId(opts) } - class MockedSanityCommand extends Command implements SanityCommandInterface { - args = {} - flags = {} - output: Output = { - error: mocks.SanityCmdOutputError, - log: mocks.SanityCmdOutputLog, - warn: mocks.SanityCmdOutputWarn, - } - public exit(code?: number) { - return mocks.OclifCmdExit(code) - } - public async getCliConfig() { - return mocks.SanityCmdGetCliConfig() - } - public async getProjectId(opts?: Record) { - return mocks.SanityCmdGetProjectId(opts) - } - public async getProjectRoot() { - return mocks.SanityCmdGetProjectRoot() - } - // Same implementation as SanityCommand's, minus telemetry - public async init(): Promise { - const {args, flags} = await this.parse({ - args: this.ctor.args, - baseFlags: super.ctor.baseFlags, - enableJsonFlag: this.ctor.enableJsonFlag, - flags: this.ctor.flags, - strict: this.ctor.strict, - }) + public async getProjectRoot() { + return mocks.SanityCmdGetProjectRoot() + } + // Same implementation as SanityCommand's, minus telemetry + public async init(): Promise { + const {args, flags} = await this.parse({ + args: this.ctor.args, + baseFlags: super.ctor.baseFlags, + enableJsonFlag: this.ctor.enableJsonFlag, + flags: this.ctor.flags, + strict: this.ctor.strict, + }) - this.args = args - this.flags = flags + this.args = args + this.flags = flags - await super.init() - } - public isUnattended() { - return mocks.SanityCmdIsUnattended() - } - public resolveIsInteractive() { - return mocks.SanityCmdResolveIsInteractive() - } - public async run() {} + await super.init() + } + public isUnattended() { + return mocks.SanityCmdIsUnattended() } - vi.doMock('@sanity/cli-core', async (importOriginal) => { - const actual = await importOriginal() - return { - ...actual, - SanityCommand: MockedSanityCommand, - } - }) - const oclifConfig = await getConfig() - // eslint-disable-next-line no-restricted-syntax - const cmdModule = await import(join(dirname, cmdImportPath)) - const CommandClass = cmdModule[cmdExport] + public resolveIsInteractive() { + return mocks.SanityCmdResolveIsInteractive() + } + public async run() {} +} +vi.mock('@sanity/cli-core', async (importOriginal) => { + const actual = await importOriginal() + return { + ...actual, + SanityCommand: MockedSanityCommand, + } +}) + +export async function createMockSanityCommand(CommandClass: GenericCmd) { // Cast to constructor type to handle protected constructors const Ctor = CommandClass as {new (argv: string[], config: Interfaces.Config): CommandInstance} return { From f44816e05b4fb9bbfa806a315d98914550092475 Mon Sep 17 00:00:00 2001 From: filmaj Date: Sat, 27 Jun 2026 15:07:11 -0400 Subject: [PATCH 3/7] test(chore): keep converting all mocksanity command classes --- .../{doctor.unit.test.ts => doctor.test.ts} | 15 ++++----------- packages/@sanity/cli/test/mockSanityCommand.ts | 4 ++-- 2 files changed, 6 insertions(+), 13 deletions(-) rename packages/@sanity/cli/src/commands/__tests__/{doctor.unit.test.ts => doctor.test.ts} (86%) diff --git a/packages/@sanity/cli/src/commands/__tests__/doctor.unit.test.ts b/packages/@sanity/cli/src/commands/__tests__/doctor.test.ts similarity index 86% rename from packages/@sanity/cli/src/commands/__tests__/doctor.unit.test.ts rename to packages/@sanity/cli/src/commands/__tests__/doctor.test.ts index 225df7b574..c250a5c2a5 100644 --- a/packages/@sanity/cli/src/commands/__tests__/doctor.unit.test.ts +++ b/packages/@sanity/cli/src/commands/__tests__/doctor.test.ts @@ -1,15 +1,6 @@ import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest' import {createMockSanityCommand} from '../../../test/mockSanityCommand.js' - -// First: create the mocks and mocked SanityCommand class -const {MockedSanityCommand, mocks} = createMockSanityCommand() -// Second: install the mock on cli-core -vi.mock('@sanity/cli-core', async (importOriginal) => { - const actual = await importOriginal() - return {...actual, SanityCommand: MockedSanityCommand} -}) - // Third: mock doctor command imports const mockDoctorChecks = {cli: vi.fn()} // coupled to actions/doctor/checks/index.js const mockKnownChecks = Object.keys(mockDoctorChecks) @@ -24,6 +15,8 @@ vi.mock('../../actions/doctor/runDoctorChecks.js', () => ({ // Finally, import the module under test: doctor command const {DoctorCommand} = await import('../doctor.js') +// First: create the mocks and mocked SanityCommand class +const {createCmdInstance, mocks} = await createMockSanityCommand(DoctorCommand) describe('doctor command', () => { beforeEach(() => { @@ -41,7 +34,7 @@ describe('doctor command', () => { const checkResults = {checks: [passingCheck], summary: {passed: 420}} mockRunDoctorChecks.mockResolvedValue(checkResults) - await DoctorCommand.run() + await createCmdInstance().run() expect(mocks.SanityCmdOutputLog).toHaveBeenCalledWith(expect.stringContaining('Running diag')) expect(mocks.SanityCmdOutputLog).toHaveBeenCalledWith( @@ -58,7 +51,7 @@ describe('doctor command', () => { const checkResults = {checks: [passingCheck], summary: {passed: 420}} mockRunDoctorChecks.mockResolvedValue(checkResults) - await DoctorCommand.run(['--json']) + await createCmdInstance(['--json']).run() expect(mocks.SanityCmdOutputLog).toHaveBeenCalledWith( expect.stringContaining(JSON.stringify(checkResults, null, 2)), diff --git a/packages/@sanity/cli/test/mockSanityCommand.ts b/packages/@sanity/cli/test/mockSanityCommand.ts index 4d39982f65..afe032be39 100644 --- a/packages/@sanity/cli/test/mockSanityCommand.ts +++ b/packages/@sanity/cli/test/mockSanityCommand.ts @@ -78,8 +78,8 @@ export async function createMockSanityCommand(CommandClass: GenericCmd) { // Cast to constructor type to handle protected constructors const Ctor = CommandClass as {new (argv: string[], config: Interfaces.Config): CommandInstance} return { - createCmdInstance: (args: string[]) => { - return new Ctor(args, oclifConfig) + createCmdInstance: (args?: string[]) => { + return new Ctor(args || [], oclifConfig) }, mocks, } From 3ab975d0850c2f642dcdc861e0577462fd2f9de7 Mon Sep 17 00:00:00 2001 From: filmaj Date: Sat, 27 Jun 2026 15:18:27 -0400 Subject: [PATCH 4/7] test(chore): keep converting all mocksanity command classes --- .../datasets/__tests__/import.test.ts | 62 ++++++++----------- .../schemas/__tests__/extract.test.ts | 15 ++--- .../telemetry/__tests__/disable.test.ts | 23 +++---- .../telemetry/__tests__/enable.test.ts | 23 +++---- .../telemetry/__tests__/status.test.ts | 18 ++---- .../@sanity/cli/test/mockSanityCommand.ts | 2 + 6 files changed, 52 insertions(+), 91 deletions(-) diff --git a/packages/@sanity/cli/src/commands/datasets/__tests__/import.test.ts b/packages/@sanity/cli/src/commands/datasets/__tests__/import.test.ts index 702c360349..3f0bad28ae 100644 --- a/packages/@sanity/cli/src/commands/datasets/__tests__/import.test.ts +++ b/packages/@sanity/cli/src/commands/datasets/__tests__/import.test.ts @@ -5,19 +5,6 @@ import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest' import {createMockSanityCommand} from '../../../../test/mockSanityCommand.js' import {NEW_DATASET_VALUE} from '../../../prompts/promptForDataset.js' -// First: create the mocks and mocked SanityCommand class -const {MockedSanityCommand, mocks} = createMockSanityCommand() -const mockGetProjectCliClient = vi.hoisted(() => vi.fn().mockResolvedValue({})) -// Second: install the mock on cli-core -vi.mock('@sanity/cli-core', async (importOriginal) => { - const actual = await importOriginal() - return { - ...actual, - getProjectCliClient: mockGetProjectCliClient, - SanityCommand: MockedSanityCommand, - } -}) - // Third: mock dataset import command imports const mockPromptForDataset = vi.hoisted(() => vi.fn()) const mockPromptForDatasetName = vi.hoisted(() => vi.fn()) @@ -66,6 +53,7 @@ vi.mock('node:fs', async (importOriginal) => { // Finally, import the module under test: dataset import command const {ImportDatasetCommand} = await import('../import.js') +const {createCmdInstance, mocks} = await createMockSanityCommand(ImportDatasetCommand) const TEST_DATASET_NAME = 'test-dataset' const TEST_PROJECT_ID = '1337newb' @@ -91,7 +79,7 @@ describe('#dataset:import', () => { const fakeReadStream = Readable.from([]) mockCreateReadStream.mockReturnValue(fakeReadStream) - await ImportDatasetCommand.run(BASE_FLAGS) + await createCmdInstance(BASE_FLAGS).run() expect(mocks.SanityCmdOutputLog).toHaveBeenCalledWith( expect.stringContaining('Done! Imported'), @@ -123,7 +111,7 @@ describe('#dataset:import', () => { const fakeReadStream = Readable.from([]) mockRequest.mockResolvedValue({body: fakeReadStream}) - await ImportDatasetCommand.run(['https://example.com/data.ndjson', ...BASE_FLAGS.slice(1)]) + await createCmdInstance(['https://example.com/data.ndjson', ...BASE_FLAGS.slice(1)]).run() expect(mocks.SanityCmdOutputLog).toHaveBeenCalledWith( expect.stringContaining('Done! Imported'), @@ -137,7 +125,7 @@ describe('#dataset:import', () => { const sanityImportObj = {numDocs: 3, warnings: []} mockSanityImport.mockResolvedValueOnce(sanityImportObj) - await ImportDatasetCommand.run(['-', ...BASE_FLAGS.slice(1)]) + await createCmdInstance(['-', ...BASE_FLAGS.slice(1)]).run() expect(mocks.SanityCmdOutputLog).toHaveBeenCalledWith( expect.stringContaining('Done! Imported'), @@ -150,8 +138,8 @@ describe('#dataset:import', () => { describe('dataset resolution', () => { test('uses --dataset flag', async () => { - await ImportDatasetCommand.run(BASE_FLAGS) - expect(mockGetProjectCliClient).toHaveBeenCalledWith( + await createCmdInstance(BASE_FLAGS).run() + expect(mocks.SanityGetProjectCliClient).toHaveBeenCalledWith( expect.objectContaining({dataset: TEST_DATASET_NAME}), ) }) @@ -163,7 +151,7 @@ describe('#dataset:import', () => { '--token', 'test-token', ]) - expect(mockGetProjectCliClient).toHaveBeenCalledWith( + expect(mocks.SanityGetProjectCliClient).toHaveBeenCalledWith( expect.objectContaining({dataset: 'positional-dataset'}), ) expect(mocks.SanityCmdOutputWarn).toHaveBeenCalledWith( @@ -183,7 +171,7 @@ describe('#dataset:import', () => { 'test-token', ]) - expect(mockGetProjectCliClient).toHaveBeenCalledWith( + expect(mocks.SanityGetProjectCliClient).toHaveBeenCalledWith( expect.objectContaining({dataset: 'flag-dataset'}), ) expect(mocks.SanityCmdOutputWarn).not.toHaveBeenCalledWith( @@ -201,7 +189,7 @@ describe('#dataset:import', () => { const sanityImportObj = {numDocs: 3, warnings: []} mockSanityImport.mockResolvedValueOnce(sanityImportObj) - await ImportDatasetCommand.run(['test-source.ndjson', '--token', 'test-token']) + await createCmdInstance(['test-source.ndjson', '--token', 'test-token']).run() expect(mockListDatasets).toHaveBeenCalledWith(TEST_PROJECT_ID) expect(mockPromptForDataset).toHaveBeenCalledWith({ @@ -225,7 +213,7 @@ describe('#dataset:import', () => { const sanityImportObj = {numDocs: 3, warnings: []} mockSanityImport.mockResolvedValueOnce(sanityImportObj) - await ImportDatasetCommand.run(['test-source.ndjson', '--token', 'test-token']) + await createCmdInstance(['test-source.ndjson', '--token', 'test-token']).run() expect(mockPromptForDatasetName).toHaveBeenCalled() expect(mockCreateDataset).toHaveBeenCalledWith({ @@ -243,7 +231,7 @@ describe('#dataset:import', () => { describe('error handling', () => { test('errors when no dataset is provided in non-interactive mode', async () => { mocks.SanityCmdIsUnattended.mockReturnValue(true) - await ImportDatasetCommand.run(['test-source.ndjson', '--token', 'test-token']) + await createCmdInstance(['test-source.ndjson', '--token', 'test-token']).run() expect(mockListDatasets).not.toHaveBeenCalled() expect(mocks.SanityCmdOutputError).toHaveBeenCalledWith( @@ -260,7 +248,7 @@ describe('#dataset:import', () => { mockPromptForDatasetName.mockResolvedValueOnce(newDatasetName) mockCreateDataset.mockRejectedValueOnce(new Error('Dataset creation failed')) - await ImportDatasetCommand.run(['test-source.ndjson', '--token', 'test-token']) + await createCmdInstance(['test-source.ndjson', '--token', 'test-token']).run() expect(mocks.SanityCmdOutputError).toHaveBeenCalledWith( expect.stringContaining(`Failed to create dataset ${newDatasetName}`), @@ -272,7 +260,7 @@ describe('#dataset:import', () => { const err = 'Connection timeout' mockSanityImport.mockRejectedValueOnce(new Error(err)) - await ImportDatasetCommand.run(BASE_FLAGS) + await createCmdInstance(BASE_FLAGS).run() expect(mocks.SanityCmdOutputError).toHaveBeenCalledWith(expect.stringContaining(err), { exit: 1, @@ -289,7 +277,7 @@ describe('#dataset:import', () => { throw new Error(err) }) - await ImportDatasetCommand.run(BASE_FLAGS) + await createCmdInstance(BASE_FLAGS).run() expect(mocks.SanityCmdOutputError).toHaveBeenCalledWith(expect.stringContaining(err), { exit: 1, @@ -305,7 +293,7 @@ describe('#dataset:import', () => { err.name = 'ReplacementCharError' mockSanityImport.mockRejectedValueOnce(err) - await ImportDatasetCommand.run(BASE_FLAGS) + await createCmdInstance(BASE_FLAGS).run() expect(mocks.SanityCmdOutputError).toHaveBeenCalledWith( expect.stringContaining(err.message), @@ -320,7 +308,7 @@ describe('#dataset:import', () => { test('--replace sets createOrReplace operation', async () => { mockSanityImport.mockResolvedValueOnce({numDocs: 10, warnings: []}) - await ImportDatasetCommand.run([...BASE_FLAGS, '--replace']) + await createCmdInstance([...BASE_FLAGS, '--replace']).run() expect(mockSanityImport).toHaveBeenCalledWith( expect.anything(), @@ -334,7 +322,7 @@ describe('#dataset:import', () => { test('--missing sets createIfNotExists operation', async () => { mockSanityImport.mockResolvedValueOnce({numDocs: 10, warnings: []}) - await ImportDatasetCommand.run([...BASE_FLAGS, '--missing']) + await createCmdInstance([...BASE_FLAGS, '--missing']).run() expect(mockSanityImport).toHaveBeenCalledWith( expect.anything(), @@ -348,7 +336,7 @@ describe('#dataset:import', () => { test('--asset-concurrency is passed through', async () => { mockSanityImport.mockResolvedValueOnce({numDocs: 10, warnings: []}) - await ImportDatasetCommand.run([...BASE_FLAGS, '--asset-concurrency', '4']) + await createCmdInstance([...BASE_FLAGS, '--asset-concurrency', '4']).run() expect(mockSanityImport).toHaveBeenCalledWith( expect.anything(), @@ -361,9 +349,9 @@ describe('#dataset:import', () => { test('--token is passed to client creation', async () => { mockSanityImport.mockResolvedValueOnce({numDocs: 0, warnings: []}) - await ImportDatasetCommand.run(BASE_FLAGS) + await createCmdInstance(BASE_FLAGS).run() - expect(mockGetProjectCliClient).toHaveBeenCalledWith({ + expect(mocks.SanityGetProjectCliClient).toHaveBeenCalledWith({ apiVersion: 'v2025-02-19', dataset: TEST_DATASET_NAME, projectId: TEST_PROJECT_ID, @@ -375,9 +363,9 @@ describe('#dataset:import', () => { test('omits passing token to client creation when --token is not provided', async () => { mockSanityImport.mockResolvedValueOnce({numDocs: 5, warnings: []}) - await ImportDatasetCommand.run(BASE_FLAGS.slice(0, 3)) + await createCmdInstance(BASE_FLAGS.slice(0, 3)).run() - expect(mockGetProjectCliClient).toHaveBeenCalledWith({ + expect(mocks.SanityGetProjectCliClient).toHaveBeenCalledWith({ apiVersion: 'v2025-02-19', dataset: TEST_DATASET_NAME, projectId: TEST_PROJECT_ID, @@ -390,7 +378,7 @@ describe('#dataset:import', () => { test('passes onProgress callback to sanityImport', async () => { mockSanityImport.mockResolvedValueOnce({numDocs: 10, warnings: []}) - await ImportDatasetCommand.run(BASE_FLAGS) + await createCmdInstance(BASE_FLAGS).run() expect(mockSanityImport).toHaveBeenCalledWith( expect.anything(), @@ -410,7 +398,7 @@ describe('#dataset:import', () => { return {numDocs: 20, warnings: []} }) - await ImportDatasetCommand.run(BASE_FLAGS) + await createCmdInstance(BASE_FLAGS).run() expect(mocks.SanityCmdOutputLog).toHaveBeenCalledWith( expect.stringContaining('Done! Imported'), @@ -436,7 +424,7 @@ describe('#dataset:import', () => { ], }) - await ImportDatasetCommand.run(BASE_FLAGS) + await createCmdInstance(BASE_FLAGS).run() expect(mocks.SanityCmdOutputWarn).toHaveBeenCalledWith( expect.stringContaining('Failed to import the following asset'), diff --git a/packages/@sanity/cli/src/commands/schemas/__tests__/extract.test.ts b/packages/@sanity/cli/src/commands/schemas/__tests__/extract.test.ts index 4cbfc8e445..2b81266bbe 100644 --- a/packages/@sanity/cli/src/commands/schemas/__tests__/extract.test.ts +++ b/packages/@sanity/cli/src/commands/schemas/__tests__/extract.test.ts @@ -2,14 +2,6 @@ import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest' import {createMockSanityCommand} from '../../../../test/mockSanityCommand.js' -// First: create the mocks and mocked SanityCommand class -const {MockedSanityCommand, mocks} = createMockSanityCommand() -// Second: install the mock on cli-core -vi.mock('@sanity/cli-core', async (importOriginal) => { - const actual = await importOriginal() - return {...actual, SanityCommand: MockedSanityCommand} -}) - // Third: mock extract schema command imports const mockExtractSchema = vi.hoisted(() => vi.fn()) const mockWatchExtractSchema = vi.hoisted(() => vi.fn()) @@ -25,6 +17,7 @@ vi.mock('../../../actions/schema/watchExtractSchema.js', () => ({ // Finally, import the module under test: extract schema command const {ExtractSchemaCommand} = await import('../extract.js') +const {createCmdInstance, mocks} = await createMockSanityCommand(ExtractSchemaCommand) describe('schema extract command', () => { beforeEach(() => { @@ -40,14 +33,14 @@ describe('schema extract command', () => { }) test('schema command with no args should invoke extractSchema module', async () => { - await ExtractSchemaCommand.run([]) + await createCmdInstance([]).run() expect(mockExtractSchema).toHaveBeenCalledOnce() }) test('schema command with watch flag should invoke watchExtractSchema module', async () => { - await ExtractSchemaCommand.run(['--watch']) + await createCmdInstance(['--watch']).run() expect(mockWatchExtractSchema).toHaveBeenCalledOnce() }) test('schema command bad flags', async () => { - await expect(ExtractSchemaCommand.run(['--poop'])).rejects.toThrow('Nonexistent flag') + await expect(createCmdInstance(['--poop']).run()).rejects.toThrow('Nonexistent flag') }) }) diff --git a/packages/@sanity/cli/src/commands/telemetry/__tests__/disable.test.ts b/packages/@sanity/cli/src/commands/telemetry/__tests__/disable.test.ts index 5758b339f6..7d06c673c4 100644 --- a/packages/@sanity/cli/src/commands/telemetry/__tests__/disable.test.ts +++ b/packages/@sanity/cli/src/commands/telemetry/__tests__/disable.test.ts @@ -2,14 +2,6 @@ import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest' import {createMockSanityCommand} from '../../../../test/mockSanityCommand.js' -// First: create the mocks and mocked SanityCommand class -const {MockedSanityCommand, mocks: cmdMocks} = createMockSanityCommand() -// Second: install the mock on cli-core -vi.mock('@sanity/cli-core', async (importOriginal) => { - const actual = await importOriginal() - return {...actual, SanityCommand: MockedSanityCommand} -}) - // Third: mock telemetry enable command imports const mockSetConsent = vi.hoisted(() => vi.fn()) const mockLearnMore = vi.hoisted(() => vi.fn()) @@ -21,6 +13,7 @@ vi.mock('../../../actions/telemetry/telemetryLearnMoreMessage.js', () => ({ // Finally, import the module under test: telemetry disable command const {Disable} = await import('../disable.js') +const {createCmdInstance, mocks} = await createMockSanityCommand(Disable) describe('telemetry disable command', () => { beforeEach(() => { @@ -33,24 +26,24 @@ describe('telemetry disable command', () => { test('should call setConsent action with status=denied and log returned message', async () => { mockSetConsent.mockResolvedValue({message: 'heya'}) - await Disable.run([]) + await createCmdInstance([]).run() expect(mockSetConsent).toHaveBeenCalledWith({status: 'denied'}) - expect(cmdMocks.SanityCmdOutputLog).toHaveBeenCalledWith('heya') + expect(mocks.SanityCmdOutputLog).toHaveBeenCalledWith('heya') }) test('should call learnMore action if setConsent status returns changed and output learn more action response', async () => { mockSetConsent.mockResolvedValue({changed: true, message: 'heya'}) mockLearnMore.mockReturnValue('learn more') - await Disable.run([]) + await createCmdInstance([]).run() expect(mockLearnMore).toHaveBeenCalledWith('denied') - expect(cmdMocks.SanityCmdOutputLog).toHaveBeenCalledWith(expect.stringContaining('learn more')) + expect(mocks.SanityCmdOutputLog).toHaveBeenCalledWith(expect.stringContaining('learn more')) }) test('rejects invalid flags', async () => { - await expect(Disable.run(['--poop'])).rejects.toThrow('Nonexistent flag') + await expect(createCmdInstance(['--poop']).run()).rejects.toThrow('Nonexistent flag') }) test('outputs error thrown by setConsent', async () => { mockSetConsent.mockRejectedValue(new Error('boom')) - await Disable.run([]) - expect(cmdMocks.SanityCmdOutputError).toHaveBeenCalledWith( + await createCmdInstance([]).run() + expect(mocks.SanityCmdOutputError).toHaveBeenCalledWith( 'boom', expect.objectContaining({exit: 1}), ) diff --git a/packages/@sanity/cli/src/commands/telemetry/__tests__/enable.test.ts b/packages/@sanity/cli/src/commands/telemetry/__tests__/enable.test.ts index ad63e33ff7..57b2e1d4f8 100644 --- a/packages/@sanity/cli/src/commands/telemetry/__tests__/enable.test.ts +++ b/packages/@sanity/cli/src/commands/telemetry/__tests__/enable.test.ts @@ -2,14 +2,6 @@ import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest' import {createMockSanityCommand} from '../../../../test/mockSanityCommand.js' -// First: create the mocks and mocked SanityCommand class -const {MockedSanityCommand, mocks: cmdMocks} = createMockSanityCommand() -// Second: install the mock on cli-core -vi.mock('@sanity/cli-core', async (importOriginal) => { - const actual = await importOriginal() - return {...actual, SanityCommand: MockedSanityCommand} -}) - // Third: mock telemetry enable command imports const mockSetConsent = vi.hoisted(() => vi.fn()) const mockLearnMore = vi.hoisted(() => vi.fn()) @@ -21,6 +13,7 @@ vi.mock('../../../actions/telemetry/telemetryLearnMoreMessage.js', () => ({ // Finally, import the module under test: telemetry enable command const {Enable} = await import('../enable.js') +const {createCmdInstance, mocks} = await createMockSanityCommand(Enable) describe('telemetry enable command', () => { beforeEach(() => { @@ -33,24 +26,24 @@ describe('telemetry enable command', () => { test('should call setConsent action with status=granted and log returned message', async () => { mockSetConsent.mockResolvedValue({message: 'heya'}) - await Enable.run([]) + await createCmdInstance([]).run() expect(mockSetConsent).toHaveBeenCalledWith({status: 'granted'}) - expect(cmdMocks.SanityCmdOutputLog).toHaveBeenCalledWith('heya') + expect(mocks.SanityCmdOutputLog).toHaveBeenCalledWith('heya') }) test('should call learnMore action if setConsent status returns changed and output learn more action response', async () => { mockSetConsent.mockResolvedValue({changed: true, message: 'heya'}) mockLearnMore.mockReturnValue('learn more') - await Enable.run([]) + await createCmdInstance([]).run() expect(mockLearnMore).toHaveBeenCalledWith('granted') - expect(cmdMocks.SanityCmdOutputLog).toHaveBeenCalledWith(expect.stringContaining('learn more')) + expect(mocks.SanityCmdOutputLog).toHaveBeenCalledWith(expect.stringContaining('learn more')) }) test('rejects invalid flags', async () => { - await expect(Enable.run(['--poop'])).rejects.toThrow('Nonexistent flag') + await expect(createCmdInstance(['--poop']).run()).rejects.toThrow('Nonexistent flag') }) test('outputs error thrown by setConsent', async () => { mockSetConsent.mockRejectedValue(new Error('boom')) - await Enable.run([]) - expect(cmdMocks.SanityCmdOutputError).toHaveBeenCalledWith( + await createCmdInstance([]).run() + expect(mocks.SanityCmdOutputError).toHaveBeenCalledWith( 'boom', expect.objectContaining({exit: 1}), ) diff --git a/packages/@sanity/cli/src/commands/telemetry/__tests__/status.test.ts b/packages/@sanity/cli/src/commands/telemetry/__tests__/status.test.ts index e3709838b1..b04ee8a8ef 100644 --- a/packages/@sanity/cli/src/commands/telemetry/__tests__/status.test.ts +++ b/packages/@sanity/cli/src/commands/telemetry/__tests__/status.test.ts @@ -1,15 +1,6 @@ import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest' import {createMockSanityCommand} from '../../../../test/mockSanityCommand.js' - -// First: create the mocks and mocked SanityCommand class -const {MockedSanityCommand, mocks: cmdMocks} = createMockSanityCommand() -// Second: install the mock on cli-core -vi.mock('@sanity/cli-core', async (importOriginal) => { - const actual = await importOriginal() - return {...actual, SanityCommand: MockedSanityCommand} -}) - // Third: mock telemetry status command imports const mockResolveConsent = vi.hoisted(() => vi.fn()) const mockLearnMore = vi.hoisted(() => vi.fn()) @@ -25,6 +16,7 @@ vi.mock('../../../actions/telemetry/getStatusMessage.js', () => ({getStatusMessa // Finally, import the module under test: telemetry status command const {Status} = await import('../status.js') +const {createCmdInstance, mocks} = await createMockSanityCommand(Status) describe('telemetry enable command', () => { beforeEach(() => { @@ -43,13 +35,13 @@ describe('telemetry enable command', () => { mockResolveConsent.mockResolvedValue(consentInfo) mockStatusMsg.mockReturnValue(statusMsg) mockLearnMore.mockReturnValue(learnMoreMsg) - await Status.run([]) + await createCmdInstance([]).run() expect(mockStatusMsg).toHaveBeenCalledWith(consentInfo) expect(mockLearnMore).toHaveBeenCalledWith(consentInfo.status) - expect(cmdMocks.SanityCmdOutputLog).toHaveBeenCalledWith(statusMsg) - expect(cmdMocks.SanityCmdOutputLog).toHaveBeenCalledWith(expect.stringContaining(learnMoreMsg)) + expect(mocks.SanityCmdOutputLog).toHaveBeenCalledWith(statusMsg) + expect(mocks.SanityCmdOutputLog).toHaveBeenCalledWith(expect.stringContaining(learnMoreMsg)) }) test('rejects invalid flags', async () => { - await expect(Status.run(['--poop'])).rejects.toThrow('Nonexistent flag') + await expect(createCmdInstance(['--poop']).run()).rejects.toThrow('Nonexistent flag') }) }) diff --git a/packages/@sanity/cli/test/mockSanityCommand.ts b/packages/@sanity/cli/test/mockSanityCommand.ts index afe032be39..2728a90789 100644 --- a/packages/@sanity/cli/test/mockSanityCommand.ts +++ b/packages/@sanity/cli/test/mockSanityCommand.ts @@ -22,6 +22,7 @@ const mocks = { SanityCmdOutputLog: vi.fn(), SanityCmdOutputWarn: vi.fn(), SanityCmdResolveIsInteractive: vi.fn(), + SanityGetProjectCliClient: vi.fn(), } class MockedSanityCommand extends Command implements SanityCommandInterface { args = {} @@ -70,6 +71,7 @@ vi.mock('@sanity/cli-core', async (importOriginal) => { const actual = await importOriginal() return { ...actual, + getProjectCliClient: mocks.SanityGetProjectCliClient, SanityCommand: MockedSanityCommand, } }) From 9474a6d2b03491070d0ab07650aedd7e8cf91cc3 Mon Sep 17 00:00:00 2001 From: filmaj Date: Sat, 27 Jun 2026 15:50:35 -0400 Subject: [PATCH 5/7] test(chore): include test dirs in knip analysis --- knip.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/knip.config.ts b/knip.config.ts index 5e8b2284dd..a5b82d95d4 100644 --- a/knip.config.ts +++ b/knip.config.ts @@ -1,6 +1,6 @@ import {type KnipConfig} from 'knip' -const project = ['src/**/*.{js,jsx,ts,tsx}', '!**/docs/**'] +const project = ['src/**/*.{js,jsx,ts,tsx}', 'test/**/*.{js,jsx,ts,tsx}', '!**/docs/**'] const baseConfig = { // For now only care about cli package From 52cc4a908164cb5e8d577ce8d1e92ad4dbda7ae0 Mon Sep 17 00:00:00 2001 From: filmaj Date: Sat, 27 Jun 2026 22:00:24 -0400 Subject: [PATCH 6/7] chore(test): delete unused test fixtures --- .../cli-configs/cjs-env-vars/package.json | 6 ---- .../cli-configs/cjs-env-vars/sanity.cli.js | 17 ---------- .../cli-configs/cjs-full/package.json | 6 ---- .../cli-configs/cjs-full/sanity.cli.js | 34 ------------------- .../cli-configs/cjs-relative-require/base.js | 12 ------- .../cjs-relative-require/package.json | 6 ---- .../cjs-relative-require/sanity.cli.js | 12 ------- .../cjs-relative-require/shared.js | 7 ---- 8 files changed, 100 deletions(-) delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-env-vars/package.json delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-env-vars/sanity.cli.js delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-full/package.json delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-full/sanity.cli.js delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-relative-require/base.js delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-relative-require/package.json delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-relative-require/sanity.cli.js delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-relative-require/shared.js diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-env-vars/package.json b/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-env-vars/package.json deleted file mode 100644 index e68ce8914a..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-env-vars/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "cjs-env-vars-fixture", - "version": "1.0.0", - "private": true, - "type": "commonjs" -} diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-env-vars/sanity.cli.js b/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-env-vars/sanity.cli.js deleted file mode 100644 index ced2398f5f..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-env-vars/sanity.cli.js +++ /dev/null @@ -1,17 +0,0 @@ -/* eslint-disable no-undef */ -// CJS config with environment variables and conditional logic -const isCI = process.env.CI === 'true' -const dataset = process.env.SANITY_STUDIO_DATASET || 'development' -const projectId = process.env.SANITY_STUDIO_PROJECT_ID || 'cjsenv123' - -module.exports = { - api: { - dataset: isCI ? 'test' : dataset, - projectId, - }, - server: { - hostname: process.env.HOST || 'localhost', - port: Number(process.env.PORT) || 3333, - }, - ...(isCI ? {} : {reactStrictMode: true}), -} diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-full/package.json b/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-full/package.json deleted file mode 100644 index 6d70e6ced1..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-full/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "cjs-full-fixture", - "version": "1.0.0", - "private": true, - "type": "commonjs" -} diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-full/sanity.cli.js b/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-full/sanity.cli.js deleted file mode 100644 index 4269b7cd02..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-full/sanity.cli.js +++ /dev/null @@ -1,34 +0,0 @@ -/* eslint-disable @typescript-eslint/no-require-imports, no-undef */ -// Full-featured CJS config covering all config sections -const path = require('node:path') - -module.exports = { - api: { - dataset: 'production', - projectId: 'cjsf123', - }, - deployment: { - appId: 'my-cjs-studio', - autoUpdates: true, - }, - graphql: [ - { - generation: 'gen3', - id: 'default', - playground: true, - tag: 'default', - workspace: 'default', - }, - ], - mediaLibrary: { - aspectsPath: path.resolve(__dirname, 'aspects'), - }, - project: { - basePath: '/studio', - }, - reactStrictMode: true, - server: { - hostname: '0.0.0.0', - port: 4000, - }, -} diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-relative-require/base.js b/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-relative-require/base.js deleted file mode 100644 index 14c4e4f8bf..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-relative-require/base.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable no-undef */ -const baseConfig = { - api: { - dataset: 'production', - projectId: 'cjsrel123', - }, - deployment: { - autoUpdates: true, - }, -} - -module.exports = {baseConfig} diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-relative-require/package.json b/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-relative-require/package.json deleted file mode 100644 index 04c43e0ea7..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-relative-require/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "cjs-relative-require-fixture", - "version": "1.0.0", - "private": true, - "type": "commonjs" -} diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-relative-require/sanity.cli.js b/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-relative-require/sanity.cli.js deleted file mode 100644 index ed7a63ceb8..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-relative-require/sanity.cli.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-disable @typescript-eslint/no-require-imports, no-undef */ -// CJS config with relative require and spread override -const {baseConfig} = require('./base') -const {serverDefaults} = require('./shared') - -module.exports = { - ...baseConfig, - server: { - ...serverDefaults, - port: 4444, - }, -} diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-relative-require/shared.js b/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-relative-require/shared.js deleted file mode 100644 index b343aadb17..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-relative-require/shared.js +++ /dev/null @@ -1,7 +0,0 @@ -/* eslint-disable no-undef */ -const serverDefaults = { - hostname: 'localhost', - port: 5555, -} - -module.exports = {serverDefaults} From 2ba6f27a31536d0914550d8c8007ccdd4d49e802 Mon Sep 17 00:00:00 2001 From: filmaj Date: Sat, 27 Jun 2026 22:26:03 -0400 Subject: [PATCH 7/7] test(chore): remove unused fixtures, update knip --- knip.config.ts | 6 +++ .../cli-configs/cjs-typescript/package.json | 6 --- .../cli-configs/cjs-typescript/sanity.cli.ts | 9 ----- .../cjs-vite-function/package.json | 6 --- .../cjs-vite-function/sanity.cli.js | 14 ------- .../cli-configs/esm-async-config/data.json | 4 -- .../esm-async-config/sanity.cli.ts | 17 -------- .../esm-deprecated-fields/sanity.cli.ts | 11 ----- .../cli-configs/esm-dirname/sanity.cli.ts | 13 ------ .../cli-configs/esm-env-vars/sanity.cli.ts | 18 --------- .../cli-configs/esm-full/sanity.cli.ts | 40 ------------------- .../cli-configs/esm-graphql/sanity.cli.ts | 27 ------------- .../esm-import-meta-url/sanity.cli.ts | 24 ----------- .../esm-js-plain-object/sanity.cli.js | 10 ----- .../esm-path-aliases/sanity.cli.ts | 7 ---- .../esm-path-aliases/src/config.ts | 4 -- .../esm-path-aliases/tsconfig.json | 11 ----- .../esm-plain-object/sanity.cli.ts | 10 ----- .../cli-configs/esm-relative-imports/base.ts | 11 ----- .../esm-relative-imports/sanity.cli.ts | 13 ------ .../esm-relative-imports/shared.ts | 4 -- .../cli-configs/esm-side-effects/logger.ts | 4 -- .../esm-side-effects/sanity.cli.ts | 11 ----- .../esm-vite-function/sanity.cli.ts | 17 -------- .../esm-vite-plugins/sanity.cli.ts | 20 ---------- 25 files changed, 6 insertions(+), 311 deletions(-) delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-typescript/package.json delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-typescript/sanity.cli.ts delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-vite-function/package.json delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-vite-function/sanity.cli.js delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-async-config/data.json delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-async-config/sanity.cli.ts delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-deprecated-fields/sanity.cli.ts delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-dirname/sanity.cli.ts delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-env-vars/sanity.cli.ts delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-full/sanity.cli.ts delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-graphql/sanity.cli.ts delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-import-meta-url/sanity.cli.ts delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-js-plain-object/sanity.cli.js delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-path-aliases/sanity.cli.ts delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-path-aliases/src/config.ts delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-path-aliases/tsconfig.json delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-plain-object/sanity.cli.ts delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-relative-imports/base.ts delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-relative-imports/sanity.cli.ts delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-relative-imports/shared.ts delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-side-effects/logger.ts delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-side-effects/sanity.cli.ts delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-vite-function/sanity.cli.ts delete mode 100644 packages/@sanity/cli/test/__fixtures__/cli-configs/esm-vite-plugins/sanity.cli.ts diff --git a/knip.config.ts b/knip.config.ts index a5b82d95d4..52fd0a252a 100644 --- a/knip.config.ts +++ b/knip.config.ts @@ -62,6 +62,12 @@ const baseConfig = { 'src/**/*.worker.ts', 'package.config.ts', ], + ignoreFiles: [ + 'test/__fixtures__/cli-configs/error-both-ts-and-js/*', // used in an integration test + 'test/__fixtures__/exec-*.ts', + 'test/helpers/buildFixture.ts', // referenced in cli-test readme? + 'test/snapshotSerializer.ts', // used in vitest.config + ], oclif: { config: ['oclif.config.js'], }, diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-typescript/package.json b/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-typescript/package.json deleted file mode 100644 index dafc618350..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-typescript/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "cjs-typescript-fixture", - "version": "1.0.0", - "private": true, - "type": "commonjs" -} diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-typescript/sanity.cli.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-typescript/sanity.cli.ts deleted file mode 100644 index b4c24a24e4..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-typescript/sanity.cli.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* eslint-disable n/no-extraneous-import */ -import {defineCliConfig} from 'sanity/cli' - -export default defineCliConfig({ - api: { - dataset: 'production', - projectId: 'typescript123', - }, -}) diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-vite-function/package.json b/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-vite-function/package.json deleted file mode 100644 index 4cb2a92f75..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-vite-function/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "cjs-vite-function-fixture", - "version": "1.0.0", - "private": true, - "type": "commonjs" -} diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-vite-function/sanity.cli.js b/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-vite-function/sanity.cli.js deleted file mode 100644 index 63a6b9029a..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/cjs-vite-function/sanity.cli.js +++ /dev/null @@ -1,14 +0,0 @@ -/* eslint-disable no-undef */ -// CJS config with non-serializable vite function (forces main-thread fallback) -module.exports = { - api: { - dataset: 'production', - projectId: 'cjsvf123', - }, - vite: async (config) => { - return { - ...config, - build: {sourcemap: true}, - } - }, -} diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-async-config/data.json b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-async-config/data.json deleted file mode 100644 index eef6c7e376..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-async-config/data.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "dataset": "production", - "projectId": "async123" -} diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-async-config/sanity.cli.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-async-config/sanity.cli.ts deleted file mode 100644 index 67ad5b1bad..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-async-config/sanity.cli.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {readFile} from 'node:fs/promises' -import {fileURLToPath} from 'node:url' - -import {defineCliConfig} from 'sanity/cli' - -// Top-level await: read config values from a JSON file at module load -const configPath = fileURLToPath(new URL('data.json', import.meta.url)) -// eslint-disable-next-line unicorn/text-encoding-identifier-case -const raw = await readFile(configPath, 'utf-8') -const {dataset, projectId} = JSON.parse(raw) as {dataset: string; projectId: string} - -export default defineCliConfig({ - api: { - dataset, - projectId, - }, -}) diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-deprecated-fields/sanity.cli.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-deprecated-fields/sanity.cli.ts deleted file mode 100644 index 1dc2c881d3..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-deprecated-fields/sanity.cli.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {defineCliConfig} from 'sanity/cli' - -// Uses deprecated top-level fields: studioHost and autoUpdates -export default defineCliConfig({ - api: { - dataset: 'production', - projectId: 'dep123', - }, - autoUpdates: true, - studioHost: 'my-studio', -}) diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-dirname/sanity.cli.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-dirname/sanity.cli.ts deleted file mode 100644 index 2ef2eec533..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-dirname/sanity.cli.ts +++ /dev/null @@ -1,13 +0,0 @@ -import path from 'node:path' - -import {defineCliConfig} from 'sanity/cli' - -export default defineCliConfig({ - api: { - dataset: 'production', - projectId: 'dirname123', - }, - mediaLibrary: { - aspectsPath: path.resolve(__dirname, 'aspects'), - }, -}) diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-env-vars/sanity.cli.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-env-vars/sanity.cli.ts deleted file mode 100644 index 75a63bda6e..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-env-vars/sanity.cli.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {defineCliConfig} from 'sanity/cli' - -// Config values derived from environment variables with conditional logic -const isCI = process.env.CI === 'true' -const dataset = process.env.SANITY_STUDIO_DATASET || 'development' -const projectId = process.env.SANITY_STUDIO_PROJECT_ID || 'env123' - -export default defineCliConfig({ - api: { - dataset: isCI ? 'test' : dataset, - projectId, - }, - server: { - hostname: process.env.HOST || 'localhost', - port: Number(process.env.PORT) || 3333, - }, - ...(isCI ? {} : {reactStrictMode: true}), -}) diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-full/sanity.cli.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-full/sanity.cli.ts deleted file mode 100644 index b7a53a0f7b..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-full/sanity.cli.ts +++ /dev/null @@ -1,40 +0,0 @@ -import {defineCliConfig} from 'sanity/cli' - -export default defineCliConfig({ - api: { - dataset: 'production', - projectId: 'abc123', - }, - app: { - entry: './src/App.tsx', - icon: '', - organizationId: 'org-456', - title: 'My Custom App', - }, - deployment: { - appId: 'my-studio-id', - autoUpdates: true, - }, - graphql: [ - { - generation: 'gen3', - id: 'default', - playground: true, - tag: 'default', - workspace: 'default', - }, - ], - mediaLibrary: { - aspectsPath: './aspects', - }, - project: { - basePath: '/studio', - }, - reactCompiler: {target: '19'}, - reactStrictMode: true, - server: { - hostname: '0.0.0.0', - port: 4000, - }, - typegen: {overloadClientMethods: true}, -}) diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-graphql/sanity.cli.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-graphql/sanity.cli.ts deleted file mode 100644 index f3aed1bee3..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-graphql/sanity.cli.ts +++ /dev/null @@ -1,27 +0,0 @@ -import {defineCliConfig} from 'sanity/cli' - -export default defineCliConfig({ - api: { - dataset: 'production', - projectId: 'gql123', - }, - graphql: [ - { - generation: 'gen3', - id: 'default', - nonNullDocumentFields: true, - playground: true, - tag: 'default', - workspace: 'default', - }, - { - filterSuffix: 'staging', - generation: 'gen2', - id: 'staging', - playground: false, - source: 'staging', - tag: 'staging', - workspace: 'staging', - }, - ], -}) diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-import-meta-url/sanity.cli.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-import-meta-url/sanity.cli.ts deleted file mode 100644 index 826cb57a60..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-import-meta-url/sanity.cli.ts +++ /dev/null @@ -1,24 +0,0 @@ -import path from 'node:path' -import {fileURLToPath} from 'node:url' - -import {defineCliConfig} from 'sanity/cli' - -// Both ESM path resolution techniques -const configDir = new URL('.', import.meta.url).pathname -const __filename = fileURLToPath(import.meta.url) -// eslint-disable-next-line @typescript-eslint/no-unused-vars -const __dirname = path.dirname(__filename) - -export default defineCliConfig({ - api: { - dataset: 'production', - projectId: 'imu123', - }, - mediaLibrary: { - aspectsPath: `${configDir}aspects`, - }, - server: { - hostname: 'localhost', - port: 7777, - }, -}) diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-js-plain-object/sanity.cli.js b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-js-plain-object/sanity.cli.js deleted file mode 100644 index f916dad176..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-js-plain-object/sanity.cli.js +++ /dev/null @@ -1,10 +0,0 @@ -// JavaScript config file instead of TypeScript -export default { - api: { - dataset: 'production', - projectId: 'js123', - }, - deployment: { - autoUpdates: true, - }, -} diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-path-aliases/sanity.cli.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-path-aliases/sanity.cli.ts deleted file mode 100644 index 12f9151d97..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-path-aliases/sanity.cli.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {defineCliConfig} from 'sanity/cli' - -import {projectConfig} from '@/config' - -export default defineCliConfig({ - api: projectConfig, -}) diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-path-aliases/src/config.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-path-aliases/src/config.ts deleted file mode 100644 index 0374fb9b17..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-path-aliases/src/config.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const projectConfig = { - dataset: 'production', - projectId: 'alias123', -} diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-path-aliases/tsconfig.json b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-path-aliases/tsconfig.json deleted file mode 100644 index 349bc899bd..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-path-aliases/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2017", - "module": "Preserve", - "moduleDetection": "force", - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["**/*.ts"] -} diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-plain-object/sanity.cli.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-plain-object/sanity.cli.ts deleted file mode 100644 index 9bb46183ca..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-plain-object/sanity.cli.ts +++ /dev/null @@ -1,10 +0,0 @@ -// No defineCliConfig wrapper — just a plain object default export -export default { - api: { - dataset: 'production', - projectId: 'plain123', - }, - deployment: { - autoUpdates: false, - }, -} diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-relative-imports/base.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-relative-imports/base.ts deleted file mode 100644 index 100ccea874..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-relative-imports/base.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {type CliConfig} from 'sanity/cli' - -export const baseConfig: CliConfig = { - api: { - dataset: 'production', - projectId: 'rel123', - }, - deployment: { - autoUpdates: true, - }, -} diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-relative-imports/sanity.cli.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-relative-imports/sanity.cli.ts deleted file mode 100644 index 1c3ca4e06a..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-relative-imports/sanity.cli.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {defineCliConfig} from 'sanity/cli' - -import {baseConfig} from './base' -import {serverDefaults} from './shared' - -// Spread base config and override with local imports -export default defineCliConfig({ - ...baseConfig, - server: { - ...serverDefaults, - port: 4444, - }, -}) diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-relative-imports/shared.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-relative-imports/shared.ts deleted file mode 100644 index b7f78e6dfa..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-relative-imports/shared.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const serverDefaults = { - hostname: 'localhost' as const, - port: 5555, -} diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-side-effects/logger.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-side-effects/logger.ts deleted file mode 100644 index f2b0d68496..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-side-effects/logger.ts +++ /dev/null @@ -1,4 +0,0 @@ -// Side-effect: sets a global flag when imported -;(globalThis as Record).__CLI_CONFIG_LOADED__ = true - -export const logPrefix = '[sanity]' diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-side-effects/sanity.cli.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-side-effects/sanity.cli.ts deleted file mode 100644 index 7cff692054..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-side-effects/sanity.cli.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {defineCliConfig} from 'sanity/cli' - -// Side-effect import — the module sets a global when loaded -import './logger' - -export default defineCliConfig({ - api: { - dataset: 'production', - projectId: 'se123', - }, -}) diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-vite-function/sanity.cli.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-vite-function/sanity.cli.ts deleted file mode 100644 index b4c32d8a0e..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-vite-function/sanity.cli.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {defineCliConfig} from 'sanity/cli' - -// Vite config as async function — non-serializable, forces main thread loading -export default defineCliConfig({ - api: { - dataset: 'production', - projectId: 'vf123', - }, - vite: async (config, env) => { - return { - ...config, - define: { - __MODE__: JSON.stringify(env.mode), - }, - } - }, -}) diff --git a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-vite-plugins/sanity.cli.ts b/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-vite-plugins/sanity.cli.ts deleted file mode 100644 index 428650944f..0000000000 --- a/packages/@sanity/cli/test/__fixtures__/cli-configs/esm-vite-plugins/sanity.cli.ts +++ /dev/null @@ -1,20 +0,0 @@ -import {defineCliConfig} from 'sanity/cli' - -// Vite plugins are non-serializable (functions/objects with methods) -// This forces fallback from worker thread to main thread loading -export default defineCliConfig({ - api: { - dataset: 'production', - projectId: 'vp123', - }, - vite: { - plugins: [ - { - name: 'custom-plugin', - transform(code: string) { - return code - }, - }, - ], - }, -})