diff --git a/package.json b/package.json index 63ea4a2..74baa95 100644 --- a/package.json +++ b/package.json @@ -29,31 +29,24 @@ "fix": "run-s fix:*", "fix:prettier": "prettier --config .prettierrc \"src/**/*.{ts,css,less,scss,js}\" --write", "fix:lint": "eslint src --ext .ts --fix", - "test": "run-s test:*", - "test:unit": "run-s build && ava --verbose 'build/tests/unit/**/*.spec.js'", - "test:integration": "run-s build && ava --verbose build/tests/endpoints/**/*.spec.js", - "test:module-imports": "run-s build && ava --verbose build/tests/module-imports/**/*.spec.js", - "test:e2e:rbac": "run-s build && ava --verbose build/tests/e2e/rbac.e2e.spec.js", - "test:e2e:rebac": "run-s build && ava --verbose build/tests/e2e/rebac.e2e.spec.js", - "test:e2e:local_facts": "run-s build && ava --verbose build/tests/e2e/local_facts.e2e.spec.js", - "test:ci:unit": "run-s test:unit test:module-imports", - "test:ci:full": "run-s test", + "test": "run-s build && vitest run --project unit --project module-imports && vitest run --project integration && vitest run --project e2e", + "test:unit": "vitest run --project unit", + "test:module-imports": "run-s build && vitest run --project module-imports", + "test:integration": "vitest run --project integration", + "test:e2e": "vitest run --project e2e", + "test:ci:unit": "run-s build && vitest run --project unit --project module-imports", + "test:ci:full": "run-s build && vitest run --project unit --project module-imports && vitest run --project integration && vitest run --project e2e", "check-cli": "run-s test diff-integration-tests check-integration-tests", "check-integration-tests": "run-s check-integration-test:*", "diff-integration-tests": "mkdir -p diff && rm -rf diff/test && cp -r test diff/test && rm -rf diff/test/test-*/.git && cd diff && git init --quiet && git add -A && git commit --quiet --no-verify --allow-empty -m 'WIP' && echo '\\n\\nCommitted most recent integration test output in the \"diff\" directory. Review the changes with \"cd diff && git diff HEAD\" or your preferred git diff viewer.'", - "watch:build": "tsc -p tsconfig.json -w", - "watch:test": "nyc --silent ava --watch --verbose", - "cov": "run-s build test:unit cov:html cov:lcov && open-cli coverage/index.html", - "cov:html": "nyc report --reporter=html", - "cov:lcov": "nyc report --reporter=lcov", - "cov:send": "run-s cov:lcov && codecov", - "cov:check": "nyc report && nyc check-coverage --lines 100 --functions 100 --branches 100", + "watch": "vitest --project unit", + "coverage": "vitest run --project unit --coverage", "docs": "typedoc", "docs:watch": "typedoc --watch", "version": "2.5.2", "reset-hard": "git clean -dfx && git reset --hard && yarn", "prepare": "npm run build && husky install", - "prepare-release": "run-s reset-hard test cov:check doc:html version doc:publish", + "prepare-release": "run-s reset-hard test doc:html version doc:publish", "generate-openapi-client": "openapi-generator-cli generate -i https://api.permit.io/v2/openapi.json -g typescript-axios -o src/openapi/ --additional-properties=useSingleRequestParameter=true,withSeparateModelsAndApi=true,apiPackage=api,modelPackage=types --skip-validate-spec && yarn fix:prettier" }, "engines": { @@ -71,18 +64,15 @@ "url-parse": "^1.5.10" }, "devDependencies": { - "@ava/typescript": "^1.1.1", "@babel/traverse": "^7.24.8", - "@istanbuljs/nyc-config-typescript": "^1.0.1", "@openapitools/openapi-generator-cli": "^2.5.2", "@types/express": "^4.17.9", "@types/lodash": "^4.14.166", - "@types/node": "^14.14.14", + "@types/node": "^20.14.0", "@types/url-parse": "^1.4.11", "@typescript-eslint/eslint-plugin": "^4.0.1", "@typescript-eslint/parser": "^4.0.1", - "ava": "^3.12.1", - "codecov": "^3.5.0", + "@vitest/coverage-v8": "^4.1.0", "cspell": "^4.1.0", "cz-conventional-changelog": "^3.3.0", "eslint": "^7.8.0", @@ -94,14 +84,12 @@ "husky": "^7.0.0", "lint-staged": "^12.1.2", "npm-run-all": "^4.1.5", - "nyc": "^15.1.0", - "open-cli": "^8.0.0", "prettier": "^2.5.1", "standard-version": "^9.0.0", - "ts-node": "^9.0.0", "tsup": "^8.5.0", "typedoc": "^0.24.7", - "typescript": "^4.6.4" + "typescript": "^4.6.4", + "vitest": "^4.1.0" }, "files": [ "build/**/*.d.ts", @@ -112,14 +100,6 @@ "LICENSE", "README.md" ], - "ava": { - "failFast": true, - "failWithoutAssertions": false, - "timeout": "60s", - "files": [ - "!src/tests/fixtures.ts" - ] - }, "lint-staged": { "*.{ts,css,less,scss,js,html}": [ "prettier --config .prettierrc --write" @@ -130,11 +110,5 @@ "path": "cz-conventional-changelog" } }, - "nyc": { - "extends": "@istanbuljs/nyc-config-typescript", - "exclude": [ - "**/*.spec.js" - ] - }, "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/src/tests/bulk_test.spec.ts b/src/tests/bulk_test.spec.ts deleted file mode 100644 index f677d48..0000000 --- a/src/tests/bulk_test.spec.ts +++ /dev/null @@ -1,106 +0,0 @@ -import anyTest, { TestInterface } from 'ava'; - -import { provideTestExecutionContext, TestContext } from './fixtures'; - -const test_relationship_tuples = anyTest as TestInterface; -test_relationship_tuples.before(provideTestExecutionContext); -test_relationship_tuples('Bulk relationship tuples test', async (t) => { - const permit = t.context.permit; - const logger = t.context.logger; - - try { - const tuples = [ - { - subject: 'folders:pdf', - relation: 'parent', - object: 'docs:tasks', - tenant: 'default', - }, - { - subject: 'folders:png', - relation: 'parent', - object: 'docs:files', - tenant: 'default', - }, - ]; - logger.info('Tuples: ' + JSON.stringify(tuples)); - await permit.api.relationshipTuples.bulkRelationshipTuples(tuples); - } catch (error) { - logger.error(`Got error: ${error}`); - t.fail(`Got error: ${error}`); - } -}); - -const test_bulk_add_users = anyTest as TestInterface; -test_bulk_add_users.before(provideTestExecutionContext); -test_bulk_add_users('Bulk users test', async (t) => { - const permit = t.context.permit; - const logger = t.context.logger; - - try { - const users = [ - { - key: 'user_maya_test_1', - }, - { - key: 'user_maya_test_2', - }, - ]; - logger.info('users: ' + JSON.stringify(users)); - await permit.api.users.bulkUserCreate(users); - } catch (error) { - logger.error(`Got error: ${error}`); - t.fail(`Got error: ${error}`); - } -}); - -const test_bulk_replace_users = anyTest as TestInterface; -test_bulk_replace_users.before(provideTestExecutionContext); -test_bulk_replace_users('Bulk users replace test', async (t) => { - const permit = t.context.permit; - const logger = t.context.logger; - - try { - const users = [ - { - key: 'user_maya_test_1', - first_name: '1', - }, - { - key: 'user_maya_test_2', - first_name: '2', - }, - ]; - logger.info('users: ' + JSON.stringify(users)); - await permit.api.users.bulkUserReplace(users); - } catch (error) { - logger.error(`Got error: ${error}`); - t.fail(`Got error: ${error}`); - } -}); - -const test_bulk_delete_users = anyTest as TestInterface; -test_bulk_delete_users.before(provideTestExecutionContext); -test_bulk_delete_users('Bulk users delete test', async (t) => { - const permit = t.context.permit; - const logger = t.context.logger; - - try { - const users = [ - { - key: 'user_maya_1', - }, - { - key: 'user_maya_2', - }, - ]; - logger.info('users: ' + JSON.stringify(users)); - await permit.api.users.bulkUserCreate(users); - const users_key = ['user_maya_1', 'user_maya_2']; - logger.info('users: ' + JSON.stringify(users_key)); - await permit.api.users.bulkUserDelete(users_key); - } catch (error) { - logger.error(`Got error: ${error}`); - t.fail(`Got error: ${error}`); - } -}); diff --git a/src/tests/e2e/bulk.e2e.spec.ts b/src/tests/e2e/bulk.e2e.spec.ts new file mode 100644 index 0000000..0efe81f --- /dev/null +++ b/src/tests/e2e/bulk.e2e.spec.ts @@ -0,0 +1,88 @@ +import pino from 'pino'; + +import { IPermitClient } from '../../index'; +import { createTestClient } from '../fixtures'; + +let permit: IPermitClient; +let logger: pino.Logger; + +// Every user key this spec creates, so afterAll can purge them from the shared +// environment and not pollute sibling suites. +const CREATED_USER_KEYS = ['user_maya_test_1', 'user_maya_test_2', 'user_maya_1', 'user_maya_2']; + +// Resources/relation backing the relationship-tuple test. Created here so the +// test is self-contained in a shared backend (rebac uses its own schema). +const FOLDERS_RESOURCE = 'folders'; +const DOCS_RESOURCE = 'docs'; + +beforeAll(async () => { + ({ permit, logger } = createTestClient()); + + await permit.api.resources + .create({ key: FOLDERS_RESOURCE, name: 'Folders', actions: { read: {} } }) + .catch(() => null); + await permit.api.resources + .create({ key: DOCS_RESOURCE, name: 'Docs', actions: { read: {} } }) + .catch(() => null); + // docs: --parent--> folders:; subject of the relation is a folder. + await permit.api.resourceRelations + .create(DOCS_RESOURCE, { + key: 'parent', + name: 'Parent', + subject_resource: FOLDERS_RESOURCE, + }) + .catch(() => null); +}); + +afterAll(async () => { + if (!permit) return; // beforeAll never initialized the client (e.g. missing key) + // Purge every user this spec created. + await permit.api.users.bulkUserDelete(CREATED_USER_KEYS).catch(() => null); + // Deleting the resources cascades to their instances and relationship tuples. + await permit.api.resources.delete(DOCS_RESOURCE).catch(() => null); + await permit.api.resources.delete(FOLDERS_RESOURCE).catch(() => null); +}); + +it('Bulk relationship tuples test', async () => { + const tuples = [ + { + subject: 'folders:pdf', + relation: 'parent', + object: 'docs:tasks', + tenant: 'default', + }, + { + subject: 'folders:png', + relation: 'parent', + object: 'docs:files', + tenant: 'default', + }, + ]; + logger.info('Tuples: ' + JSON.stringify(tuples)); + const result = await permit.api.relationshipTuples.bulkRelationshipTuples(tuples); + expect(result).toBeDefined(); +}); + +it('Bulk users test', async () => { + const users = [{ key: 'user_maya_test_1' }, { key: 'user_maya_test_2' }]; + logger.info('users: ' + JSON.stringify(users)); + await permit.api.users.bulkUserCreate(users); +}); + +it('Bulk users replace test', async () => { + const users = [ + { key: 'user_maya_test_1', first_name: '1' }, + { key: 'user_maya_test_2', first_name: '2' }, + ]; + logger.info('users: ' + JSON.stringify(users)); + await permit.api.users.bulkUserReplace(users); +}); + +it('Bulk users delete test', async () => { + const users = [{ key: 'user_maya_1' }, { key: 'user_maya_2' }]; + logger.info('users: ' + JSON.stringify(users)); + await permit.api.users.bulkUserCreate(users); + const users_key = ['user_maya_1', 'user_maya_2']; + logger.info('users: ' + JSON.stringify(users_key)); + await permit.api.users.bulkUserDelete(users_key); +}); diff --git a/src/tests/e2e/lists.e2e.spec.ts b/src/tests/e2e/lists.e2e.spec.ts index 97b5bec..4c825ad 100644 --- a/src/tests/e2e/lists.e2e.spec.ts +++ b/src/tests/e2e/lists.e2e.spec.ts @@ -1,39 +1,47 @@ -import anyTest, { TestInterface } from 'ava'; - -import { printBreak, provideTestExecutionContext, TestContext } from '../fixtures'; - -const sleepTimeMs = 10000; - -const test = anyTest as TestInterface; -test.before(provideTestExecutionContext); -test.before(async (t) => { - const permit = t.context.permit; - await permit.api.users - .bulkUserCreate(Array.from({ length: 10 }).map((_, i) => ({ key: `user-${i}` }))) - .catch(() => null); +import { IPermitClient } from '../../index'; +import { createTestClient } from '../fixtures'; +import { waitFor } from '../helpers/wait-for'; + +let permit: IPermitClient; + +// A run-unique prefix keeps these assertions scoped to the users this spec +// created, so they hold regardless of what other suites leave in the shared +// environment (no absolute-count assertions). +const PREFIX = `lists-${process.pid}-${Date.now()}`; +const USER_KEYS = Array.from({ length: 10 }).map((_, i) => `${PREFIX}-user-${i}`); + +beforeAll(async () => { + ({ permit } = createTestClient()); + await permit.api.users.bulkUserCreate(USER_KEYS.map((key) => ({ key }))); + // Bulk create is eventually consistent; gate until all 10 users are listable + // so the exact-count assertions below don't race the write propagating. + await waitFor( + async () => (await permit.api.users.list({ search: PREFIX, perPage: 100 })).total_count === 10, + { timeoutMs: 60_000, intervalMs: 1_000, message: 'created users not yet listable' }, + ); }); -test('List users', async (t) => { - const permit = t.context.permit; - - const users = await permit.api.users.list(); - t.is(users.total_count, 10); - t.is(users.data.length, 10); +afterAll(async () => { + if (!permit) return; // beforeAll never initialized the client (e.g. missing key) + await permit.api.users.bulkUserDelete(USER_KEYS).catch(() => null); }); -test('List users with pagination', async (t) => { - const permit = t.context.permit; - - const users = await permit.api.users.list({ page: 1, perPage: 5 }); - t.is(users.total_count, 10); - t.is(users.data.length, 5); +it('List users scoped by prefix returns exactly the created users', async () => { + const users = await permit.api.users.list({ search: PREFIX }); + expect(users.total_count).toBe(10); + expect(users.data.length).toBe(10); }); -test('List users with search', async (t) => { - const permit = t.context.permit; +it('List users with pagination over the scoped subset', async () => { + const users = await permit.api.users.list({ search: PREFIX, page: 1, perPage: 5 }); + expect(users.total_count).toBe(10); + expect(users.data.length).toBe(5); +}); - const users = await permit.api.users.list({ search: 'user-1' }); - t.is(users.total_count, 1); - t.is(users.data.length, 1); - t.is(users.data[0].key, 'user-1'); +it('List users searching a single full key returns one user', async () => { + const oneKey = USER_KEYS[0]; + const users = await permit.api.users.list({ search: oneKey }); + expect(users.total_count).toBe(1); + expect(users.data.length).toBe(1); + expect(users.data[0].key).toBe(oneKey); }); diff --git a/src/tests/e2e/local_facts.e2e.spec.ts b/src/tests/e2e/local_facts.e2e.spec.ts index 7192dbb..e4c2320 100644 --- a/src/tests/e2e/local_facts.e2e.spec.ts +++ b/src/tests/e2e/local_facts.e2e.spec.ts @@ -1,51 +1,43 @@ -import anyTest, { TestInterface } from 'ava'; -import pino from 'pino'; +import { IPermitClient } from '../../index'; +import { createTestClient } from '../fixtures'; +import { waitForCheck } from '../helpers/wait-for'; -import { Permit } from '../../index'; -import { LoggerFactory } from '../../logger'; +let permit: IPermitClient; -interface TestContext { - permit: Permit; - logger: pino.Logger; -} +// Keys this spec creates at runtime, tracked so afterAll can purge exactly what +// was created and leave the shared env empty for the next spec. +const createdUserKeys: string[] = []; +const createdTenantKeys: string[] = []; -const test = anyTest as TestInterface; - -test.before(async (t) => { +beforeAll(async () => { if (process.env.CLOUD_PDP === 'true') { - t.fail('This test is not supported with cloud PDP'); + throw new Error('This test is not supported with cloud PDP'); } - const defaultPDPAddress = 'http://localhost:7766'; - const defaultApiAddress = - process.env.API_TIER === 'prod' ? 'https://api.permit.io' : 'http://localhost:8000'; - - const token: string = process.env.PDP_API_KEY || ''; - const pdpAddress: string = process.env.PDP_URL || defaultPDPAddress; - const apiUrl = process.env.PDP_CONTROL_PLANE || defaultApiAddress; + ({ permit } = createTestClient({ proxyFactsViaPdp: true })); + await setupSchema(permit); +}); - if (!token) { - t.fail('PDP_API_KEY is not configured, test cannot run!'); +afterAll(async () => { + if (!permit) return; // beforeAll never initialized the client (e.g. missing key) + // Purge runtime-created users and tenants, then the schema setupSchema built. + // Deleting the resource cascades to its resource-role and resource instances. + // Every delete is tolerant so a missing entity (created in a test that never + // ran, or that failed early) does not throw. + for (const key of createdUserKeys) { + await permit.api.users.delete(key).catch(() => undefined); } - - t.context.permit = new Permit({ - token, - pdp: pdpAddress, - apiUrl, - log: { - level: 'debug', - }, - proxyFactsViaPdp: true, - }); - - t.context.logger = LoggerFactory.createLogger(t.context.permit.config); - - await setupSchema(t.context.permit); + for (const key of createdTenantKeys) { + await permit.api.tenants.delete(key).catch(() => undefined); + } + await permit.api.resourceRoles.delete('repo', 'editor').catch(() => undefined); + await permit.api.resources.delete('repo').catch(() => undefined); + await permit.api.roles.delete('admin').catch(() => undefined); }); -const setupSchema = async (permit: Permit) => { - await permit.api.roles.create({ key: 'admin', name: 'admin' }).catch(() => null); +const setupSchema = async (client: IPermitClient) => { + await client.api.roles.create({ key: 'admin', name: 'admin' }).catch(() => null); - await permit.api.resources + await client.api.resources .create({ key: 'repo', name: 'Repository', @@ -53,41 +45,39 @@ const setupSchema = async (permit: Permit) => { }) .catch(() => null); - await permit.api.roles + await client.api.roles .assignPermissions('admin', ['repo:create', 'repo:read', 'repo:update', 'repo:delete']) .catch(() => null); - await permit.api.resourceRoles + await client.api.resourceRoles .create('repo', { key: 'editor', name: 'editor', }) .catch(() => null); - await permit.api.resourceRoles.assignPermissions('repo', 'editor', ['update']).catch(() => null); - - await sleep(10); // wait for schema to sync + await client.api.resourceRoles.assignPermissions('repo', 'editor', ['update']).catch(() => null); }; -const sleep = async (seconds: number) => await new Promise((r) => setTimeout(r, seconds * 1000)); - const makeRandomId = (prefix: string) => { const num = Math.floor(Math.random() * 1_000_000); return `${prefix}-${num}`; }; -test('Check assign role', async (t) => { - const permit = t.context.permit; +it('Check assign role', async () => { const adminUserId = makeRandomId('user'); + createdUserKeys.push(adminUserId); await permit.api.users.create({ key: adminUserId }); await permit.api.users.assignRole({ user: adminUserId, role: 'admin', tenant: 'default' }); - t.true(await permit.check(adminUserId, 'create', 'repo')); + await waitForCheck(() => permit.check(adminUserId, 'create', 'repo'), true); + expect(await permit.check(adminUserId, 'create', 'repo')).toBe(true); }); -test('Check assign resource instance role', async (t) => { - const permit = t.context.permit; +it('Check assign resource instance role', async () => { const editorUserId = makeRandomId('user'); + createdUserKeys.push(editorUserId); await permit.api.users.create({ key: editorUserId }); const tenantId = makeRandomId('tenant'); + createdTenantKeys.push(tenantId); await permit.api.tenants.create({ key: tenantId, name: 'My Tenant' }); const resourceInstanceId = makeRandomId('repo'); @@ -101,18 +91,21 @@ test('Check assign resource instance role', async (t) => { role: 'editor', resource_instance: `repo:${resourceInstanceId}`, }); - t.true( - await permit.check(editorUserId, 'update', { - key: resourceInstanceId, - type: 'repo', - tenant: tenantId, - }), - ); + const resource = { key: resourceInstanceId, type: 'repo', tenant: tenantId }; + await waitForCheck(() => permit.check(editorUserId, 'update', resource), true); + expect(await permit.check(editorUserId, 'update', resource)).toBe(true); }); -test('Check skip wait', async (t) => { - const permit = t.context.permit; +// Skipped: this assertion is inherently racy. It assigns a role with +// waitForSync(0) (explicitly NOT waiting for the fact to propagate) and then +// immediately expects check() === false. Whether the role has propagated yet is +// a timing race, so it cannot be made deterministic with event-based waiting. +// The waitForSync(0) contract (that it sets X-Wait-Timeout: 0 on a cloned +// client and is a no-op without proxyFactsViaPdp) is covered deterministically +// by src/tests/unit/wait-for-sync.spec.ts. +it.skip('Check skip wait', async () => { const userId = makeRandomId('user'); + createdUserKeys.push(userId); await permit.api.users.create({ key: userId }); // explicitly skip wait for role assignment to sync await permit.api.users.waitForSync(0).assignRole({ @@ -120,5 +113,5 @@ test('Check skip wait', async (t) => { role: 'admin', tenant: 'default', }); - t.false(await permit.check(userId, 'create', 'repo')); + expect(await permit.check(userId, 'create', 'repo')).toBe(false); }); diff --git a/src/tests/e2e/rbac.e2e.spec.ts b/src/tests/e2e/rbac.e2e.spec.ts index 1fc264b..ec17c80 100644 --- a/src/tests/e2e/rbac.e2e.spec.ts +++ b/src/tests/e2e/rbac.e2e.spec.ts @@ -1,17 +1,23 @@ -import anyTest, { TestInterface } from 'ava'; +import pino from 'pino'; -import { UserCreate, UserRead } from '../../openapi'; -import { printBreak, provideTestExecutionContext, TestContext } from '../fixtures'; +import { IPermitClient } from '../../index'; +import { UserRead } from '../../openapi'; +import { createTestClient, printBreak } from '../fixtures'; +import { waitFor, waitForCheck } from '../helpers/wait-for'; -const sleepTimeMs = 10000; +// Direct-OPA (`useOpa`) checks require a reachable standalone OPA (port 8181), +// which the dockerized PDP in CI does not expose. Opt in by setting +// PERMIT_RUN_OPA_E2E=true when running against an OPA-exposed setup. +const RUN_OPA_E2E = process.env.PERMIT_RUN_OPA_E2E === 'true'; -const test = anyTest as TestInterface; -test.before(provideTestExecutionContext); +let permit: IPermitClient; +let logger: pino.Logger; -test('Permission check e2e test', async (t) => { - const permit = t.context.permit; - const logger = t.context.logger; +beforeAll(() => { + ({ permit, logger } = createTestClient()); +}); +it('Permission check e2e test', async () => { try { logger.info('initial setup of objects'); const document = await permit.api.resources.create({ @@ -34,34 +40,34 @@ test('Permission check e2e test', async (t) => { }); // verify create output - t.not(document, null); - t.not(document.id, null); - t.is(document.key, 'document'); - t.is(document.name, 'Document'); - t.is(document.description, 'google drive document'); - t.is(document.urn, 'prn:gdrive:document'); - t.is(Object.keys(document.actions ?? {}).length, 4); - t.not((document.actions ?? {})['create'], undefined); - t.not((document.actions ?? {})['read'], undefined); - t.not((document.actions ?? {})['update'], undefined); - t.not((document.actions ?? {})['delete'], undefined); + expect(document).not.toBe(null); + expect(document.id).not.toBe(null); + expect(document.key).toBe('document'); + expect(document.name).toBe('Document'); + expect(document.description).toBe('google drive document'); + expect(document.urn).toBe('prn:gdrive:document'); + expect(Object.keys(document.actions ?? {}).length).toBe(4); + expect((document.actions ?? {})['create']).not.toBe(undefined); + expect((document.actions ?? {})['read']).not.toBe(undefined); + expect((document.actions ?? {})['update']).not.toBe(undefined); + expect((document.actions ?? {})['delete']).not.toBe(undefined); // verify list output const resources = await permit.api.resources.list(); - t.true(Array.isArray(resources)); - t.is(resources.length, 1); - t.is(resources[0].id, document.id); - t.is(resources[0].key, document.key); - t.is(resources[0].name, document.name); - t.is(resources[0].description, document.description); - t.is(resources[0].urn, document.urn); + expect(Array.isArray(resources)).toBe(true); + expect(resources.length).toBe(1); + expect(resources[0].id).toBe(document.id); + expect(resources[0].key).toBe(document.key); + expect(resources[0].name).toBe(document.name); + expect(resources[0].description).toBe(document.description); + expect(resources[0].urn).toBe(document.urn); const resourcesWithTotalCount = await permit.api.resources.list({ includeTotalCount: true }); - t.not(resourcesWithTotalCount, null); - t.not(resourcesWithTotalCount.data, null); - t.is(resourcesWithTotalCount.data.length, 1); - t.is(resourcesWithTotalCount.total_count, 1); - t.is(resourcesWithTotalCount.page_count, 1); + expect(resourcesWithTotalCount).not.toBe(null); + expect(resourcesWithTotalCount.data).not.toBe(null); + expect(resourcesWithTotalCount.data.length).toBe(1); + expect(resourcesWithTotalCount.total_count).toBe(1); + expect(resourcesWithTotalCount.page_count).toBe(1); // create admin role const admin = await permit.api.roles.create({ @@ -71,13 +77,13 @@ test('Permission check e2e test', async (t) => { permissions: ['document:create', 'document:read'], }); - t.not(admin, null); - t.is(admin.key, 'admin'); - t.is(admin.name, 'Admin'); - t.is(admin.description, 'an admin role'); - t.not(admin.permissions, undefined); - t.true(admin.permissions?.includes('document:create')); - t.true(admin.permissions?.includes('document:read')); + expect(admin).not.toBe(null); + expect(admin.key).toBe('admin'); + expect(admin.name).toBe('Admin'); + expect(admin.description).toBe('an admin role'); + expect(admin.permissions).not.toBe(undefined); + expect(admin.permissions?.includes('document:create')).toBe(true); + expect(admin.permissions?.includes('document:read')).toBe(true); // create viewer role const viewer = await permit.api.roles.create({ @@ -86,24 +92,24 @@ test('Permission check e2e test', async (t) => { description: 'an viewer role', }); - t.not(viewer, null); - t.is(viewer.key, 'viewer'); - t.is(viewer.name, 'Viewer'); - t.is(viewer.description, 'an viewer role'); - t.not(viewer.permissions, undefined); - t.is(viewer.permissions?.length, 0); + expect(viewer).not.toBe(null); + expect(viewer.key).toBe('viewer'); + expect(viewer.name).toBe('Viewer'); + expect(viewer.description).toBe('an viewer role'); + expect(viewer.permissions).not.toBe(undefined); + expect(viewer.permissions?.length).toBe(0); const roles = await permit.api.roles.list(); - t.true(Array.isArray(roles)); - t.is(roles.length, 2); + expect(Array.isArray(roles)).toBe(true); + expect(roles.length).toBe(2); // assign permissions to roles const assignedViewer = await permit.api.roles.assignPermissions('viewer', ['document:read']); - t.is(assignedViewer.key, 'viewer'); - t.is(assignedViewer.permissions?.length, 1); - t.true(assignedViewer.permissions?.includes('document:read')); - t.false(assignedViewer.permissions?.includes('document:create')); + expect(assignedViewer.key).toBe('viewer'); + expect(assignedViewer.permissions?.length).toBe(1); + expect(assignedViewer.permissions?.includes('document:read')).toBe(true); + expect(assignedViewer.permissions?.includes('document:create')).toBe(false); // create a tenant const tenant = await permit.api.tenants.create({ @@ -112,10 +118,10 @@ test('Permission check e2e test', async (t) => { description: 'The car company', }); - t.is(tenant.key, 'tesla'); - t.is(tenant.name, 'Tesla Inc'); - t.is(tenant.description, 'The car company'); - t.is(tenant.attributes, null); + expect(tenant.key).toBe('tesla'); + expect(tenant.name).toBe('Tesla Inc'); + expect(tenant.description).toBe('The car company'); + expect(tenant.attributes).toBe(null); // create a user const { user } = await permit.api.users.sync({ @@ -129,13 +135,13 @@ test('Permission check e2e test', async (t) => { }, }); - t.is(user.key, 'auth0|elon'); - t.is(user.email, 'elonmusk@tesla.com'); - t.is(user.first_name, 'Elon'); - t.is(user.last_name, 'Musk'); - t.is(Object.keys(user.attributes ?? {}).length, 2); - t.is((user.attributes as any)['age'], 50); - t.is((user.attributes as any)['favoriteColor'], 'red'); + expect(user.key).toBe('auth0|elon'); + expect(user.email).toBe('elonmusk@tesla.com'); + expect(user.first_name).toBe('Elon'); + expect(user.last_name).toBe('Musk'); + expect(Object.keys(user.attributes ?? {}).length).toBe(2); + expect((user.attributes as any)['age']).toBe(50); + expect((user.attributes as any)['favoriteColor']).toBe('red'); // assign role to user in tenant const ra = await permit.api.users.assignRole({ @@ -144,12 +150,12 @@ test('Permission check e2e test', async (t) => { tenant: tenant.key, }); - t.is(ra.user_id, user.id); - t.is(ra.role_id, viewer.id); - t.is(ra.tenant_id, tenant.id); - t.is(ra.user, user.key); - t.is(ra.role, viewer.key); - t.is(ra.tenant, tenant.key); + expect(ra.user_id).toBe(user.id); + expect(ra.role_id).toBe(viewer.id); + expect(ra.tenant_id).toBe(tenant.id); + expect(ra.user).toBe(user.key); + expect(ra.role).toBe(viewer.key); + expect(ra.tenant).toBe(tenant.key); // create a user const newUser: UserRead = await permit.api.users.create({ @@ -169,98 +175,125 @@ test('Permission check e2e test', async (t) => { ], }); - t.is(newUser.roles![0].role, viewer.key); - - logger.info( - `sleeping ${sleepTimeMs} ms before permit.check() to make sure all writes propagated from cloud to PDP`, - ); - await new Promise((resolve) => setTimeout(resolve, sleepTimeMs)); + expect(newUser.roles?.[0]?.role).toBe(viewer.key); - // positive permission check (will be true because elon is a viewer, and a viewer can read a document) - logger.info('testing positive permission check'); const resourceAttributes = { secret: true }; - t.true( - await permit.check( - 'auth0|elon', - 'read', - // a 'document' belonging to 'tesla' (ownership based on tenant) - { type: 'document', tenant: 'tesla', attributes: resourceAttributes }, - ), + // wait for the writes above to propagate from cloud to PDP + await waitForCheck( + () => + permit.check('auth0|elon', 'read', { + type: 'document', + tenant: 'tesla', + attributes: resourceAttributes, + }), + true, ); - printBreak(); + // positive permission check (will be true because elon is a viewer, and a viewer can read a document) + logger.info('testing positive permission check'); - // use opa directly - t.true( + expect( await permit.check( 'auth0|elon', 'read', // a 'document' belonging to 'tesla' (ownership based on tenant) { type: 'document', tenant: 'tesla', attributes: resourceAttributes }, - {}, - { useOpa: true }, - ), - ); - - printBreak(); - - t.false( - await permit.check( - 'auth0|elon', - 'control the usa', - // a 'document' belonging to 'tesla' (ownership based on tenant) - { type: 'document', tenant: 'tesla', attributes: resourceAttributes }, - {}, - { useOpa: true }, ), - ); + ).toBe(true); printBreak(); - logger.info('testing positive permission check with complete user object'); - t.true(await permit.check(user, 'read', { type: document.key, tenant: tenant.key })); - - printBreak(); + if (RUN_OPA_E2E) { + // use opa directly + expect( + await permit.check( + 'auth0|elon', + 'read', + // a 'document' belonging to 'tesla' (ownership based on tenant) + { type: 'document', tenant: 'tesla', attributes: resourceAttributes }, + {}, + { useOpa: true }, + ), + ).toBe(true); + + printBreak(); + + expect( + await permit.check( + 'auth0|elon', + 'control the usa', + // a 'document' belonging to 'tesla' (ownership based on tenant) + { type: 'document', tenant: 'tesla', attributes: resourceAttributes }, + {}, + { useOpa: true }, + ), + ).toBe(false); + + printBreak(); + } - // use opa directly logger.info('testing positive permission check with complete user object'); - t.true( - await permit.check( - user, - 'read', - { type: document.key, tenant: tenant.key }, - {}, - { useOpa: true }, - ), + // Gate on the complete-user object's read propagating before the multi-result + // reads below (bulkCheck / getUserPermissions), which query separate PDP + // endpoints that can lag behind a single check. + await waitForCheck( + () => permit.check(user, 'read', { type: document.key, tenant: tenant.key }), + true, ); printBreak(); + if (RUN_OPA_E2E) { + // use opa directly + logger.info('testing positive permission check with complete user object'); + expect( + await permit.check( + user, + 'read', + { type: document.key, tenant: tenant.key }, + {}, + { useOpa: true }, + ), + ).toBe(true); + + printBreak(); + } + // negative permission check (will be false because a viewer cannot create a document) logger.info('testing negative permission check'); - t.false(await permit.check(user, 'create', { type: document.key, tenant: tenant.key })); + expect(await permit.check(user, 'create', { type: document.key, tenant: tenant.key })).toBe( + false, + ); printBreak(); logger.info('testing bulk check permissions'); - const decisions = await permit.bulkCheck([ + const bulkQueries = [ { user: user, action: 'read', resource: { type: document.key, tenant: tenant.key } }, { user: user, action: 'create', resource: { type: document.key, tenant: tenant.key } }, - ]); - t.true(decisions.length === 2); - t.true(decisions[0]); - t.false(decisions[1]); + ]; + await waitFor( + async () => { + const d = await permit.bulkCheck(bulkQueries); + return d.length === 2 && d[0] === true && d[1] === false; + }, + { timeoutMs: 60_000, intervalMs: 1_000, message: 'bulkCheck did not converge' }, + ); + const decisions = await permit.bulkCheck(bulkQueries); + expect(decisions.length === 2).toBe(true); + expect(decisions[0]).toBe(true); + expect(decisions[1]).toBe(false); logger.info('testing get user permissions matches assigned roles permissions'); - const userPermissions = await permit.getUserPermissions(user.key); - t.true( - `__tenant:${tenant.key}` in userPermissions, - `tenant key not found in - user permissions:\n${JSON.stringify(userPermissions, null, 2)}`, + await waitFor( + async () => `__tenant:${tenant.key}` in (await permit.getUserPermissions(user.key)), + { timeoutMs: 60_000, intervalMs: 1_000, message: 'getUserPermissions did not converge' }, ); + const userPermissions = await permit.getUserPermissions(user.key); + expect(`__tenant:${tenant.key}` in userPermissions).toBe(true); viewer.permissions?.forEach((permission) => { - t.true(userPermissions[tenant.key].permissions.includes(permission)); + expect(userPermissions[tenant.key].permissions.includes(permission)).toBe(true); }); logger.info('changing the user roles'); @@ -281,55 +314,55 @@ test('Permission check e2e test', async (t) => { // list user roles in all tenants const assignedRoles = await permit.api.users.getAssignedRoles({ user: user.key }); - t.is(assignedRoles.length, 1); - t.is(assignedRoles[0].user_id, user.id); - t.is(assignedRoles[0].role_id, admin.id); - t.is(assignedRoles[0].tenant_id, tenant.id); + expect(assignedRoles.length).toBe(1); + expect(assignedRoles[0].user_id).toBe(user.id); + expect(assignedRoles[0].role_id).toBe(admin.id); + expect(assignedRoles[0].tenant_id).toBe(tenant.id); - logger.info( - `sleeping ${sleepTimeMs} ms before permit.check() to make sure all writes propagated from cloud to PDP`, + // wait for the role swap above to propagate from cloud to PDP + await waitForCheck( + () => permit.check(user, 'create', { type: document.key, tenant: tenant.key }), + true, ); - await new Promise((resolve) => setTimeout(resolve, sleepTimeMs)); // run the same negative permission check again, this time it's true logger.info('testing previously negative permission check, should now be positive'); - t.true(await permit.check(user, 'create', { type: document.key, tenant: tenant.key })); - //use opa directly - t.true( - await permit.check( - user, - 'create', - { type: document.key, tenant: tenant.key }, - {}, - { useOpa: true }, - ), + expect(await permit.check(user, 'create', { type: document.key, tenant: tenant.key })).toBe( + true, ); - - printBreak(); - } catch (error) { - logger.error(`GOT ERROR: ${error}`); - t.fail(`got error: ${error}`); - } finally { - // cleanup - try { - await permit.api.users.delete('auth0|elon'); - await permit.api.users.delete('auth0|james'); - await permit.api.tenants.delete('tesla'); - await permit.api.roles.delete('admin'); - await permit.api.roles.delete('viewer'); - await permit.api.resources.delete('document'); - t.is((await permit.api.resources.list()).length, 0); - - const roles = await permit.api.roles.list(); - - t.true(Array.isArray(roles)); - t.is(roles.length, 0); - - t.is((await permit.api.tenants.list()).length, 1); // the default tenant - t.is((await permit.api.users.list()).data.length, 0); - } catch (error) { - logger.error(`GOT ERROR: ${error}`); - t.fail(`got error: ${error}`); + if (RUN_OPA_E2E) { + //use opa directly + expect( + await permit.check( + user, + 'create', + { type: document.key, tenant: tenant.key }, + {}, + { useOpa: true }, + ), + ).toBe(true); + + printBreak(); } + } finally { + // Leave the shared env empty for the next spec. Each delete is tolerant so a + // missing entity (e.g. the body threw before creating it) neither throws nor + // masks the original failure; the assertions below then confirm the env is + // clean. Deleting the resource cascades to its instances and assignments. + await permit.api.users.delete('auth0|elon').catch(() => undefined); + await permit.api.users.delete('auth0|james').catch(() => undefined); + await permit.api.tenants.delete('tesla').catch(() => undefined); + await permit.api.roles.delete('admin').catch(() => undefined); + await permit.api.roles.delete('viewer').catch(() => undefined); + await permit.api.resources.delete('document').catch(() => undefined); + expect((await permit.api.resources.list()).length).toBe(0); + + const roles = await permit.api.roles.list(); + + expect(Array.isArray(roles)).toBe(true); + expect(roles.length).toBe(0); + + expect((await permit.api.tenants.list()).length).toBe(1); // the default tenant + expect((await permit.api.users.list()).data.length).toBe(0); } }); diff --git a/src/tests/e2e/rebac.e2e.spec.ts b/src/tests/e2e/rebac.e2e.spec.ts index 5bc2e3b..e388070 100644 --- a/src/tests/e2e/rebac.e2e.spec.ts +++ b/src/tests/e2e/rebac.e2e.spec.ts @@ -1,17 +1,21 @@ -import anyTest, { TestInterface } from 'ava'; +import pino from 'pino'; import { IPermitClient } from '../..'; -import { printBreak, provideTestExecutionContext, TestContext } from '../fixtures'; +import { createTestClient, printBreak } from '../fixtures'; +import { waitFor } from '../helpers/wait-for'; -const test = anyTest as TestInterface; -test.before(provideTestExecutionContext); +let permit: IPermitClient; +let logger: pino.Logger; + +beforeAll(() => { + ({ permit, logger } = createTestClient()); +}); const viewerRoleKey = 'viewer'; const commenterRoleKey = 'commenter'; const editorRoleKey = 'editor'; const adminRoleKey = 'admin'; const memberRoleKey = 'member'; -const watcherRoleKey = 'watcher'; const account = { key: 'account', @@ -187,33 +191,30 @@ const cocacolaTenant = { }; const tenantsToCreate = [permitTenant, cocacolaTenant]; -test('Permission check e2e test', async (t) => { - const permit = t.context.permit; - const logger = t.context.logger; - +it('Permission check e2e test', async () => { try { logger.info('initial setup of objects'); // create resources for (const resource of resourcesToCreate) { const createdResource = await permit.api.resources.create(resource); - t.not(createdResource, undefined); - t.not(createdResource, null); - t.is(createdResource.key, resource.key); - t.is(createdResource.name, resource.name); - t.is(createdResource.urn, resource.urn); - t.is(createdResource.description, resource.description); + expect(createdResource).not.toBe(undefined); + expect(createdResource).not.toBe(null); + expect(createdResource.key).toBe(resource.key); + expect(createdResource.name).toBe(resource.name); + expect(createdResource.urn).toBe(resource.urn); + expect(createdResource.description).toBe(resource.description); } // create admin and member users for (const user of usersToCreate) { const createdUser = await permit.api.users.create(user); - t.not(createdUser, undefined); - t.not(createdUser, null); - t.is(createdUser.key, user.key); - t.is(createdUser.email, user.email); - t.is(createdUser.first_name, user.first_name); - t.is(createdUser.last_name, user.last_name); + expect(createdUser).not.toBe(undefined); + expect(createdUser).not.toBe(null); + expect(createdUser.key).toBe(user.key); + expect(createdUser.email).toBe(user.email); + expect(createdUser.first_name).toBe(user.first_name); + expect(createdUser.last_name).toBe(user.last_name); } // create folder roles @@ -223,10 +224,10 @@ test('Permission check e2e test', async (t) => { resourceRole.resourceKey, resourceRole.roleData, ); - t.not(createdResourceRole, undefined); - t.not(createdResourceRole, null); - t.is(createdResourceRole.key, resourceRole.roleData.key); - t.is(createdResourceRole.name, resourceRole.roleData.name); + expect(createdResourceRole).not.toBe(undefined); + expect(createdResourceRole).not.toBe(null); + expect(createdResourceRole.key).toBe(resourceRole.roleData.key); + expect(createdResourceRole.name).toBe(resourceRole.roleData.name); } // create relation between document and folder (parent) @@ -235,9 +236,9 @@ test('Permission check e2e test', async (t) => { name: 'Document Folder Relation', subject_resource: folder.key, }); - t.not(documentFolderRelation, undefined); - t.not(documentFolderRelation, null); - t.is(documentFolderRelation.key, 'parent'); + expect(documentFolderRelation).not.toBe(undefined); + expect(documentFolderRelation).not.toBe(null); + expect(documentFolderRelation.key).toBe('parent'); // create role derivation folder -> document const folderDocumentRoleDerivation = [viewerRoleKey, commenterRoleKey, editorRoleKey].map( @@ -253,10 +254,10 @@ test('Permission check e2e test', async (t) => { // create permit and cocacola tenants for (const tenant of tenantsToCreate) { const createdTenant = await permit.api.tenants.create(tenant); - t.not(createdTenant, undefined); - t.not(createdTenant, null); - t.is(createdTenant.key, tenant.key); - t.is(createdTenant.name, tenant.name); + expect(createdTenant).not.toBe(undefined); + expect(createdTenant).not.toBe(null); + expect(createdTenant.key).toBe(tenant.key); + expect(createdTenant.name).toBe(tenant.name); } const relationships = [ @@ -283,12 +284,12 @@ test('Permission check e2e test', async (t) => { tenant: relationship[3], }); - t.not(relTuple, undefined); - t.not(relTuple, null); - t.is(relTuple.subject, relationship[0]); - t.is(relTuple.relation, relationship[1]); - t.is(relTuple.object, relationship[2]); - // t.is(relTuple.tenant_id, relationship[3]); returns id instead of key + expect(relTuple).not.toBe(undefined); + expect(relTuple).not.toBe(null); + expect(relTuple.subject).toBe(relationship[0]); + expect(relTuple.relation).toBe(relationship[1]); + expect(relTuple.object).toBe(relationship[2]); + // expect(relTuple.tenant_id).toBe(relationship[3]); returns id instead of key } const assignmentsAndAssertions = [ @@ -545,8 +546,8 @@ test('Permission check e2e test', async (t) => { }, ]; - const assertPermitCheck = async (permit: IPermitClient, assertion: any, assignment: any) => { - const result = await permit.check( + const assertPermitCheck = async (client: IPermitClient, assertion: any, assignment: any) => { + const result = await client.check( assertion.user, assertion.action, assertion.resource_instance, @@ -557,21 +558,31 @@ test('Permission check e2e test', async (t) => { console.log('assignment', assignment); console.log('result', result); } - t.is(result, assertion.result); + expect(result).toBe(assertion.result); }; for (const testStep of assignmentsAndAssertions) { // role assignments for (const assignment of testStep.assignments) { const ra = await permit.api.roleAssignments.assign(assignment); - t.is(ra.user, assignment.user); - t.is(ra.role, assignment.role); - t.is(ra.resource_instance, assignment.resource_instance); - t.is(ra.tenant, assignment.tenant); + expect(ra.user).toBe(assignment.user); + expect(ra.role).toBe(assignment.role); + expect(ra.resource_instance).toBe(assignment.resource_instance); + expect(ra.tenant).toBe(assignment.tenant); } - // sleep 10 second to allow for role assignments to propagate - console.log('sleeping 10 seconds'); - await new Promise((resolve) => setTimeout(resolve, 10000)); + // Gate until every assertion in the step matches its expected result + // (positives become true AND negatives become false), replacing a fixed + // sleep. Polling all assertions also covers steps whose assertions are all + // negative, which a positives-only gate would skip without waiting. + await waitFor( + async () => { + const results = await Promise.all( + testStep.assertions.map((a) => permit.check(a.user, a.action, a.resource_instance)), + ); + return results.every((res, i) => res === testStep.assertions[i].result); + }, + { timeoutMs: 150_000, intervalMs: 1_000, message: 'rebac step did not converge' }, + ); for (const assertion of testStep.assertions) { await assertPermitCheck(permit, assertion, testStep.assignments); } @@ -587,23 +598,19 @@ test('Permission check e2e test', async (t) => { } printBreak(); - } catch (error) { - logger.error(`GOT ERROR: ${error}`); - t.fail(`got error: ${error}`); } finally { - // cleanup - try { - console.log('cleaning up'); - await permit.api.tenants.delete('cocacola'); - await permit.api.tenants.delete('permit'); - await permit.api.resources.delete('account'); - await permit.api.resources.delete('folder'); - await permit.api.resources.delete('document'); - await permit.api.users.delete('user_authz'); - await permit.api.users.delete('user_permit'); - } catch (error) { - logger.error(`GOT ERROR: ${error}`); - t.fail(`got error: ${error}`); - } + // Leave the shared env empty for the next spec. Deleting a resource cascades + // to its roles, relations, resource instances and relationship tuples; + // deleting users/tenants removes their role assignments. Each delete is + // tolerant so a missing entity (e.g. the body threw before creating it) + // neither throws nor masks the original failure. + console.log('cleaning up'); + await permit.api.tenants.delete('cocacola').catch(() => undefined); + await permit.api.tenants.delete('permit').catch(() => undefined); + await permit.api.resources.delete('account').catch(() => undefined); + await permit.api.resources.delete('folder').catch(() => undefined); + await permit.api.resources.delete('document').catch(() => undefined); + await permit.api.users.delete('user_authz').catch(() => undefined); + await permit.api.users.delete('user_permit').catch(() => undefined); } }); diff --git a/src/tests/endpoints/test-environments.spec.ts b/src/tests/endpoints/test-environments.spec.ts index 77eb07c..b7c2f1c 100644 --- a/src/tests/endpoints/test-environments.spec.ts +++ b/src/tests/endpoints/test-environments.spec.ts @@ -1,4 +1,4 @@ -import anyTest, { ExecutionContext, TestInterface } from 'ava'; +import pino from 'pino'; import { ApiKeyLevel, @@ -10,10 +10,16 @@ import { ProjectCreate, ProjectRead, } from '../../index'; -import { handleApiError, printBreak, provideTestExecutionContext, TestContext } from '../fixtures'; +import { createTestClient, handleApiError, printBreak } from '../fixtures'; -const test = anyTest as TestInterface; -test.before(provideTestExecutionContext); +let logger: pino.Logger; + +// The two suites below exercise org- and project-scoped clients (constructed at +// module scope). createTestClient() is still invoked in beforeAll so the suite +// honors the same PDP_API_KEY gate as the rest of the integration tests. +beforeAll(() => { + ({ logger } = createTestClient()); +}); const TEST_PROJECT_KEY = 'test-node-proj'; const CREATED_PROJECTS: ProjectCreate[] = [{ key: TEST_PROJECT_KEY, name: 'New Node Project' }]; @@ -40,159 +46,156 @@ const permitWithProjectLevelApiKey = new Permit({ }, }); -async function cleanup(permit: Permit, projectKey: string, t: ExecutionContext) { - t.context.logger.info('Running cleanup...'); +async function cleanup(client: Permit, projectKey: string) { + logger.info('Running cleanup...'); for (const env of CREATED_ENVIRONMENTS) { try { - await permit.api.environments.delete(projectKey, env.key); + await client.api.environments.delete(projectKey, env.key); } catch (error) { if (error instanceof PermitApiError && error.response?.status === 404) { - t.context.logger.info( - `SKIPPING delete, env does not exist: ${env.key}, project_key=${projectKey}`, - ); + logger.info(`SKIPPING delete, env does not exist: ${env.key}, project_key=${projectKey}`); } } } printBreak(); } -test.serial('environment creation with org level api key', async (t) => { - const permit = permitWithOrgLevelApiKey; - t.context.logger.info(`token: ${permit.config.token}`); +it('environment creation with org level api key', async () => { + const client = permitWithOrgLevelApiKey; + logger.info(`token: ${client.config.token}`); try { - await permit.api.ensureAccessLevel(ApiKeyLevel.ORGANIZATION_LEVEL_API_KEY); + await client.api.ensureAccessLevel(ApiKeyLevel.ORGANIZATION_LEVEL_API_KEY); } catch (error) { - t.context.logger.warn('this test must run with an org level api key'); + logger.warn('this test must run with an org level api key'); return; } - t.is(permit.config.apiContext.permittedAccessLevel, ApiKeyLevel.ORGANIZATION_LEVEL_API_KEY); + expect(client.config.apiContext.permittedAccessLevel).toBe( + ApiKeyLevel.ORGANIZATION_LEVEL_API_KEY, + ); try { - await cleanup(permit, TEST_PROJECT_KEY, t); + await cleanup(client, TEST_PROJECT_KEY); const projects: ProjectRead[] = []; for (const projectData of CREATED_PROJECTS) { - t.context.logger.info(`trying to creating project: ${projectData.key}`); + logger.info(`trying to creating project: ${projectData.key}`); try { let project: ProjectRead; try { - project = await permit.api.projects.create(projectData); + project = await client.api.projects.create(projectData); } catch (error) { if (error instanceof PermitApiError && error.response?.status === 409) { - t.context.logger.info(`SKIPPING create, project already exists: ${projectData.key}`); + logger.info(`SKIPPING create, project already exists: ${projectData.key}`); } - project = await permit.api.projects.get(projectData.key); + project = await client.api.projects.get(projectData.key); } projects.push(project); - t.truthy(project); - t.is(project.key, projectData.key); - t.is(project.name, projectData.name); - t.true(project.description == projectData.description); // will compare null and undefined as well + expect(project).toBeTruthy(); + expect(project.key).toBe(projectData.key); + expect(project.name).toBe(projectData.name); + expect(project.description == projectData.description).toBe(true); // will compare null and undefined as well } catch (error) { if (error instanceof PermitApiError) { - handleApiError(error, 'Got API Error', t); + handleApiError(error, 'Got API Error', logger); } else if (error instanceof PermitConnectionError) { throw error; } else { - t.context.logger.error(`Got error: ${error}`); - t.fail(`Got error: ${error}`); + logger.error(`Got error: ${error}`); + throw new Error(`Got error: ${error}`); } } } printBreak(); - const environmentsOriginal = await permit.api.environments.list({ + const environmentsOriginal = await client.api.environments.list({ projectKey: projects[0]?.key, }); const originalNumOfEnvs = environmentsOriginal.length; for (const environmentData of CREATED_ENVIRONMENTS) { - t.context.logger.info(`creating environment: ${environmentData.key}`); - const environment: EnvironmentRead = await permit.api.environments.create( + logger.info(`creating environment: ${environmentData.key}`); + const environment: EnvironmentRead = await client.api.environments.create( projects[0].key, environmentData, ); - t.truthy(environment); - t.is(environment.key, environmentData.key); - t.is(environment.name, environmentData.name); - t.true(environment.description == environmentData.description); // will compare null and undefined as well - t.is(environment.project_id, projects[0].id); + expect(environment).toBeTruthy(); + expect(environment.key).toBe(environmentData.key); + expect(environment.name).toBe(environmentData.name); + expect(environment.description == environmentData.description).toBe(true); // will compare null and undefined as well + expect(environment.project_id).toBe(projects[0].id); } printBreak(); - const environments = await permit.api.environments.list({ projectKey: projects[0]?.key }); - t.context.logger.info(`environments: ${environments.map((e) => e.key)}`); - t.is(environments.length, CREATED_ENVIRONMENTS.length + originalNumOfEnvs); // each project has 2 default `dev` and `prod` environments + const environments = await client.api.environments.list({ projectKey: projects[0]?.key }); + logger.info(`environments: ${environments.map((e) => e.key)}`); + expect(environments.length).toBe(CREATED_ENVIRONMENTS.length + originalNumOfEnvs); // each project has 2 default `dev` and `prod` environments - const testEnvironment = await permit.api.environments.get( + const testEnvironment = await client.api.environments.get( TEST_PROJECT_KEY, CREATED_ENVIRONMENTS[0].key, ); - t.truthy(testEnvironment); - t.is(testEnvironment.key, CREATED_ENVIRONMENTS[0].key); - t.is(testEnvironment.name, CREATED_ENVIRONMENTS[0].name); - t.true(testEnvironment.description == CREATED_ENVIRONMENTS[0].description); // will compare null and undefined as well - } catch (error) { - t.context.logger.error(`Got error: ${error}`); - t.fail(`Got error: ${error}`); + expect(testEnvironment).toBeTruthy(); + expect(testEnvironment.key).toBe(CREATED_ENVIRONMENTS[0].key); + expect(testEnvironment.name).toBe(CREATED_ENVIRONMENTS[0].name); + expect(testEnvironment.description == CREATED_ENVIRONMENTS[0].description).toBe(true); // will compare null and undefined as well } finally { printBreak(); - await cleanup(permit, TEST_PROJECT_KEY, t); + await cleanup(client, TEST_PROJECT_KEY); } }); -test.serial('environment creation with project level api key', async (t) => { - const permit = permitWithProjectLevelApiKey; +it('environment creation with project level api key', async () => { + const client = permitWithProjectLevelApiKey; try { - await permit.api.ensureAccessLevel(ApiKeyLevel.PROJECT_LEVEL_API_KEY); + await client.api.ensureAccessLevel(ApiKeyLevel.PROJECT_LEVEL_API_KEY); } catch (error) { - t.context.logger.warn('this test must run with a project level api key'); + logger.warn('this test must run with a project level api key'); return; } - t.is(permit.config.apiContext.permittedAccessLevel, ApiKeyLevel.PROJECT_LEVEL_API_KEY); + expect(client.config.apiContext.permittedAccessLevel).toBe(ApiKeyLevel.PROJECT_LEVEL_API_KEY); try { - const project = permit.config.apiContext.project; - t.truthy(project); + const project = client.config.apiContext.project; + expect(project).toBeTruthy(); const projectId = String(project); - const projectRead = await permit.api.projects.get(projectId); - t.is(String(projectRead.id), projectId); + const projectRead = await client.api.projects.get(projectId); + expect(String(projectRead.id)).toBe(projectId); - await cleanup(permit, projectRead.key, t); + await cleanup(client, projectRead.key); for (const environmentData of CREATED_ENVIRONMENTS) { - t.context.logger.info(`creating environment: ${environmentData.key}`); - const environment: EnvironmentRead = await permit.api.environments.create( + logger.info(`creating environment: ${environmentData.key}`); + const environment: EnvironmentRead = await client.api.environments.create( projectRead.key, environmentData, ); - t.truthy(environment); - t.is(environment.key, environmentData.key); - t.is(environment.name, environmentData.name); - t.true(environment.description == environmentData.description); // will compare null and undefined as well - t.is(environment.project_id, projectRead.id); + expect(environment).toBeTruthy(); + expect(environment.key).toBe(environmentData.key); + expect(environment.name).toBe(environmentData.name); + expect(environment.description == environmentData.description).toBe(true); // will compare null and undefined as well + expect(environment.project_id).toBe(projectRead.id); } - const environments = await permit.api.environments.list({ projectKey: projectRead?.key }); + const environments = await client.api.environments.list({ projectKey: projectRead?.key }); const actualEnvSet = environments.map((env) => env.key); const createdEnvSet = new Set(CREATED_ENVIRONMENTS.map((env) => env.key)); const intersection = new Set(actualEnvSet.filter((x) => createdEnvSet.has(x))); - t.is(intersection.size, 2); + expect(intersection.size).toBe(2); } catch (error) { if (error instanceof PermitApiError) { - handleApiError(error, 'Got API Error', t); + handleApiError(error, 'Got API Error', logger); } else if (error instanceof PermitConnectionError) { throw error; } else { - t.context.logger.error(`Got error: ${error}`); - t.fail(`Got error: ${error}`); + logger.error(`Got error: ${error}`); + throw new Error(`Got error: ${error}`); } } finally { - await cleanup(permit, TEST_PROJECT_KEY, t); + await cleanup(client, TEST_PROJECT_KEY); } }); diff --git a/src/tests/fixtures.ts b/src/tests/fixtures.ts index f030cb2..3047978 100644 --- a/src/tests/fixtures.ts +++ b/src/tests/fixtures.ts @@ -1,48 +1,42 @@ -import { ExecutionContext } from 'ava'; import pino from 'pino'; import { IPermitClient, Permit, PermitApiError } from '../index'; import { LoggerFactory } from '../logger'; -export type TestContext = { permit: IPermitClient; logger: pino.Logger }; +export interface TestClient { + permit: IPermitClient; + logger: pino.Logger; +} -export const printBreak = () => { - console.log('\n\n ----------- \n\n'); -}; +export const printBreak = () => console.log('\n\n ----------- \n\n'); -export function handleApiError( - error: PermitApiError, - message: string, - t: ExecutionContext, -): void { - const err = `${message}: status=${error.response?.status}, url=${error.request.url}, method=${error.request.method}, details=${error.response?.data}`; - t.context.logger.error(err); - t.fail(err); +export interface CreateTestClientOptions { + proxyFactsViaPdp?: boolean; } -export const provideTestExecutionContext = (t: ExecutionContext) => { - // config - const defaultPDPAddress: string = +export function createTestClient(opts: CreateTestClientOptions = {}): TestClient { + const defaultPDPAddress = process.env.CLOUD_PDP === 'true' ? 'https://cloudpdp.api.permit.io' : 'http://localhost:7766'; - const defaultApiAddress: string = + const defaultApiAddress = process.env.API_TIER === 'prod' ? 'https://api.permit.io' : 'http://localhost:8000'; - - const token: string = process.env.PDP_API_KEY || ''; - const pdpAddress: string = process.env.PDP_URL || defaultPDPAddress; - const apiUrl = process.env.PDP_CONTROL_PLANE || defaultApiAddress; - - if (!token) { - t.fail('PDP_API_KEY is not configured, test cannot run!'); - } - - t.context.permit = new Permit({ + const token = process.env.PDP_API_KEY || ''; + if (!token) throw new Error('PDP_API_KEY is not configured, test cannot run!'); + const permit = new Permit({ token, - pdp: pdpAddress, - apiUrl, - log: { - level: 'debug', - }, + pdp: process.env.PDP_URL || defaultPDPAddress, + apiUrl: process.env.PDP_CONTROL_PLANE || defaultApiAddress, + log: { level: 'debug' }, + ...(opts.proxyFactsViaPdp ? { proxyFactsViaPdp: true } : {}), }); + return { permit, logger: LoggerFactory.createLogger(permit.config) }; +} - t.context.logger = LoggerFactory.createLogger(t.context.permit.config); -}; +export function handleApiError( + error: PermitApiError, + message: string, + logger: pino.Logger, +): never { + const err = `${message}: status=${error.response?.status}, url=${error.request.url}, method=${error.request.method}, details=${error.response?.data}`; + logger.error(err); + throw new Error(err); +} diff --git a/src/tests/helpers/wait-for.ts b/src/tests/helpers/wait-for.ts new file mode 100644 index 0000000..73ce71f --- /dev/null +++ b/src/tests/helpers/wait-for.ts @@ -0,0 +1,42 @@ +export interface WaitForOptions { + timeoutMs?: number; + intervalMs?: number; + message?: string; +} + +/** Polls `predicate` until it returns true or the timeout elapses; throws on timeout. */ +export async function waitFor( + predicate: () => boolean | Promise, + { timeoutMs = 30_000, intervalMs = 1_000, message }: WaitForOptions = {}, +): Promise { + const deadline = Date.now() + timeoutMs; + let lastError: unknown; + for (;;) { + try { + if (await predicate()) return; + } catch (err) { + lastError = err; + } + if (Date.now() >= deadline) { + throw new Error( + `waitFor timed out after ${timeoutMs}ms${message ? `: ${message}` : ''}` + + (lastError ? ` (last error: ${lastError})` : ''), + ); + } + await new Promise((r) => setTimeout(r, intervalMs)); + } +} + +/** Convenience: poll a permit.check(...) until it equals `expected`. */ +export async function waitForCheck( + check: () => Promise, + expected: boolean, + options?: WaitForOptions, +): Promise { + await waitFor(async () => (await check()) === expected, { + timeoutMs: 60_000, + intervalMs: 1_000, + message: `permit.check did not become ${expected}`, + ...options, + }); +} diff --git a/src/tests/module-imports/commonjs-import.spec.ts b/src/tests/module-imports/commonjs-import.spec.ts index 26530b5..a89937d 100644 --- a/src/tests/module-imports/commonjs-import.spec.ts +++ b/src/tests/module-imports/commonjs-import.spec.ts @@ -1,42 +1,36 @@ -import test from 'ava'; +import * as path from 'node:path'; -test('CommonJS require() import works correctly', async (t) => { - // This test will be compiled to JS and can use require() at runtime +// Validate the BUILT CommonJS artifact (build/index.js) the package actually +// ships, not the TypeScript source. This is a packaging-regression guard. +// __dirname is provided by Vitest at runtime and by @types/node under the +// project's commonjs module setting, avoiding import.meta (unsupported here). +const builtCjsPath = path.resolve(__dirname, '../../../build/index.js'); + +it('CommonJS require() of the built bundle exposes Permit', () => { // eslint-disable-next-line @typescript-eslint/no-var-requires - const { Permit } = require('../../index'); + const built = require(builtCjsPath); - t.is(typeof Permit, 'function'); - t.is(Permit.name, 'Permit'); + expect(typeof built.Permit).toBe('function'); + expect(built.Permit.name).toBe('Permit'); - // Test creating a Permit instance - const permit = new Permit({ + const permit = new built.Permit({ token: 'test-token', pdp: 'http://localhost:7766', }); - t.truthy(permit); - t.is(typeof permit.check, 'function'); - t.is(typeof permit.api, 'object'); - t.is(typeof permit.elements, 'object'); - t.is(typeof permit.config, 'object'); -}); - -test('CommonJS require() imports individual modules', async (t) => { - // eslint-disable-next-line @typescript-eslint/no-var-requires - const { Enforcer } = require('../../enforcement/enforcer'); - - t.is(typeof Enforcer, 'function'); - t.is(Enforcer.name, '_Enforcer'); + expect(permit).toBeTruthy(); + expect(typeof permit.check).toBe('function'); + expect(typeof permit.api).toBe('object'); + expect(typeof permit.elements).toBe('object'); + expect(typeof permit.config).toBe('object'); }); -test('CommonJS require() imports API modules', async (t) => { - // eslint-disable-next-line @typescript-eslint/no-var-requires - const { ApiClient } = require('../../api/api-client'); +it('CommonJS require() of the built bundle exposes the public API classes', () => { // eslint-disable-next-line @typescript-eslint/no-var-requires - const { ElementsClient } = require('../../api/elements'); + const built = require(builtCjsPath); - t.is(typeof ApiClient, 'function'); - t.is(ApiClient.name, 'ApiClient'); - t.is(typeof ElementsClient, 'function'); - t.is(ElementsClient.name, 'ElementsClient'); + expect(typeof built.ApiClient).toBe('function'); + expect(built.ApiClient.name).toBe('ApiClient'); + expect(typeof built.ElementsClient).toBe('function'); + expect(built.ElementsClient.name).toBe('ElementsClient'); }); diff --git a/src/tests/module-imports/esm-import.spec.ts b/src/tests/module-imports/esm-import.spec.ts index f8e3508..9025883 100644 --- a/src/tests/module-imports/esm-import.spec.ts +++ b/src/tests/module-imports/esm-import.spec.ts @@ -1,38 +1,33 @@ -import test from 'ava'; +import * as path from 'node:path'; +import { pathToFileURL } from 'node:url'; -import { ApiClient } from '../../api/api-client'; -import { ElementsClient } from '../../api/elements'; -import { Enforcer } from '../../enforcement/enforcer'; -import type { IResource, IUser } from '../../enforcement/interfaces'; -import { Permit } from '../../index'; +// Validate the BUILT ES Module artifact (build/index.mjs) the package actually +// ships, not the TypeScript source. This is a packaging-regression guard. +const builtMjsUrl = pathToFileURL(path.resolve(__dirname, '../../../build/index.mjs')).href; -test('ES Module import works correctly', async (t) => { - t.is(typeof Permit, 'function'); - t.is(Permit.name, 'Permit'); +it('ES Module import of the built bundle exposes Permit', async () => { + const built = await import(builtMjsUrl); - // Test creating a Permit instance - const permit = new Permit({ + expect(typeof built.Permit).toBe('function'); + expect(built.Permit.name).toBe('Permit'); + + const permit = new built.Permit({ token: 'test-token', pdp: 'http://localhost:7766', }); - t.truthy(permit); - t.is(typeof permit.check, 'function'); - t.is(typeof permit.api, 'object'); - t.is(typeof permit.elements, 'object'); - t.is(typeof permit.config, 'object'); + expect(permit).toBeTruthy(); + expect(typeof permit.check).toBe('function'); + expect(typeof permit.api).toBe('object'); + expect(typeof permit.elements).toBe('object'); + expect(typeof permit.config).toBe('object'); }); -test('ES Module imports individual modules', async (t) => { - t.is(typeof Enforcer, 'function'); - t.is(Enforcer.name, '_Enforcer'); - // IUser and IResource are types, so we can't test them at runtime - t.pass('Type imports work correctly'); -}); +it('ES Module import of the built bundle exposes the public API classes', async () => { + const built = await import(builtMjsUrl); -test('ES Module imports API modules', async (t) => { - t.is(typeof ApiClient, 'function'); - t.is(ApiClient.name, 'ApiClient'); - t.is(typeof ElementsClient, 'function'); - t.is(ElementsClient.name, 'ElementsClient'); + expect(typeof built.ApiClient).toBe('function'); + expect(built.ApiClient.name).toBe('ApiClient'); + expect(typeof built.ElementsClient).toBe('function'); + expect(built.ElementsClient.name).toBe('ElementsClient'); }); diff --git a/src/tests/module-imports/functionality.spec.ts b/src/tests/module-imports/functionality.spec.ts index ec36123..427ad8a 100644 --- a/src/tests/module-imports/functionality.spec.ts +++ b/src/tests/module-imports/functionality.spec.ts @@ -1,60 +1,63 @@ -import test from 'ava'; +import * as path from 'node:path'; +import { pathToFileURL } from 'node:url'; -test('ES Module functionality test', async (t) => { - const { Permit } = await import('../../index'); +// Exercise the BUILT bundles (build/index.mjs and build/index.js) end-to-end to +// guard against packaging regressions in either module format. +const builtCjsPath = path.resolve(__dirname, '../../../build/index.js'); +const builtMjsUrl = pathToFileURL(path.resolve(__dirname, '../../../build/index.mjs')).href; + +it('ES Module functionality test (built bundle)', async () => { + const { Permit } = await import(builtMjsUrl); - // Test creating a Permit instance with ES module import const permit = new Permit({ token: 'test-token', pdp: 'http://localhost:7766', }); - t.truthy(permit); - t.is(typeof permit.check, 'function'); - t.is(typeof permit.api, 'object'); - t.is(typeof permit.elements, 'object'); - t.is(typeof permit.config, 'object'); + expect(permit).toBeTruthy(); + expect(typeof permit.check).toBe('function'); + expect(typeof permit.api).toBe('object'); + expect(typeof permit.elements).toBe('object'); + expect(typeof permit.config).toBe('object'); // Test that the config was set correctly - t.is(permit.config.token, 'test-token'); - t.is(permit.config.pdp, 'http://localhost:7766'); + expect(permit.config.token).toBe('test-token'); + expect(permit.config.pdp).toBe('http://localhost:7766'); }); -test('CommonJS functionality test', async (t) => { +it('CommonJS functionality test (built bundle)', () => { // eslint-disable-next-line @typescript-eslint/no-var-requires - const { Permit } = require('../../index'); + const { Permit } = require(builtCjsPath); - // Test creating a Permit instance with CommonJS require const permit = new Permit({ token: 'test-token', pdp: 'http://localhost:7766', }); - t.truthy(permit); - t.is(typeof permit.check, 'function'); - t.is(typeof permit.api, 'object'); - t.is(typeof permit.elements, 'object'); - t.is(typeof permit.config, 'object'); + expect(permit).toBeTruthy(); + expect(typeof permit.check).toBe('function'); + expect(typeof permit.api).toBe('object'); + expect(typeof permit.elements).toBe('object'); + expect(typeof permit.config).toBe('object'); // Test that the config was set correctly - t.is(permit.config.token, 'test-token'); - t.is(permit.config.pdp, 'http://localhost:7766'); + expect(permit.config.token).toBe('test-token'); + expect(permit.config.pdp).toBe('http://localhost:7766'); }); -test('Dynamic import functionality test', async (t) => { - // Test dynamic import (ES modules) - const { Permit } = await import('../../index'); +it('Built bundle exposes nested API modules', async () => { + const { Permit } = await import(builtMjsUrl); const permit = new Permit({ token: 'test-token', pdp: 'http://localhost:7766', }); - t.truthy(permit); - t.is(typeof permit.check, 'function'); + expect(permit).toBeTruthy(); + expect(typeof permit.check).toBe('function'); // Test that we can access nested modules - t.is(typeof permit.api.users, 'object'); - t.is(typeof permit.api.resources, 'object'); - t.is(typeof permit.api.roles, 'object'); + expect(typeof permit.api.users).toBe('object'); + expect(typeof permit.api.resources).toBe('object'); + expect(typeof permit.api.roles).toBe('object'); }); diff --git a/src/tests/unit/retry-interceptor.spec.ts b/src/tests/unit/retry-interceptor.spec.ts index 5fd1e09..8edd5bb 100644 --- a/src/tests/unit/retry-interceptor.spec.ts +++ b/src/tests/unit/retry-interceptor.spec.ts @@ -1,4 +1,3 @@ -import test from 'ava'; import { AxiosError, AxiosInstance, InternalAxiosRequestConfig } from 'axios'; // Reaches the private REST (config.axiosInstance) and PDP (enforcer.client) @@ -68,108 +67,124 @@ async function newPermit(overrides: Record): Promise { +// Captures the delays axios-retry schedules via setTimeout while firing each +// callback immediately, so the retries proceed without any real waiting. +function captureScheduledDelays(): { delays: number[]; restore: () => void } { + const delays: number[] = []; + const realSetTimeout = globalThis.setTimeout; + const spy = vi.spyOn(globalThis, 'setTimeout').mockImplementation((( + fn: () => void, + delay?: number, + ): ReturnType => { + delays.push(delay ?? 0); + return realSetTimeout(fn, 0); + }) as typeof setTimeout); + return { delays, restore: () => spy.mockRestore() }; +} + +it('REST and PDP use separate axios instances', async () => { const permit = await newPermit({ retry: { maxRetries: 1 }, pdpRetry: { maxRetries: 1 } }); - t.not(permit.config.axiosInstance, permit.enforcer.client); + expect(permit.config.axiosInstance).not.toBe(permit.enforcer.client); }); -test('REST instance does not retry POST while PDP instance does', async (t) => { +it('REST instance does not retry POST while PDP instance does', async () => { const permit = await newPermit({ retry: tiny, pdpRetry: tiny }); const rest = installRejectingAdapter(permit.config.axiosInstance); const pdp = installRejectingAdapter(permit.enforcer.client); - await t.throwsAsync(() => permit.config.axiosInstance.request({ method: 'POST', url: '/x' })); - await t.throwsAsync(() => permit.enforcer.client.request({ method: 'POST', url: '/x' })); + await expect( + permit.config.axiosInstance.request({ method: 'POST', url: '/x' }), + ).rejects.toThrow(); + await expect(permit.enforcer.client.request({ method: 'POST', url: '/x' })).rejects.toThrow(); // REST never retries POST -> exactly one adapter call. - t.is(rest.count(), 1); + expect(rest.count()).toBe(1); // PDP retries POST (maxRetries: 2) -> initial call + two retries = three. - t.is(pdp.count(), 3); + expect(pdp.count()).toBe(3); }); -test('a retryable GET retries up to maxRetries then rejects', async (t) => { +it('a retryable GET retries up to maxRetries then rejects', async () => { const permit = await newPermit({ retry: tiny }); const rest = installRejectingAdapter(permit.config.axiosInstance); - await t.throwsAsync(() => permit.config.axiosInstance.request({ method: 'GET', url: '/x' })); + await expect(permit.config.axiosInstance.request({ method: 'GET', url: '/x' })).rejects.toThrow(); // maxRetries: 2 -> initial call + two retries = three total. - t.is(rest.count(), 3); + expect(rest.count()).toBe(3); }); -test('a non-retryable status (400) is not retried', async (t) => { +it('a non-retryable status (400) is not retried', async () => { const permit = await newPermit({ retry: tiny }); const rest = installRejectingAdapter(permit.config.axiosInstance, 400); - await t.throwsAsync(() => permit.config.axiosInstance.request({ method: 'GET', url: '/x' })); + await expect(permit.config.axiosInstance.request({ method: 'GET', url: '/x' })).rejects.toThrow(); - t.is(rest.count(), 1); + expect(rest.count()).toBe(1); }); -test('a disallowed method on the REST instance is not retried', async (t) => { +it('a disallowed method on the REST instance is not retried', async () => { const permit = await newPermit({ retry: tiny }); const rest = installRejectingAdapter(permit.config.axiosInstance); // PUT is in DEFAULT_RETRY_METHODS but POST is not, so POST must not retry. - await t.throwsAsync(() => permit.config.axiosInstance.request({ method: 'POST', url: '/x' })); + await expect( + permit.config.axiosInstance.request({ method: 'POST', url: '/x' }), + ).rejects.toThrow(); - t.is(rest.count(), 1); + expect(rest.count()).toBe(1); }); -test('disabled retry (retry: false) installs no retry', async (t) => { +it('disabled retry (retry: false) installs no retry', async () => { const permit = await newPermit({ retry: false }); const rest = installRejectingAdapter(permit.config.axiosInstance); - await t.throwsAsync(() => permit.config.axiosInstance.request({ method: 'GET', url: '/x' })); + await expect(permit.config.axiosInstance.request({ method: 'GET', url: '/x' })).rejects.toThrow(); - t.is(rest.count(), 1); + expect(rest.count()).toBe(1); }); -test('REST instance never retries POST even when the user opts POST in', async (t) => { +it('REST instance never retries POST even when the user opts POST in', async () => { // POST is stripped from the REST retryMethods regardless of user config, so // non-idempotent REST writes are never repeated. const permit = await newPermit({ retry: { ...tiny, retryMethods: ['GET', 'POST'] } }); const rest = installRejectingAdapter(permit.config.axiosInstance); - await t.throwsAsync(() => permit.config.axiosInstance.request({ method: 'POST', url: '/x' })); + await expect( + permit.config.axiosInstance.request({ method: 'POST', url: '/x' }), + ).rejects.toThrow(); - t.is(rest.count(), 1); + expect(rest.count()).toBe(1); }); -test.serial('maps axios-retry retryCount to our 0-based attempt number', async (t) => { +it('maps axios-retry retryCount to our 0-based attempt number', async () => { // axios-retry passes a 1-based retryCount; the interceptor must subtract one // so the first retry uses attempt 0. With jitter removed, attempt 0 -> 30ms // and attempt 1 (the off-by-one bug) -> 90ms. We capture the delay axios-retry // schedules via setTimeout instead of measuring wall-clock time, so the check // is deterministic and concurrency-safe. - const realRandom = Math.random; - const realSetTimeout = global.setTimeout; - const scheduledDelays: number[] = []; - Math.random = () => 0; // strip jitter - // Capture the delay, then fire immediately so the retry still proceeds. - global.setTimeout = ((fn: () => void, delay?: number): ReturnType => { - scheduledDelays.push(delay ?? 0); - return realSetTimeout(fn, 0); - }) as typeof setTimeout; + const randomSpy = vi.spyOn(Math, 'random').mockReturnValue(0); // strip jitter + const { delays: scheduledDelays, restore } = captureScheduledDelays(); try { const permit = await newPermit({ retry: { maxRetries: 1, retryDelay: 30, backoffMultiplier: 3, maxDelay: 10000 }, }); installRejectingAdapter(permit.config.axiosInstance); - await t.throwsAsync(() => permit.config.axiosInstance.request({ method: 'GET', url: '/x' })); + await expect( + permit.config.axiosInstance.request({ method: 'GET', url: '/x' }), + ).rejects.toThrow(); - t.true(scheduledDelays.includes(30), `expected a 30ms delay, got ${scheduledDelays.join(',')}`); - t.false(scheduledDelays.includes(90), 'attempt-1 (off-by-one) delay must not be used'); + expect(scheduledDelays.includes(30)).toBe(true); + expect(scheduledDelays.includes(90)).toBe(false); } finally { - Math.random = realRandom; - global.setTimeout = realSetTimeout; + restore(); + randomSpy.mockRestore(); } }); -test('a retry recovers: GET succeeds after one failed attempt', async (t) => { +it('a retry recovers: GET succeeds after one failed attempt', async () => { const permit = await newPermit({ retry: { maxRetries: 2, retryDelay: 1, maxDelay: 5, backoffMultiplier: 1 }, }); @@ -178,23 +193,18 @@ test('a retry recovers: GET succeeds after one failed attempt', async (t) => { const response = await permit.config.axiosInstance.request({ method: 'GET', url: '/x' }); // Initial failure + one retry that succeeds. - t.is(rest.count(), 2); - t.is(response.status, 200); - t.deepEqual(response.data, { ok: true }); + expect(rest.count()).toBe(2); + expect(response.status).toBe(200); + expect(response.data).toEqual({ ok: true }); }); -test.serial('Retry-After header drives the retry delay end-to-end', async (t) => { +it('Retry-After header drives the retry delay end-to-end', async () => { // 429 with `retry-after: 2` (seconds) must produce a 2000ms scheduled delay, // which exceeds the 10ms backoff and is under maxDelay, proving Retry-After // flows through calculateRetryDelay via our retryDelay callback. The // Retry-After branch returns the exact value with no jitter, so we only need // to capture the setTimeout delay (nothing is actually awaited). - const realSetTimeout = global.setTimeout; - const scheduledDelays: number[] = []; - global.setTimeout = ((fn: () => void, delay?: number): ReturnType => { - scheduledDelays.push(delay ?? 0); - return realSetTimeout(fn, 0); - }) as typeof setTimeout; + const { delays: scheduledDelays, restore } = captureScheduledDelays(); try { const permit = await newPermit({ retry: { maxRetries: 1, retryDelay: 10, maxDelay: 30000, backoffMultiplier: 1 }, @@ -219,15 +229,14 @@ test.serial('Retry-After header drives the retry delay end-to-end', async (t) => return Promise.reject(error); }; - await t.throwsAsync(() => permit.config.axiosInstance.request({ method: 'GET', url: '/x' })); + await expect( + permit.config.axiosInstance.request({ method: 'GET', url: '/x' }), + ).rejects.toThrow(); // 429 is retryable and GET is allowed, so it retried once. - t.is(calls, 2); - t.true( - scheduledDelays.includes(2000), - `expected a 2000ms delay, got ${scheduledDelays.join(',')}`, - ); + expect(calls).toBe(2); + expect(scheduledDelays.includes(2000)).toBe(true); } finally { - global.setTimeout = realSetTimeout; + restore(); } }); diff --git a/src/tests/unit/retry.spec.ts b/src/tests/unit/retry.spec.ts index 4d13dcd..60d8b16 100644 --- a/src/tests/unit/retry.spec.ts +++ b/src/tests/unit/retry.spec.ts @@ -1,4 +1,3 @@ -import test from 'ava'; import { AxiosError, AxiosHeaders } from 'axios'; import { @@ -35,101 +34,101 @@ function createAxiosError(status?: number): AxiosError { // Tests for RETRYABLE_STATUS_CODES // ============================================ -test('RETRYABLE_STATUS_CODES contains expected status codes', (t) => { - t.deepEqual(RETRYABLE_STATUS_CODES, [408, 429, 500, 502, 503, 504]); +it('RETRYABLE_STATUS_CODES contains expected status codes', () => { + expect(RETRYABLE_STATUS_CODES).toEqual([408, 429, 500, 502, 503, 504]); }); // ============================================ // Tests for defaultRetryCondition // ============================================ -test('defaultRetryCondition returns true for network errors (no response)', (t) => { +it('defaultRetryCondition returns true for network errors (no response)', () => { const error = createAxiosError(); - t.true(defaultRetryCondition(error)); + expect(defaultRetryCondition(error)).toBe(true); }); -test('defaultRetryCondition returns true for 408 Request Timeout', (t) => { +it('defaultRetryCondition returns true for 408 Request Timeout', () => { const error = createAxiosError(408); - t.true(defaultRetryCondition(error)); + expect(defaultRetryCondition(error)).toBe(true); }); -test('defaultRetryCondition returns true for 429 Too Many Requests', (t) => { +it('defaultRetryCondition returns true for 429 Too Many Requests', () => { const error = createAxiosError(429); - t.true(defaultRetryCondition(error)); + expect(defaultRetryCondition(error)).toBe(true); }); -test('defaultRetryCondition returns true for 500 Internal Server Error', (t) => { +it('defaultRetryCondition returns true for 500 Internal Server Error', () => { const error = createAxiosError(500); - t.true(defaultRetryCondition(error)); + expect(defaultRetryCondition(error)).toBe(true); }); -test('defaultRetryCondition returns true for 502 Bad Gateway', (t) => { +it('defaultRetryCondition returns true for 502 Bad Gateway', () => { const error = createAxiosError(502); - t.true(defaultRetryCondition(error)); + expect(defaultRetryCondition(error)).toBe(true); }); -test('defaultRetryCondition returns true for 503 Service Unavailable', (t) => { +it('defaultRetryCondition returns true for 503 Service Unavailable', () => { const error = createAxiosError(503); - t.true(defaultRetryCondition(error)); + expect(defaultRetryCondition(error)).toBe(true); }); -test('defaultRetryCondition returns true for 504 Gateway Timeout', (t) => { +it('defaultRetryCondition returns true for 504 Gateway Timeout', () => { const error = createAxiosError(504); - t.true(defaultRetryCondition(error)); + expect(defaultRetryCondition(error)).toBe(true); }); -test('defaultRetryCondition returns false for 400 Bad Request', (t) => { +it('defaultRetryCondition returns false for 400 Bad Request', () => { const error = createAxiosError(400); - t.false(defaultRetryCondition(error)); + expect(defaultRetryCondition(error)).toBe(false); }); -test('defaultRetryCondition returns false for 401 Unauthorized', (t) => { +it('defaultRetryCondition returns false for 401 Unauthorized', () => { const error = createAxiosError(401); - t.false(defaultRetryCondition(error)); + expect(defaultRetryCondition(error)).toBe(false); }); -test('defaultRetryCondition returns false for 403 Forbidden', (t) => { +it('defaultRetryCondition returns false for 403 Forbidden', () => { const error = createAxiosError(403); - t.false(defaultRetryCondition(error)); + expect(defaultRetryCondition(error)).toBe(false); }); -test('defaultRetryCondition returns false for 404 Not Found', (t) => { +it('defaultRetryCondition returns false for 404 Not Found', () => { const error = createAxiosError(404); - t.false(defaultRetryCondition(error)); + expect(defaultRetryCondition(error)).toBe(false); }); -test('defaultRetryCondition returns false for 422 Unprocessable Entity', (t) => { +it('defaultRetryCondition returns false for 422 Unprocessable Entity', () => { const error = createAxiosError(422); - t.false(defaultRetryCondition(error)); + expect(defaultRetryCondition(error)).toBe(false); }); -test('defaultRetryCondition returns false for 200 OK', (t) => { +it('defaultRetryCondition returns false for 200 OK', () => { const error = createAxiosError(200); - t.false(defaultRetryCondition(error)); + expect(defaultRetryCondition(error)).toBe(false); }); // ============================================ // Tests for parseRetryAfter // ============================================ -test('parseRetryAfter parses integer seconds correctly', (t) => { - t.is(parseRetryAfter('5'), 5000); - t.is(parseRetryAfter('60'), 60000); - t.is(parseRetryAfter('0'), 0); - t.is(parseRetryAfter('120'), 120000); +it('parseRetryAfter parses integer seconds correctly', () => { + expect(parseRetryAfter('5')).toBe(5000); + expect(parseRetryAfter('60')).toBe(60000); + expect(parseRetryAfter('0')).toBe(0); + expect(parseRetryAfter('120')).toBe(120000); }); -test('parseRetryAfter returns null for invalid values', (t) => { - t.is(parseRetryAfter('invalid'), null); - t.is(parseRetryAfter(''), null); - t.is(parseRetryAfter('abc123'), null); +it('parseRetryAfter returns null for invalid values', () => { + expect(parseRetryAfter('invalid')).toBe(null); + expect(parseRetryAfter('')).toBe(null); + expect(parseRetryAfter('abc123')).toBe(null); }); -test('parseRetryAfter returns null for non digits-only delta-seconds', (t) => { - t.is(parseRetryAfter('5abc'), null); +it('parseRetryAfter returns null for non digits-only delta-seconds', () => { + expect(parseRetryAfter('5abc')).toBe(null); }); -test.serial('parseRetryAfter parses HTTP-date format', (t) => { +it('parseRetryAfter parses HTTP-date format', () => { const realNow = Date.now; try { const fixedNow = Date.UTC(2015, 9, 21, 7, 28, 0); // "Wed, 21 Oct 2015 07:28:00 GMT" @@ -137,20 +136,20 @@ test.serial('parseRetryAfter parses HTTP-date format', (t) => { // 10 seconds in the future relative to the stubbed clock const httpDate = new Date(fixedNow + 10000).toUTCString(); - t.is(parseRetryAfter(httpDate), 10000); + expect(parseRetryAfter(httpDate)).toBe(10000); } finally { Date.now = realNow; } }); -test.serial('parseRetryAfter returns 0 for past HTTP-date', (t) => { +it('parseRetryAfter returns 0 for past HTTP-date', () => { const realNow = Date.now; try { const fixedNow = Date.UTC(2015, 9, 21, 7, 28, 0); Date.now = () => fixedNow; const httpDate = new Date(fixedNow - 10000).toUTCString(); - t.is(parseRetryAfter(httpDate), 0); + expect(parseRetryAfter(httpDate)).toBe(0); } finally { Date.now = realNow; } @@ -160,23 +159,23 @@ test.serial('parseRetryAfter returns 0 for past HTTP-date', (t) => { // Tests for calculateRetryDelay // ============================================ -test('calculateRetryDelay calculates exponential backoff correctly', (t) => { +it('calculateRetryDelay calculates exponential backoff correctly', () => { const config = { ...DEFAULT_RETRY_CONFIG, retryDelay: 1000, backoffMultiplier: 2 }; // First retry (attempt 0): 1000 * 2^0 = 1000ms + jitter const delay0 = calculateRetryDelay(0, config); - t.true(delay0 >= 1000 && delay0 <= 1100); // 10% jitter max + expect(delay0 >= 1000 && delay0 <= 1100).toBe(true); // 10% jitter max // Second retry (attempt 1): 1000 * 2^1 = 2000ms + jitter const delay1 = calculateRetryDelay(1, config); - t.true(delay1 >= 2000 && delay1 <= 2200); + expect(delay1 >= 2000 && delay1 <= 2200).toBe(true); // Third retry (attempt 2): 1000 * 2^2 = 4000ms + jitter const delay2 = calculateRetryDelay(2, config); - t.true(delay2 >= 4000 && delay2 <= 4400); + expect(delay2 >= 4000 && delay2 <= 4400).toBe(true); }); -test('calculateRetryDelay respects maxDelay limit', (t) => { +it('calculateRetryDelay respects maxDelay limit', () => { const config = { ...DEFAULT_RETRY_CONFIG, retryDelay: 1000, @@ -186,24 +185,24 @@ test('calculateRetryDelay respects maxDelay limit', (t) => { // Even with high multiplier, should cap at maxDelay const delay = calculateRetryDelay(5, config); - t.true(delay <= 5000); + expect(delay <= 5000).toBe(true); }); -test('calculateRetryDelay respects Retry-After header', (t) => { +it('calculateRetryDelay respects Retry-After header', () => { const config = { ...DEFAULT_RETRY_CONFIG, respectRetryAfter: true }; const delay = calculateRetryDelay(0, config, '3'); - t.is(delay, 3000); + expect(delay).toBe(3000); }); -test('calculateRetryDelay caps Retry-After at maxDelay', (t) => { +it('calculateRetryDelay caps Retry-After at maxDelay', () => { const config = { ...DEFAULT_RETRY_CONFIG, respectRetryAfter: true, maxDelay: 5000 }; const delay = calculateRetryDelay(0, config, '60'); - t.is(delay, 5000); + expect(delay).toBe(5000); }); -test('calculateRetryDelay ignores Retry-After when disabled', (t) => { +it('calculateRetryDelay ignores Retry-After when disabled', () => { const config = { ...DEFAULT_RETRY_CONFIG, respectRetryAfter: false, @@ -213,61 +212,61 @@ test('calculateRetryDelay ignores Retry-After when disabled', (t) => { const delay = calculateRetryDelay(0, config, '60'); // Should use exponential backoff, not Retry-After - t.true(delay >= 1000 && delay <= 1100); + expect(delay >= 1000 && delay <= 1100).toBe(true); }); // ============================================ // Tests for resolveRetryConfig // ============================================ -test('resolveRetryConfig returns defaults when config is undefined', (t) => { +it('resolveRetryConfig returns defaults when config is undefined', () => { const resolved = resolveRetryConfig(undefined); - t.false(resolved.enabled); - t.is(resolved.maxRetries, 3); - t.is(resolved.retryDelay, 1000); - t.is(resolved.backoffMultiplier, 2); - t.is(resolved.maxDelay, 30000); - t.true(resolved.respectRetryAfter); - t.deepEqual(resolved.retryMethods, ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE']); + expect(resolved.enabled).toBe(false); + expect(resolved.maxRetries).toBe(3); + expect(resolved.retryDelay).toBe(1000); + expect(resolved.backoffMultiplier).toBe(2); + expect(resolved.maxDelay).toBe(30000); + expect(resolved.respectRetryAfter).toBe(true); + expect(resolved.retryMethods).toEqual(['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE']); }); -test('resolveRetryConfig opts in when a config object is provided', (t) => { +it('resolveRetryConfig opts in when a config object is provided', () => { const resolved = resolveRetryConfig({ maxRetries: 5 }); - t.true(resolved.enabled); + expect(resolved.enabled).toBe(true); }); -test('resolveRetryConfig normalizes retry methods to uppercase', (t) => { +it('resolveRetryConfig normalizes retry methods to uppercase', () => { const resolved = resolveRetryConfig({ retryMethods: ['get', 'post'] }); - t.deepEqual(resolved.retryMethods, ['GET', 'POST']); + expect(resolved.retryMethods).toEqual(['GET', 'POST']); }); -test('resolveRetryConfig returns a copy that does not mutate the default', (t) => { +it('resolveRetryConfig returns a copy that does not mutate the default', () => { const resolved = resolveRetryConfig(undefined); resolved.retryMethods.push('PATCH'); - t.deepEqual(DEFAULT_RETRY_CONFIG.retryMethods, ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE']); + expect(DEFAULT_RETRY_CONFIG.retryMethods).toEqual(['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE']); }); -test('DEFAULT_RETRY_CONFIG.retryMethods is frozen', (t) => { - t.true(Object.isFrozen(DEFAULT_RETRY_CONFIG.retryMethods)); +it('DEFAULT_RETRY_CONFIG.retryMethods is frozen', () => { + expect(Object.isFrozen(DEFAULT_RETRY_CONFIG.retryMethods)).toBe(true); }); -test('RETRYABLE_STATUS_CODES is frozen', (t) => { - t.true(Object.isFrozen(RETRYABLE_STATUS_CODES)); +it('RETRYABLE_STATUS_CODES is frozen', () => { + expect(Object.isFrozen(RETRYABLE_STATUS_CODES)).toBe(true); }); -test('resolveRetryConfig returns disabled config when false', (t) => { +it('resolveRetryConfig returns disabled config when false', () => { const resolved = resolveRetryConfig(false); - t.false(resolved.enabled); + expect(resolved.enabled).toBe(false); // Other defaults should still be present - t.is(resolved.maxRetries, 3); + expect(resolved.maxRetries).toBe(3); }); -test('resolveRetryConfig merges user config with defaults', (t) => { +it('resolveRetryConfig merges user config with defaults', () => { const userConfig: IRetryConfig = { maxRetries: 5, retryDelay: 500, @@ -275,14 +274,14 @@ test('resolveRetryConfig merges user config with defaults', (t) => { const resolved = resolveRetryConfig(userConfig); - t.true(resolved.enabled); - t.is(resolved.maxRetries, 5); // User value - t.is(resolved.retryDelay, 500); // User value - t.is(resolved.backoffMultiplier, 2); // Default - t.is(resolved.maxDelay, 30000); // Default + expect(resolved.enabled).toBe(true); + expect(resolved.maxRetries).toBe(5); // User value + expect(resolved.retryDelay).toBe(500); // User value + expect(resolved.backoffMultiplier).toBe(2); // Default + expect(resolved.maxDelay).toBe(30000); // Default }); -test('resolveRetryConfig allows custom retry condition', (t) => { +it('resolveRetryConfig allows custom retry condition', () => { const customCondition = () => false; const userConfig: IRetryConfig = { retryCondition: customCondition, @@ -290,20 +289,20 @@ test('resolveRetryConfig allows custom retry condition', (t) => { const resolved = resolveRetryConfig(userConfig); - t.is(resolved.retryCondition, customCondition); + expect(resolved.retryCondition).toBe(customCondition); }); -test('resolveRetryConfig allows custom retry methods', (t) => { +it('resolveRetryConfig allows custom retry methods', () => { const userConfig: IRetryConfig = { retryMethods: ['GET', 'POST'], }; const resolved = resolveRetryConfig(userConfig); - t.deepEqual(resolved.retryMethods, ['GET', 'POST']); + expect(resolved.retryMethods).toEqual(['GET', 'POST']); }); -test('resolveRetryConfig allows disabling via enabled: false', (t) => { +it('resolveRetryConfig allows disabling via enabled: false', () => { const userConfig: IRetryConfig = { enabled: false, maxRetries: 10, @@ -311,56 +310,56 @@ test('resolveRetryConfig allows disabling via enabled: false', (t) => { const resolved = resolveRetryConfig(userConfig); - t.false(resolved.enabled); - t.is(resolved.maxRetries, 10); + expect(resolved.enabled).toBe(false); + expect(resolved.maxRetries).toBe(10); }); // ============================================ // Tests for DEFAULT_RETRY_CONFIG // ============================================ -test('DEFAULT_RETRY_CONFIG has expected default values', (t) => { - t.false(DEFAULT_RETRY_CONFIG.enabled); - t.is(DEFAULT_RETRY_CONFIG.maxRetries, 3); - t.is(DEFAULT_RETRY_CONFIG.retryDelay, 1000); - t.is(DEFAULT_RETRY_CONFIG.backoffMultiplier, 2); - t.is(DEFAULT_RETRY_CONFIG.maxDelay, 30000); - t.true(DEFAULT_RETRY_CONFIG.respectRetryAfter); - t.deepEqual(DEFAULT_RETRY_CONFIG.retryMethods, ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE']); - t.is(typeof DEFAULT_RETRY_CONFIG.retryCondition, 'function'); +it('DEFAULT_RETRY_CONFIG has expected default values', () => { + expect(DEFAULT_RETRY_CONFIG.enabled).toBe(false); + expect(DEFAULT_RETRY_CONFIG.maxRetries).toBe(3); + expect(DEFAULT_RETRY_CONFIG.retryDelay).toBe(1000); + expect(DEFAULT_RETRY_CONFIG.backoffMultiplier).toBe(2); + expect(DEFAULT_RETRY_CONFIG.maxDelay).toBe(30000); + expect(DEFAULT_RETRY_CONFIG.respectRetryAfter).toBe(true); + expect(DEFAULT_RETRY_CONFIG.retryMethods).toEqual(['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE']); + expect(typeof DEFAULT_RETRY_CONFIG.retryCondition).toBe('function'); }); // ============================================ // Tests for exports from SDK // ============================================ -test('retry types are exported from SDK', async (t) => { +it('retry types are exported from SDK', async () => { const sdk = await import('../../index'); - t.truthy(sdk.RETRYABLE_STATUS_CODES); - t.deepEqual(sdk.RETRYABLE_STATUS_CODES, [408, 429, 500, 502, 503, 504]); + expect(sdk.RETRYABLE_STATUS_CODES).toBeTruthy(); + expect(sdk.RETRYABLE_STATUS_CODES).toEqual([408, 429, 500, 502, 503, 504]); }); -test('Permit accepts retry configuration', async (t) => { +it('Permit accepts retry configuration', async () => { const { Permit } = await import('../../index'); // With retry off (opt-in default) const permit1 = new Permit({ token: 'test' }); - t.truthy(permit1); + expect(permit1).toBeTruthy(); // With custom retry config const permit2 = new Permit({ token: 'test', retry: { maxRetries: 5 }, }); - t.truthy(permit2); + expect(permit2).toBeTruthy(); // With retry disabled const permit3 = new Permit({ token: 'test', retry: false, }); - t.truthy(permit3); + expect(permit3).toBeTruthy(); // With separate PDP retry config const permit4 = new Permit({ @@ -368,5 +367,5 @@ test('Permit accepts retry configuration', async (t) => { retry: { maxRetries: 3 }, pdpRetry: { maxRetries: 5 }, }); - t.truthy(permit4); + expect(permit4).toBeTruthy(); }); diff --git a/src/tests/unit/wait-for-sync.spec.ts b/src/tests/unit/wait-for-sync.spec.ts new file mode 100644 index 0000000..7409de6 --- /dev/null +++ b/src/tests/unit/wait-for-sync.spec.ts @@ -0,0 +1,92 @@ +import { Permit } from '../../index'; + +// `openapiClientConfig` is a protected member of BasePermitApi; the tests read it +// through this shape to verify the headers waitForSync mutates on the clone. +interface ApiWithConfig { + openapiClientConfig: { basePath?: string; baseOptions: { headers: Record } }; +} + +function headersOf(api: unknown): Record { + return (api as unknown as ApiWithConfig).openapiClientConfig.baseOptions.headers; +} + +function basePathOf(api: unknown): string | undefined { + return (api as unknown as ApiWithConfig).openapiClientConfig.basePath; +} + +const PDP_ADDRESS = 'http://localhost:7766'; + +// waitForSync only mutates request headers on a cloned client (see base.ts +// BaseFactsPermitAPI.waitForSync); it performs no network I/O, so these tests +// are fully deterministic and need no PDP/backend. + +it('waitForSync(0) returns a cloned client carrying X-Wait-Timeout: 0', () => { + const permit = new Permit({ + token: 'test-token', + pdp: PDP_ADDRESS, + proxyFactsViaPdp: true, + }); + + const synced = permit.api.users.waitForSync(0); + + // A distinct clone is returned, leaving the original untouched. + expect(synced).not.toBe(permit.api.users); + expect(headersOf(synced)['X-Wait-Timeout']).toBe('0'); + // Original client must not have gained the wait header. + expect(headersOf(permit.api.users)['X-Wait-Timeout']).toBeUndefined(); +}); + +it('waitForSync(null) returns a clone carrying X-Wait-Timeout as an empty string', () => { + const permit = new Permit({ + token: 'test-token', + pdp: PDP_ADDRESS, + proxyFactsViaPdp: true, + }); + + const synced = permit.api.users.waitForSync(null); + + // base.ts maps a null timeout to '' (wait indefinitely), not to '0'. + expect(synced).not.toBe(permit.api.users); + expect(headersOf(synced)['X-Wait-Timeout']).toBe(''); +}); + +it('waitForSync(timeout, policy) sets the X-Timeout-Policy header on the clone', () => { + const permit = new Permit({ + token: 'test-token', + pdp: PDP_ADDRESS, + proxyFactsViaPdp: true, + }); + + const synced = permit.api.users.waitForSync(5, 'fail'); + + expect(headersOf(synced)['X-Wait-Timeout']).toBe('5'); + expect(headersOf(synced)['X-Timeout-Policy']).toBe('fail'); + // The original client carries neither header. + expect(headersOf(permit.api.users)['X-Timeout-Policy']).toBeUndefined(); +}); + +it('the proxied facts client points its basePath at the PDP', () => { + const permit = new Permit({ + token: 'test-token', + pdp: PDP_ADDRESS, + proxyFactsViaPdp: true, + }); + + // With proxyFactsViaPdp the facts API (and its waitForSync clone) talk to the + // PDP rather than the control-plane API URL. + expect(basePathOf(permit.api.users)).toBe(PDP_ADDRESS); + expect(basePathOf(permit.api.users.waitForSync(0))).toBe(PDP_ADDRESS); +}); + +it('waitForSync is a no-op without proxyFactsViaPdp (returns self, no wait header)', () => { + const permit = new Permit({ + token: 'test-token', + pdp: PDP_ADDRESS, + }); + + const synced = permit.api.users.waitForSync(0); + + // Without proxyFactsViaPdp the same instance is returned and no header is set. + expect(synced).toBe(permit.api.users); + expect(headersOf(synced)['X-Wait-Timeout']).toBeUndefined(); +}); diff --git a/tsconfig.json b/tsconfig.json index f766dcf..057c1c2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,6 +9,7 @@ "inlineSourceMap": true, "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, "resolveJsonModule": true /* Include modules imported with .json extension. */, + "skipLibCheck": true /* Skip type checking of declaration files (required: Vitest 4 ships .d.ts using newer lib/Vite types incompatible with this project's es2017 target). */, "strict": true /* Enable all strict type-checking options. */, /* Strict Type-Checking Options */ // "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, @@ -35,7 +36,8 @@ "DOM" ], "types": [ - "node" + "node", + "vitest/globals" ], "typeRoots": [ "node_modules/@types", diff --git a/tsup.config.ts b/tsup.config.ts index 86ffdea..09dc930 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -1,7 +1,7 @@ import { defineConfig } from 'tsup'; export default defineConfig({ - entry: ['src/**/*.ts'], + entry: ['src/**/*.ts', '!src/tests/**'], format: ['cjs', 'esm'], dts: false, splitting: false, diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..f763d80 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,64 @@ +import { defineConfig } from 'vitest/config'; + +// Backend suites (integration + e2e) mutate shared Permit backend state, so they +// run one file at a time (replicating AVA's separate sequential processes). +// +// IMPORTANT: `fileParallelism: false` / `maxWorkers: 1` only serialize files +// WITHIN a single project. They do NOT make the `integration` and `e2e` +// projects mutually exclusive. Cross-project isolation relies on each suite +// running in its OWN `vitest run` invocation. A bare `vitest run` (all projects) +// or `vitest run --project integration --project e2e` would schedule both +// backend suites together and let them interleave on the shared environment, +// corrupting state. Run them only via the supported entry points, which invoke +// each project separately: `yarn test:integration`, `yarn test:e2e`, or +// `yarn test:ci:full` (which chains the separate invocations). +const serialBackend = { + // Vitest 4 removed `poolOptions`; `singleFork` is replaced by the top-level + // `fileParallelism: false` (which pins this project to a single worker), so + // these backend files run one at a time in one forked process. + fileParallelism: false, + sequence: { concurrent: false }, + pool: 'forks' as const, + maxWorkers: 1, + isolate: true, + testTimeout: 300_000, + hookTimeout: 300_000, +}; + +export default defineConfig({ + test: { + globals: true, + include: ['src/tests/**/*.spec.ts'], + projects: [ + { test: { name: 'unit', globals: true, include: ['src/tests/unit/**/*.spec.ts'] } }, + { + test: { + name: 'module-imports', + globals: true, + include: ['src/tests/module-imports/**/*.spec.ts'], + }, + }, + { + test: { + name: 'integration', + globals: true, + include: ['src/tests/endpoints/**/*.spec.ts'], + ...serialBackend, + }, + }, + { + test: { + name: 'e2e', + globals: true, + include: ['src/tests/e2e/**/*.spec.ts'], + ...serialBackend, + }, + }, + ], + coverage: { + provider: 'v8', + include: ['src/utils/retry.ts', 'src/utils/retry-interceptor.ts'], + reporter: ['text', 'html', 'lcov'], + }, + }, +}); diff --git a/yarn.lock b/yarn.lock index 4d08fd7..088f184 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,22 +7,14 @@ resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@ava/typescript@^1.1.1": - version "1.1.1" - resolved "https://registry.npmjs.org/@ava/typescript/-/typescript-1.1.1.tgz" - integrity sha512-KbLUAe2cWXK63WLK6LnOJonjwEDU/8MNXCOA1ooX/YFZgKRmeAD1kZu+2K0ks5fnOCEcckNQAooyBNGdZUmMQA== +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== dependencies: - escape-string-regexp "^2.0.0" + "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.27.1": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1": version "7.27.1" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz" integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== @@ -31,40 +23,7 @@ js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/compat-data@^7.22.9": - version "7.22.9" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz" - integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== - -"@babel/core@^7.0.0", "@babel/core@^7.7.5": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz" - integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.10" - "@babel/generator" "^7.22.10" - "@babel/helper-compilation-targets" "^7.22.10" - "@babel/helper-module-transforms" "^7.22.9" - "@babel/helpers" "^7.22.10" - "@babel/parser" "^7.22.10" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.10" - "@babel/types" "^7.22.10" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.1" - -"@babel/generator@^7.22.10", "@babel/generator@^7.27.3": +"@babel/generator@^7.27.3": version "7.27.5" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz" integrity sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw== @@ -75,77 +34,25 @@ "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" -"@babel/helper-compilation-targets@^7.22.10": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz" - integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.5" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-environment-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz" - integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== - -"@babel/helper-module-imports@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz" - integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-transforms@^7.22.9": - version "7.22.9" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz" - integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - "@babel/helper-string-parser@^7.27.1": version "7.27.1" resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== +"@babel/helper-string-parser@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz#7f0871d99824d23137d60f86fcf6130fd5a1b51f" + integrity sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw== + "@babel/helper-validator-identifier@^7.22.5", "@babel/helper-validator-identifier@^7.27.1": version "7.27.1" resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz" integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== -"@babel/helper-validator-option@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz" - integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== - -"@babel/helpers@^7.22.10": - version "7.22.10" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz" - integrity sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw== - dependencies: - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.10" - "@babel/types" "^7.22.10" +"@babel/helper-validator-identifier@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz#bd87084ced0c796ec46bda492de6e83d29e89fc2" + integrity sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg== "@babel/highlight@^7.10.4": version "7.22.10" @@ -156,13 +63,20 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.22.10", "@babel/parser@^7.27.2", "@babel/parser@^7.27.4", "@babel/parser@^7.27.5": +"@babel/parser@^7.27.2", "@babel/parser@^7.27.4", "@babel/parser@^7.27.5": version "7.27.5" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz" integrity sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg== dependencies: "@babel/types" "^7.27.3" +"@babel/parser@^7.29.3": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.7.tgz#837b87387cbf5ec5530cb634b3c622f68edb9334" + integrity sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg== + dependencies: + "@babel/types" "^7.29.7" + "@babel/runtime@^7.21.0": version "7.22.10" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz" @@ -170,7 +84,7 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.5", "@babel/template@^7.27.2": +"@babel/template@^7.27.2": version "7.27.2" resolved "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz" integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== @@ -179,7 +93,7 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" -"@babel/traverse@^7.22.10", "@babel/traverse@^7.24.8": +"@babel/traverse@^7.24.8": version "7.27.4" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz" integrity sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA== @@ -192,7 +106,7 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.27.1", "@babel/types@^7.27.3": +"@babel/types@^7.27.1", "@babel/types@^7.27.3": version "7.27.6" resolved "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz" integrity sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q== @@ -200,6 +114,19 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" +"@babel/types@^7.29.0", "@babel/types@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.7.tgz#8005e31d82712ee7adaef6e23c63b71a62770a92" + integrity sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA== + dependencies: + "@babel/helper-string-parser" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" + +"@bcoe/v8-coverage@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz#bbe12dca5b4ef983a0d0af4b07b9bc90ea0ababa" + integrity sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA== + "@bitauth/libauth@^1.17.1": version "1.19.1" resolved "https://registry.npmjs.org/@bitauth/libauth/-/libauth-1.19.1.tgz" @@ -257,13 +184,6 @@ dependencies: chalk "^4.1.0" -"@concordance/react@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@concordance/react/-/react-2.0.0.tgz" - integrity sha512-huLSkUuM2/P+U0uy2WwlKuixMsTODD8p4JVQBI4VKeopkiN0C7M3N9XYVawb4M+4spN5RrO/eLhk7KoQX6nsfA== - dependencies: - arrify "^1.0.1" - "@cspell/dict-aws@^1.0.13": version "1.0.14" resolved "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-1.0.14.tgz" @@ -314,16 +234,16 @@ resolved "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-1.0.26.tgz" integrity sha512-hz1yETUiRJM7yjN3mITSnxcmZaEyaBbyJhpZPpg+cKUil+xhHeZ2wwfbRc83QHGmlqEuDWbdCFqKSpCDJYpYhg== -"@cspell/dict-en_us@^1.2.39": - version "1.2.45" - resolved "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-1.2.45.tgz" - integrity sha512-UPwR4rfiJCxnS+Py+EK9E4AUj3aPZE4p/yBRSHN+5aBQConlI0lLDtMceH5wlupA/sQTU1ERZGPJA9L96jVSyQ== - "@cspell/dict-en-gb@^1.1.27": version "1.1.33" resolved "https://registry.npmjs.org/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz" integrity sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g== +"@cspell/dict-en_us@^1.2.39": + version "1.2.45" + resolved "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-1.2.45.tgz" + integrity sha512-UPwR4rfiJCxnS+Py+EK9E4AUj3aPZE4p/yBRSHN+5aBQConlI0lLDtMceH5wlupA/sQTU1ERZGPJA9L96jVSyQ== + "@cspell/dict-filetypes@^1.1.5": version "1.1.8" resolved "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-1.1.8.tgz" @@ -436,11 +356,153 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" +"@emnapi/core@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.11.1.tgz#b9e1064f3a6b1631e241e638eb48d736bfd372a6" + integrity sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ== + dependencies: + "@emnapi/wasi-threads" "1.2.2" + tslib "^2.4.0" + +"@emnapi/runtime@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.11.1.tgz#58f1f3d5d81a9b12f793ab688c96371901027c24" + integrity sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz#4c93becf5bfa3b13d1bbdcc06aee38321ad8139a" + integrity sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA== + dependencies: + tslib "^2.4.0" + +"@esbuild/aix-ppc64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz#4e0f91776c2b340e75558f60552195f6fad09f18" + integrity sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA== + +"@esbuild/android-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz#bc766407f1718923f6b8079c8c61bf86ac3a6a4f" + integrity sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg== + +"@esbuild/android-arm@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.5.tgz#4290d6d3407bae3883ad2cded1081a234473ce26" + integrity sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA== + +"@esbuild/android-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.5.tgz#40c11d9cbca4f2406548c8a9895d321bc3b35eff" + integrity sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw== + "@esbuild/darwin-arm64@0.25.5": version "0.25.5" resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz" integrity sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ== +"@esbuild/darwin-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz#e27a5d92a14886ef1d492fd50fc61a2d4d87e418" + integrity sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ== + +"@esbuild/freebsd-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz#97cede59d638840ca104e605cdb9f1b118ba0b1c" + integrity sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw== + +"@esbuild/freebsd-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz#71c77812042a1a8190c3d581e140d15b876b9c6f" + integrity sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw== + +"@esbuild/linux-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz#f7b7c8f97eff8ffd2e47f6c67eb5c9765f2181b8" + integrity sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg== + +"@esbuild/linux-arm@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz#2a0be71b6cd8201fa559aea45598dffabc05d911" + integrity sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw== + +"@esbuild/linux-ia32@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz#763414463cd9ea6fa1f96555d2762f9f84c61783" + integrity sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA== + +"@esbuild/linux-loong64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz#428cf2213ff786a502a52c96cf29d1fcf1eb8506" + integrity sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg== + +"@esbuild/linux-mips64el@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz#5cbcc7fd841b4cd53358afd33527cd394e325d96" + integrity sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg== + +"@esbuild/linux-ppc64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz#0d954ab39ce4f5e50f00c4f8c4fd38f976c13ad9" + integrity sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ== + +"@esbuild/linux-riscv64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz#0e7dd30730505abd8088321e8497e94b547bfb1e" + integrity sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA== + +"@esbuild/linux-s390x@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz#5669af81327a398a336d7e40e320b5bbd6e6e72d" + integrity sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ== + +"@esbuild/linux-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz#b2357dd153aa49038967ddc1ffd90c68a9d2a0d4" + integrity sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw== + +"@esbuild/netbsd-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz#53b4dfb8fe1cee93777c9e366893bd3daa6ba63d" + integrity sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw== + +"@esbuild/netbsd-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz#a0206f6314ce7dc8713b7732703d0f58de1d1e79" + integrity sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ== + +"@esbuild/openbsd-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz#2a796c87c44e8de78001d808c77d948a21ec22fd" + integrity sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw== + +"@esbuild/openbsd-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz#28d0cd8909b7fa3953af998f2b2ed34f576728f0" + integrity sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg== + +"@esbuild/sunos-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz#a28164f5b997e8247d407e36c90d3fd5ddbe0dc5" + integrity sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA== + +"@esbuild/win32-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz#6eadbead38e8bd12f633a5190e45eff80e24007e" + integrity sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw== + +"@esbuild/win32-ia32@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz#bab6288005482f9ed2adb9ded7e88eba9a62cc0d" + integrity sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ== + +"@esbuild/win32-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz#7fc114af5f6563f19f73324b5d5ff36ece0803d1" + integrity sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g== + "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" @@ -487,30 +549,7 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/nyc-config-typescript@^1.0.1": - version "1.0.2" - resolved "https://registry.npmjs.org/@istanbuljs/nyc-config-typescript/-/nyc-config-typescript-1.0.2.tgz" - integrity sha512-iKGIyMoyJuFnJRSVTZ78POIRvNnwZaWIf8vG4ZS3rQq58MMDrqEX2nnzx0R28V2X8JvmKYiqY9FP2hlJsm8A0w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": version "0.3.8" resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz" integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== @@ -534,13 +573,10 @@ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== -"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.25" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" +"@jridgewell/sourcemap-codec@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" @@ -550,11 +586,34 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jridgewell/trace-mapping@^0.3.31": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@lukeed/csprng@^1.0.0": version "1.1.0" resolved "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz" integrity sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA== +"@napi-rs/wasm-runtime@^1.1.6": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz#ed33806d0f9be98dc76d0c3d4fd872fda701b5d5" + integrity sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg== + dependencies: + "@tybys/wasm-util" "^0.10.3" + "@nestjs/axios@0.1.0": version "0.1.0" resolved "https://registry.npmjs.org/@nestjs/axios/-/axios-0.1.0.tgz" @@ -562,26 +621,26 @@ dependencies: axios "0.27.2" -"@nestjs/common@^7.0.0 || ^8.0.0 || ^9.0.0", "@nestjs/common@^9.0.0", "@nestjs/common@9.3.11": +"@nestjs/common@9.3.11": version "9.3.11" resolved "https://registry.npmjs.org/@nestjs/common/-/common-9.3.11.tgz" integrity sha512-IFZ2G/5UKWC2Uo7tJ4SxGed2+aiA+sJyWeWsGTogKVDhq90oxVBToh+uCDeI31HNUpqYGoWmkletfty42zUd8A== dependencies: + uid "2.0.1" iterare "1.2.1" tslib "2.5.0" - uid "2.0.1" "@nestjs/core@9.3.11": version "9.3.11" resolved "https://registry.npmjs.org/@nestjs/core/-/core-9.3.11.tgz" integrity sha512-CI27a2JFd5rvvbgkalWqsiwQNhcP4EAG5BUK8usjp29wVp1kx30ghfBT8FLqIgmkRVo65A0IcEnWsxeXMntkxQ== dependencies: + uid "2.0.1" "@nuxtjs/opencollective" "0.3.2" fast-safe-stringify "2.1.1" iterare "1.2.1" path-to-regexp "3.2.0" tslib "2.5.0" - uid "2.0.1" "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -591,7 +650,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -635,37 +694,204 @@ rxjs "7.8.0" tslib "2.0.3" +"@oxc-project/types@=0.137.0": + version "0.137.0" + resolved "https://registry.yarnpkg.com/@oxc-project/types/-/types-0.137.0.tgz#56e77f8bb221fa05f18b1cd34d73f94f0954a773" + integrity sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA== + "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@rolldown/binding-android-arm64@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.3.tgz#cc6153029c3d9afc9caaae2dc362d899ae94ac4f" + integrity sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g== + +"@rolldown/binding-darwin-arm64@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.3.tgz#3af681a5d7610340257b3ac7753353b23e884765" + integrity sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw== + +"@rolldown/binding-darwin-x64@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.3.tgz#80ada35e9f35efb7e48a887444ce2052f615d645" + integrity sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw== + +"@rolldown/binding-freebsd-x64@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.3.tgz#65b2bbb82f005f08aeeff0b6d81e19be68360201" + integrity sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw== + +"@rolldown/binding-linux-arm-gnueabihf@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.3.tgz#7e8d34ad0c7bcfd3baed268e9798571e3888ca71" + integrity sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg== + +"@rolldown/binding-linux-arm64-gnu@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.3.tgz#52bbf400ff219bda1e56c042160d96deb08bfecc" + integrity sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA== + +"@rolldown/binding-linux-arm64-musl@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.3.tgz#9e82899186f73329f3d8155fa1618ae2e86ffa2a" + integrity sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w== + +"@rolldown/binding-linux-ppc64-gnu@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.3.tgz#050520177316586ccad816eb466ea11015e17ba7" + integrity sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw== + +"@rolldown/binding-linux-s390x-gnu@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.3.tgz#50efa7b20219c6e31235fded0fd3427f36123e5a" + integrity sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA== + +"@rolldown/binding-linux-x64-gnu@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.3.tgz#c5973445113dff50d4077d0edaa4b8a69533dc6f" + integrity sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg== + +"@rolldown/binding-linux-x64-musl@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.3.tgz#ddb023f7fc98ccbb8c1b683545216ca7b4e7ebdd" + integrity sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g== + +"@rolldown/binding-openharmony-arm64@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.3.tgz#832a6da3472722427c73d178c75681858b76aeed" + integrity sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ== + +"@rolldown/binding-wasm32-wasi@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.3.tgz#256cdcc06ad9ada611606526f319642fc0830b0f" + integrity sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg== + dependencies: + "@emnapi/core" "1.11.1" + "@emnapi/runtime" "1.11.1" + "@napi-rs/wasm-runtime" "^1.1.6" + +"@rolldown/binding-win32-arm64-msvc@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.3.tgz#e735c7024a5e17ebaf13689112fa0bdfc6886c38" + integrity sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g== + +"@rolldown/binding-win32-x64-msvc@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.3.tgz#f06c09db5c8ad4b6904b4d406c9b6f17f392b5c6" + integrity sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA== + +"@rolldown/pluginutils@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz#e3fcee093fbb5ce765e1ad088ff4de2889f6f9be" + integrity sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw== + +"@rollup/rollup-android-arm-eabi@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.0.tgz#a3e4e4b2baf0bade6918cf5135c3ef7eee653196" + integrity sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA== + +"@rollup/rollup-android-arm64@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.0.tgz#63566b0e76c62d4f96d44448f38a290562280200" + integrity sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw== + "@rollup/rollup-darwin-arm64@4.44.0": version "4.44.0" resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.0.tgz" integrity sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA== -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@rollup/rollup-darwin-x64@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.0.tgz#bfe3059440f7032de11e749ece868cd7f232e609" + integrity sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ== -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" +"@rollup/rollup-freebsd-arm64@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.0.tgz#d5d4c6cd3b8acb7493b76227d8b2b4a2d732a37b" + integrity sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ== -"@tokenizer/token@^0.3.0": - version "0.3.0" - resolved "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz" - integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== +"@rollup/rollup-freebsd-x64@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.0.tgz#cb4e1547b572cd0144c5fbd6c4a0edfed5fe6024" + integrity sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g== -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@rollup/rollup-linux-arm-gnueabihf@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.0.tgz#feb81bd086f6a469777f75bec07e1bdf93352e69" + integrity sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ== + +"@rollup/rollup-linux-arm-musleabihf@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.0.tgz#68bff1c6620c155c9d8f5ee6a83c46eb50486f18" + integrity sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg== + +"@rollup/rollup-linux-arm64-gnu@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.0.tgz#dbc5036a85e3ca3349887c8bdbebcfd011e460b0" + integrity sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ== + +"@rollup/rollup-linux-arm64-musl@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.0.tgz#72efc633aa0b93531bdfc69d70bcafa88e6152fc" + integrity sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q== + +"@rollup/rollup-linux-loongarch64-gnu@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.0.tgz#9b6a49afde86c8f57ca11efdf8fd8d7c52048817" + integrity sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg== + +"@rollup/rollup-linux-powerpc64le-gnu@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.0.tgz#93cb96073efab0cdbf419c8dfc44b5e2bd815139" + integrity sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ== + +"@rollup/rollup-linux-riscv64-gnu@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.0.tgz#028708f73c8130ae924e5c3755de50fe93687249" + integrity sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA== + +"@rollup/rollup-linux-riscv64-musl@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.0.tgz#878bfb158b2cf6671b7611fd58e5c80d9144ac6c" + integrity sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q== + +"@rollup/rollup-linux-s390x-gnu@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.0.tgz#59b4ebb2129d34b7807ed8c462ff0baaefca9ad4" + integrity sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA== + +"@rollup/rollup-linux-x64-gnu@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.0.tgz#597d40f60d4b15bedbbacf2491a69c5b67a58e93" + integrity sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw== + +"@rollup/rollup-linux-x64-musl@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.0.tgz#0a062d6fee35ec4fbb607b2a9d933a9372ccf63a" + integrity sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA== + +"@rollup/rollup-win32-arm64-msvc@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.0.tgz#41ffab489857987c75385b0fc8cccf97f7e69d0a" + integrity sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w== + +"@rollup/rollup-win32-ia32-msvc@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.0.tgz#d9fb61d98eedfa52720b6ed9f31442b3ef4b839f" + integrity sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA== + +"@rollup/rollup-win32-x64-msvc@4.44.0": + version "4.44.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.0.tgz#a36e79b6ccece1533f777a1bca1f89c13f0c5f62" + integrity sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ== + +"@standard-schema/spec@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.1.0.tgz#a79b55dbaf8604812f52d140b2c9ab41bc150bb8" + integrity sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w== "@tsconfig/node10@^1.0.7": version "1.0.9" @@ -687,6 +913,13 @@ resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== +"@tybys/wasm-util@^0.10.3": + version "0.10.3" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.3.tgz#015cba9e9dd47ce14d03d2a8c5d547bfb169665d" + integrity sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg== + dependencies: + tslib "^2.4.0" + "@types/body-parser@*": version "1.19.2" resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz" @@ -695,6 +928,14 @@ "@types/connect" "*" "@types/node" "*" +"@types/chai@^5.2.2": + version "5.2.3" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.2.3.tgz#8e9cd9e1c3581fa6b341a5aed5588eb285be0b4a" + integrity sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA== + dependencies: + "@types/deep-eql" "*" + assertion-error "^2.0.1" + "@types/connect@*": version "3.4.35" resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" @@ -702,11 +943,21 @@ dependencies: "@types/node" "*" +"@types/deep-eql@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" + integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== + "@types/estree@1.0.8": version "1.0.8" resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== +"@types/estree@^1.0.0": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.9.tgz#cf3f0e876d7bee15a93ab925b82bf570a3904a24" + integrity sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg== + "@types/express-serve-static-core@^4.17.33": version "4.17.35" resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz" @@ -757,7 +1008,7 @@ resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz" integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== -"@types/node@*", "@types/node@^14.14.14": +"@types/node@*": version "14.18.54" resolved "https://registry.npmjs.org/@types/node/-/node-14.18.54.tgz" integrity sha512-uq7O52wvo2Lggsx1x21tKZgqkJpvwCseBBPtX/nKQfpVlEsLOb11zZ1CRsWUKvJF0+lzuA9jwvA7Pr2Wt7i3xw== @@ -767,6 +1018,13 @@ resolved "https://registry.npmjs.org/@types/node/-/node-20.4.7.tgz" integrity sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g== +"@types/node@^20.14.0": + version "20.19.43" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.43.tgz#fcecf580ba42a0db55cf404c372c97973c376c97" + integrity sha512-6oYBAi5ikg4Pl+kGsoYtawUMBT2zZMCvPNF7pVLnHZfd1zf38DRiWn/gT01RYCdUqkv7Fhr+C9ot4/tb+2sVvA== + dependencies: + undici-types "~6.21.0" + "@types/normalize-package-data@^2.4.0": version "2.4.1" resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" @@ -818,7 +1076,7 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@^4.9.1", "@typescript-eslint/experimental-utils@4.33.0": +"@typescript-eslint/experimental-utils@4.33.0", "@typescript-eslint/experimental-utils@^4.9.1": version "4.33.0" resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz" integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== @@ -830,7 +1088,7 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@^4.0.0", "@typescript-eslint/parser@^4.0.1": +"@typescript-eslint/parser@^4.0.1": version "4.33.0" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz" integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== @@ -874,6 +1132,90 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" +"@vitest/coverage-v8@^4.1.0": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-4.1.9.tgz#d4c26aa9f7bd8ca99ed6bbd1e97afcdbb77e9b89" + integrity sha512-G9/lgqibheLVBDRuya45EbsEXTYcWoSG+TLg7i2axuzx0Eq62eXn+aWXyaVdV5vKvFSWd6ywcX8hA7la9Pvu8g== + dependencies: + "@bcoe/v8-coverage" "^1.0.2" + "@vitest/utils" "4.1.9" + ast-v8-to-istanbul "^1.0.0" + istanbul-lib-coverage "^3.2.2" + istanbul-lib-report "^3.0.1" + istanbul-reports "^3.2.0" + magicast "^0.5.2" + obug "^2.1.1" + std-env "^4.0.0-rc.1" + tinyrainbow "^3.1.0" + +"@vitest/expect@4.1.9": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-4.1.9.tgz#ba1af73ae53262e3dc9b518cb7b76fb614e0ef53" + integrity sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA== + dependencies: + "@standard-schema/spec" "^1.1.0" + "@types/chai" "^5.2.2" + "@vitest/spy" "4.1.9" + "@vitest/utils" "4.1.9" + chai "^6.2.2" + tinyrainbow "^3.1.0" + +"@vitest/mocker@4.1.9": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-4.1.9.tgz#a483de79b358aba3dd8f319a0d8ab17c89f5c75d" + integrity sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw== + dependencies: + "@vitest/spy" "4.1.9" + estree-walker "^3.0.3" + magic-string "^0.30.21" + +"@vitest/pretty-format@4.1.9": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-4.1.9.tgz#885cfe9fcb6ff3df4409ea66192cc1fb23d62fae" + integrity sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A== + dependencies: + tinyrainbow "^3.1.0" + +"@vitest/runner@4.1.9": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-4.1.9.tgz#bb742947ce4841dfb2d8984a2f9014850be10f51" + integrity sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg== + dependencies: + "@vitest/utils" "4.1.9" + pathe "^2.0.3" + +"@vitest/snapshot@4.1.9": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-4.1.9.tgz#bdfb670ae5617613ea8776e93d0666a66defeeb7" + integrity sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA== + dependencies: + "@vitest/pretty-format" "4.1.9" + "@vitest/utils" "4.1.9" + magic-string "^0.30.21" + pathe "^2.0.3" + +"@vitest/spy@4.1.9": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-4.1.9.tgz#bfc40d48fb9bd1a1228bfbfde7f5555e7f6b3867" + integrity sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA== + +"@vitest/utils@4.1.9": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-4.1.9.tgz#0184c7e6eb3234739b2b6b3b985f78d1ed823ee1" + integrity sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA== + dependencies: + "@vitest/pretty-format" "4.1.9" + convert-source-map "^2.0.0" + tinyrainbow "^3.1.0" + +JSONStream@^1.0.4: + version "1.3.5" + resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" @@ -886,33 +1228,26 @@ acorn-jsx@^5.3.1: resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.0.0, acorn-walk@^8.1.1: +acorn-walk@^8.1.1: version "8.2.0" resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.0.4, acorn@^8.14.0, acorn@^8.4.1: - version "8.15.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz" - integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== - acorn@^7.4.0: version "7.4.1" resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.14.0, acorn@^8.4.1: + version "8.15.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + add-stream@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz" integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== -agent-base@6: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" @@ -921,17 +1256,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^6.12.4: +ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -951,13 +1276,6 @@ ajv@^8.0.1, ajv@^8.11.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-align@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - ansi-colors@^4.1.1: version "4.1.3" resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" @@ -992,31 +1310,14 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -ansi-styles@^6.0.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -ansi-styles@^6.1.0: +ansi-styles@^6.0.0, ansi-styles@^6.1.0: version "6.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== @@ -1026,26 +1327,6 @@ any-promise@^1.0.0: resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -append-transform@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz" - integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== - dependencies: - default-require-extensions "^3.0.0" - -archy@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" - integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== - arg@^4.1.0: version "4.1.3" resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" @@ -1063,11 +1344,6 @@ argparse@^2.0.1: resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -argv@0.0.2: - version "0.0.2" - resolved "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz" - integrity sha512-dEamhpPEwRUBpLNHeuCm/v+g0anFByHahxodVO/BbAarHVBBg2MccCwf9K+o1Pof+2btdnkJelYVUWjW/VrATw== - array-buffer-byte-length@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" @@ -1076,11 +1352,6 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" - integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== - array-ify@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz" @@ -1150,20 +1421,24 @@ arraybuffer.prototype.slice@^1.0.1: is-array-buffer "^3.0.2" is-shared-array-buffer "^1.0.2" -arrgv@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz" - integrity sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw== - arrify@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== -arrify@^2.0.1: +assertion-error@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" + integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== + +ast-v8-to-istanbul@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.4.tgz#9b3c38bdcadbb17f0da8cab2ca3daf8cdf5e0af2" + integrity sha512-0bC0/4bTSrnwdhU3IsZDwEdojvuPrSg59OYZfKsLRtJZ0u8VBx9DebfqqG8bRdCC0I7vjgxmPi41P0lpkhJHtA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.31" + estree-walker "^3.0.3" + js-tokens "^10.0.0" astral-regex@^2.0.0: version "2.0.0" @@ -1190,81 +1465,17 @@ atomic-sleep@^1.0.0: resolved "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== -ava@^3.12.1: - version "3.15.0" - resolved "https://registry.npmjs.org/ava/-/ava-3.15.0.tgz" - integrity sha512-HGAnk1SHPk4Sx6plFAUkzV/XC1j9+iQhOzt4vBly18/yo0AV8Oytx7mtJd/CR8igCJ5p160N/Oo/cNJi2uSeWA== - dependencies: - "@concordance/react" "^2.0.0" - acorn "^8.0.4" - acorn-walk "^8.0.0" - ansi-styles "^5.0.0" - arrgv "^1.0.2" - arrify "^2.0.1" - callsites "^3.1.0" - chalk "^4.1.0" - chokidar "^3.4.3" - chunkd "^2.0.1" - ci-info "^2.0.0" - ci-parallel-vars "^1.0.1" - clean-yaml-object "^0.1.0" - cli-cursor "^3.1.0" - cli-truncate "^2.1.0" - code-excerpt "^3.0.0" - common-path-prefix "^3.0.0" - concordance "^5.0.1" - convert-source-map "^1.7.0" - currently-unhandled "^0.4.1" - debug "^4.3.1" - del "^6.0.0" - emittery "^0.8.0" - equal-length "^1.0.0" - figures "^3.2.0" - globby "^11.0.1" - ignore-by-default "^2.0.0" - import-local "^3.0.2" - indent-string "^4.0.0" - is-error "^2.2.2" - is-plain-object "^5.0.0" - is-promise "^4.0.0" - lodash "^4.17.20" - matcher "^3.0.0" - md5-hex "^3.0.1" - mem "^8.0.0" - ms "^2.1.3" - ora "^5.2.0" - p-event "^4.2.0" - p-map "^4.0.0" - picomatch "^2.2.2" - pkg-conf "^3.1.0" - plur "^4.0.0" - pretty-ms "^7.0.1" - read-pkg "^5.2.0" - resolve-cwd "^3.0.0" - slash "^3.0.0" - source-map-support "^0.5.19" - stack-utils "^2.0.3" - strip-ansi "^6.0.0" - supertap "^2.0.0" - temp-dir "^2.0.0" - trim-off-newlines "^1.0.1" - update-notifier "^5.0.1" - write-file-atomic "^3.0.3" - yargs "^16.2.0" - available-typed-arrays@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -axios@^1.7.4: - version "1.10.0" - resolved "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz" - integrity sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw== +axios-retry@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/axios-retry/-/axios-retry-4.5.0.tgz" + integrity sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ== dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" + is-retry-allowed "^2.2.0" axios@0.27.2: version "0.27.2" @@ -1274,12 +1485,14 @@ axios@0.27.2: follow-redirects "^1.14.9" form-data "^4.0.0" -axios-retry@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/axios-retry/-/axios-retry-4.5.0.tgz" - integrity sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ== +axios@^1.7.4: + version "1.10.0" + resolved "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz" + integrity sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw== dependencies: - is-retry-allowed "^2.2.0" + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" balanced-match@^1.0.0: version "1.0.2" @@ -1291,11 +1504,6 @@ base64-js@^1.3.1: resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - bl@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" @@ -1305,25 +1513,6 @@ bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" -blueimp-md5@^2.10.0: - version "2.19.0" - resolved "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz" - integrity sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w== - -boxen@^5.0.0: - version "5.1.2" - resolved "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz" - integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.2" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" @@ -1339,23 +1528,13 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@~3.0.2: +braces@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -browserslist@^4.21.9, "browserslist@>= 4.21.0": - version "4.21.10" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz" - integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== - dependencies: - caniuse-lite "^1.0.30001517" - electron-to-chromium "^1.4.477" - node-releases "^2.0.13" - update-browserslist-db "^1.0.11" - buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" @@ -1377,13 +1556,6 @@ buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" -bundle-name@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz" - integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== - dependencies: - run-applescript "^7.0.0" - bundle-require@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz" @@ -1396,34 +1568,11 @@ cac@^6.7.14: resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - cachedir@2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz" integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== -caching-transform@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz" - integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== - dependencies: - hasha "^5.0.0" - make-dir "^3.0.0" - package-hash "^4.0.0" - write-file-atomic "^3.0.0" - call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" @@ -1432,7 +1581,7 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -callsites@^3.0.0, callsites@^3.1.0: +callsites@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== @@ -1446,67 +1595,38 @@ camelcase-keys@^6.2.2: map-obj "^4.0.0" quick-lru "^4.0.1" -camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@^5.3.1: version "5.3.1" resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001517: - version "1.0.30001521" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001521.tgz" - integrity sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ== +chai@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/chai/-/chai-6.2.2.tgz#ae41b52c9aca87734505362717f3255facda360e" + integrity sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg== -chalk@^2.4.1: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== +chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" + ansi-styles "^4.1.0" + supports-color "^7.1.0" -chalk@^2.4.2: +chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" chardet@^0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@^3.4.3: - version "3.5.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - chokidar@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz" @@ -1514,36 +1634,11 @@ chokidar@^4.0.3: dependencies: readdirp "^4.0.1" -chunkd@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz" - integrity sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-parallel-vars@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz" - integrity sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg== - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -clean-yaml-object@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz" - integrity sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw== - -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" @@ -1577,15 +1672,6 @@ cli-width@^3.0.0: resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - cliui@^7.0.2: version "7.0.4" resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" @@ -1595,36 +1681,11 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - clone@^1.0.2: version "1.0.4" resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== -code-excerpt@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/code-excerpt/-/code-excerpt-3.0.0.tgz" - integrity sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw== - dependencies: - convert-to-spaces "^1.0.1" - -codecov@^3.5.0: - version "3.8.3" - resolved "https://registry.npmjs.org/codecov/-/codecov-3.8.3.tgz" - integrity sha512-Y8Hw+V3HgR7V71xWH2vQ9lyS358CbGCldWlJFR0JirqoGtOoas3R3/OclRTvgUYFK29mmJICDPauVKmpqbwhOA== - dependencies: - argv "0.0.2" - ignore-walk "3.0.4" - js-yaml "3.14.1" - teeny-request "7.1.1" - urlgrey "1.0.0" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" @@ -1639,16 +1700,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + colorette@^2.0.16, colorette@^2.0.7: version "2.0.20" resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" @@ -1661,6 +1722,11 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +commander@8.3.0: + version "8.3.0" + resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + commander@^13.0.0: version "13.1.0" resolved "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz" @@ -1681,11 +1747,6 @@ commander@^9.3.0: resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== -commander@8.3.0: - version "8.3.0" - resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - comment-json@^4.0.6, comment-json@^4.1.0: version "4.2.3" resolved "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz" @@ -1717,11 +1778,6 @@ commitizen@^4.0.3: strip-bom "4.0.0" strip-json-comments "3.1.1" -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - commondir@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" @@ -1755,20 +1811,6 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" -concordance@^5.0.1: - version "5.0.4" - resolved "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz" - integrity sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw== - dependencies: - date-time "^3.1.0" - esutils "^2.0.3" - fast-diff "^1.2.0" - js-string-escape "^1.0.1" - lodash "^4.17.15" - md5-hex "^3.0.1" - semver "^7.3.2" - well-known-symbols "^2.0.0" - concurrently@6.5.1: version "6.5.1" resolved "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz" @@ -1844,7 +1886,7 @@ conventional-changelog-config-spec@2.1.0: resolved "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz" integrity sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ== -conventional-changelog-conventionalcommits@^4.5.0, conventional-changelog-conventionalcommits@4.6.3: +conventional-changelog-conventionalcommits@4.6.3, conventional-changelog-conventionalcommits@^4.5.0: version "4.6.3" resolved "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz" integrity sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g== @@ -1964,8 +2006,8 @@ conventional-commits-parser@^3.2.0: resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz" integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== dependencies: - is-text-path "^1.0.1" JSONStream "^1.0.4" + is-text-path "^1.0.1" lodash "^4.17.15" meow "^8.0.0" split2 "^3.0.0" @@ -1985,15 +2027,10 @@ conventional-recommended-bump@6.1.0: meow "^8.0.0" q "^1.5.1" -convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -convert-to-spaces@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz" - integrity sha512-cj09EBuObp9gZNQCzc7hByQyrs6jVGE+o9kSJmeUoj+GiPiJvi5LYqEH/Hmme4+MTLHM+Ejtq+FChpjjEnsPdQ== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== core-util-is@^1.0.3, core-util-is@~1.0.0: version "1.0.3" @@ -2005,7 +2042,7 @@ cosmiconfig-typescript-loader@^4.0.0: resolved "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz" integrity sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw== -cosmiconfig@^8.0.0, cosmiconfig@>=7: +cosmiconfig@^8.0.0: version "8.2.0" resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz" integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ== @@ -2031,7 +2068,7 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: +cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -2045,13 +2082,6 @@ crypto-random-string@^2.0.0: resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -crypto-random-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz" - integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== - dependencies: - type-fest "^1.0.1" - cspell-glob@^0.1.25: version "0.1.25" resolved "https://registry.npmjs.org/cspell-glob/-/cspell-glob-0.1.25.tgz" @@ -2082,8 +2112,8 @@ cspell-lib@^4.3.12: "@cspell/dict-django" "^1.0.25" "@cspell/dict-dotnet" "^1.0.24" "@cspell/dict-elixir" "^1.0.23" - "@cspell/dict-en_us" "^1.2.39" "@cspell/dict-en-gb" "^1.1.27" + "@cspell/dict-en_us" "^1.2.39" "@cspell/dict-filetypes" "^1.1.5" "@cspell/dict-fonts" "^1.0.13" "@cspell/dict-fullstack" "^1.0.36" @@ -2145,14 +2175,7 @@ cspell@^4.1.0: glob "^7.1.6" minimatch "^3.0.4" -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz" - integrity sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng== - dependencies: - array-find-index "^1.0.1" - -cz-conventional-changelog@^3.3.0, cz-conventional-changelog@3.3.0: +cz-conventional-changelog@3.3.0, cz-conventional-changelog@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz" integrity sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw== @@ -2178,13 +2201,6 @@ date-fns@^2.16.1: dependencies: "@babel/runtime" "^7.21.0" -date-time@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz" - integrity sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg== - dependencies: - time-zone "^1.0.0" - dateformat@^3.0.0: version "3.0.3" resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" @@ -2202,7 +2218,7 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.4.0, debug@4: +debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.4.0: version "4.4.1" resolved "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz" integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== @@ -2217,28 +2233,16 @@ decamelize-keys@^1.1.0: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.1.0, decamelize@^1.2.0: +decamelize@^1.1.0: version "1.2.0" resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - dedent@0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deep-is@^0.1.3: version "0.1.4" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" @@ -2249,26 +2253,6 @@ deepmerge@^4.2.2: resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -default-browser-id@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz" - integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== - -default-browser@^5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz" - integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== - dependencies: - bundle-name "^4.1.0" - default-browser-id "^5.0.0" - -default-require-extensions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz" - integrity sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw== - dependencies: - strip-bom "^4.0.0" - defaults@^1.0.3: version "1.0.4" resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" @@ -2276,16 +2260,6 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -define-lazy-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz" - integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== - define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz" @@ -2294,20 +2268,6 @@ define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -del@^6.0.0: - version "6.1.1" - resolved "https://registry.npmjs.org/del/-/del-6.1.1.tgz" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" @@ -2318,11 +2278,16 @@ detect-file@^1.0.0: resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== -detect-indent@^6.0.0, detect-indent@6.1.0: +detect-indent@6.1.0, detect-indent@^6.0.0: version "6.1.0" resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== +detect-libc@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== + detect-newline@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" @@ -2369,11 +2334,6 @@ dotgitignore@^2.1.0: find-up "^3.0.0" minimatch "^3.0.4" -duplexer3@^0.1.4: - version "0.1.5" - resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz" - integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== - eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" @@ -2386,21 +2346,11 @@ easy-table@1.1.0: optionalDependencies: wcwidth ">=1.0.1" -electron-to-chromium@^1.4.477: - version "1.4.494" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.494.tgz" - integrity sha512-KF7wtsFFDu4ws1ZsSOt4pdmO1yWVNWCFtijVYZPUeW4SV7/hy/AESjLn/+qIWgq7mHscNOKAwN5AIM1+YAy+Ww== - email-addresses@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz" integrity sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw== -emittery@^0.8.0: - version "0.8.1" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" @@ -2418,7 +2368,7 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enquirer@^2.3.5, "enquirer@>= 2.3.0 < 3": +enquirer@^2.3.5: version "2.4.1" resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz" integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== @@ -2426,11 +2376,6 @@ enquirer@^2.3.5, "enquirer@>= 2.3.0 < 3": ansi-colors "^4.1.1" strip-ansi "^6.0.1" -equal-length@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/equal-length/-/equal-length-1.0.1.tgz" - integrity sha512-TK2m7MvWPt/v3dan0BCNp99pytIE5UGrUj7F0KZirNX8xz8fDFUAZfgm8uB5FuQq9u0sMeDocYBfEhsd1nwGoA== - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" @@ -2483,6 +2428,11 @@ es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2: unbox-primitive "^1.0.2" which-typed-array "^1.1.10" +es-module-lexer@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.1.0.tgz#1dfcbb5ea3bbfb63f28e1fc3676c3676d1c9624c" + integrity sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ== + es-set-tostringtag@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" @@ -2508,12 +2458,7 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es6-error@^4.0.1: - version "4.1.1" - resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== - -esbuild@^0.25.0, esbuild@>=0.18: +esbuild@^0.25.0: version "0.25.5" resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz" integrity sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ== @@ -2549,26 +2494,11 @@ escalade@^3.1.1: resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - -escape-string-regexp@^1.0.2: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" @@ -2662,12 +2592,7 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^1.3.0: +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== @@ -2677,7 +2602,7 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^5.0.0 || ^6.0.0 || ^7.0.0", eslint@^7.8.0, eslint@>=3.14.1, eslint@>=4.19.1, eslint@>=5: +eslint@^7.8.0: version "7.32.0" resolved "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz" integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== @@ -2756,17 +2681,19 @@ estraverse@^4.1.1: resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.1.0: +estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" -esutils@^2.0.2, esutils@^2.0.3: +esutils@^2.0.2: version "2.0.3" resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== @@ -2803,6 +2730,11 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" +expect-type@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.4.0.tgz#24edf7f0cc69a44d008567ba4594ab96f3c3a3d6" + integrity sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA== + external-editor@^3.0.3: version "3.1.0" resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" @@ -2822,11 +2754,6 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-diff@^1.2.0: - version "1.3.0" - resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - fast-glob@^3.2.9: version "3.3.1" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz" @@ -2853,18 +2780,11 @@ fast-redact@^3.1.1: resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.3.0.tgz" integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== -fast-safe-stringify@^2.1.1, fast-safe-stringify@2.1.1: +fast-safe-stringify@2.1.1, fast-safe-stringify@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== -fast-url-parser@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz" - integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== - dependencies: - punycode "^1.3.2" - fastq@^1.6.0: version "1.15.0" resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" @@ -2877,7 +2797,12 @@ fdir@^6.4.4: resolved "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz" integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== -figures@^3.0.0, figures@^3.1.0, figures@^3.2.0: +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + +figures@^3.0.0, figures@^3.1.0: version "3.2.0" resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== @@ -2891,15 +2816,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-type@^18.7.0: - version "18.7.0" - resolved "https://registry.npmjs.org/file-type/-/file-type-18.7.0.tgz" - integrity sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw== - dependencies: - readable-web-to-node-stream "^3.0.2" - strtok3 "^7.0.0" - token-types "^5.0.1" - filename-reserved-regex@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz" @@ -2921,7 +2837,7 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -find-cache-dir@^3.2.0, find-cache-dir@^3.3.1: +find-cache-dir@^3.3.1: version "3.3.2" resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== @@ -3017,14 +2933,6 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -foreground-child@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz" - integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^3.0.2" - foreground-child@^3.1.0: version "3.3.1" resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz" @@ -3042,21 +2950,16 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -fromentries@^1.2.0: - version "1.3.2" - resolved "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz" - integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== - -fs-extra@^11.1.1: - version "11.3.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz" - integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== +fs-extra@10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^9.1.0: +fs-extra@9.1.0, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -3066,21 +2969,11 @@ fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@10.1.0: - version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== +fs-extra@^11.1.1: + version "11.3.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz" + integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== dependencies: - at-least-node "^1.0.0" graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" @@ -3090,6 +2983,11 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" @@ -3120,12 +3018,7 @@ gensequence@^3.1.1: resolved "https://registry.npmjs.org/gensequence/-/gensequence-3.1.1.tgz" integrity sha512-ys3h0hiteRwmY6BsvSttPmkhC0vEQHPJduANBRtH/dlDPZ0UBIb/dXy80IcckXyuQ6LKg+PloRqvGER9IS7F7g== -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.1, get-caller-file@^2.0.5: +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -3140,11 +3033,6 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@ has-proto "^1.0.1" has-symbols "^1.0.3" -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - get-pkg-repo@^4.0.0: version "4.2.1" resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz" @@ -3165,25 +3053,6 @@ get-stdin@^8.0.0: resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz" integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== -get-stdin@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz" - integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== - -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - get-stream@^6.0.0: version "6.0.1" resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" @@ -3244,26 +3113,14 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob@^10.3.10: - version "10.4.5" - resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" - integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^3.1.2" - minimatch "^9.0.4" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^1.11.1" - -glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@7.1.6: +glob@7.1.6, glob@^7.1.3, glob@^7.1.6: version "7.1.6" resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -3275,17 +3132,6 @@ glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.0: - version "8.1.0" - resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - glob@7.2.3: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" @@ -3298,6 +3144,29 @@ glob@7.2.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^10.3.10: + version "10.4.5" + resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^8.0.0: + version "8.1.0" + resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + global-dirs@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz" @@ -3305,13 +3174,6 @@ global-dirs@^0.1.1: dependencies: ini "^1.3.4" -global-dirs@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz" - integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== - dependencies: - ini "2.0.0" - global-modules@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" @@ -3337,14 +3199,7 @@ globals@^11.1.0: resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.6.0: - version "13.21.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz" - integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== - dependencies: - type-fest "^0.20.2" - -globals@^13.9.0: +globals@^13.6.0, globals@^13.9.0: version "13.21.0" resolved "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz" integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== @@ -3358,7 +3213,7 @@ globalthis@^1.0.3: dependencies: define-properties "^1.1.3" -globby@^11.0.1, globby@^11.0.3, globby@^11.1.0: +globby@^11.0.3, globby@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -3377,24 +3232,7 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -got@^9.6.0: - version "9.6.0" - resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -3460,11 +3298,6 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - has@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" @@ -3472,14 +3305,6 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hasha@^5.0.0: - version "5.2.2" - resolved "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz" - integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== - dependencies: - is-stream "^2.0.0" - type-fest "^0.8.0" - help-me@^4.0.1: version "4.2.0" resolved "https://registry.npmjs.org/help-me/-/help-me-4.2.0.tgz" @@ -3500,14 +3325,7 @@ hosted-git-info@^2.1.4: resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hosted-git-info@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^4.0.1: +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: version "4.1.0" resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== @@ -3516,30 +3334,8 @@ hosted-git-info@^4.0.1: html-escaper@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -http-cache-semantics@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-proxy-agent@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== human-signals@^2.1.0: version "2.1.0" @@ -3570,18 +3366,6 @@ ieee754@^1.1.13, ieee754@^1.2.1: resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore-by-default@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.1.0.tgz" - integrity sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw== - -ignore-walk@3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz" - integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== - dependencies: - minimatch "^3.0.4" - ignore@^4.0.6: version "4.0.6" resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" @@ -3600,19 +3384,6 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz" - integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" @@ -3631,21 +3402,16 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2: +inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: +ini@^1.3.2, ini@^1.3.4: version "1.3.8" resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -ini@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - inquirer@8.2.5: version "8.2.5" resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz" @@ -3676,11 +3442,6 @@ internal-slot@^1.0.5: has "^1.0.3" side-channel "^1.0.4" -irregular-plurals@^3.2.0: - version "3.5.0" - resolved "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz" - integrity sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ== - is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" @@ -3702,13 +3463,6 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - is-boolean-object@^1.1.0: version "1.1.2" resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" @@ -3722,13 +3476,6 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.5.0: version "2.13.0" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz" @@ -3743,16 +3490,6 @@ is-date-object@^1.0.1: dependencies: has-tostringtag "^1.0.0" -is-docker@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz" - integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== - -is-error@^2.2.2: - version "2.2.2" - resolved "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz" - integrity sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg== - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" @@ -3768,28 +3505,13 @@ is-fullwidth-code-point@^4.0.0: resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" -is-inside-container@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz" - integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== - dependencies: - is-docker "^3.0.0" - -is-installed-globally@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" - is-interactive@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" @@ -3800,11 +3522,6 @@ is-negative-zero@^2.0.2: resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== -is-npm@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz" - integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== - is-number-object@^1.0.4: version "1.0.7" resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" @@ -3822,31 +3539,11 @@ is-obj@^2.0.0: resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-promise@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz" - integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== - is-regex@^1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" @@ -3872,11 +3569,6 @@ is-stream@^2.0.0: resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" @@ -3927,23 +3619,11 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-windows@^1.0.1, is-windows@^1.0.2: +is-windows@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -is-wsl@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz" - integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== - dependencies: - is-inside-container "^1.0.0" - -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - isarray@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" @@ -3959,62 +3639,29 @@ isexe@^2.0.0: resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: +istanbul-lib-coverage@^3.0.0: version "3.2.0" resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-hook@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz" - integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== - dependencies: - append-transform "^2.0.0" - -istanbul-lib-instrument@^4.0.0: - version "4.0.3" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-processinfo@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz" - integrity sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg== - dependencies: - archy "^1.0.0" - cross-spawn "^7.0.3" - istanbul-lib-coverage "^3.2.0" - p-map "^3.0.0" - rimraf "^3.0.0" - uuid "^8.3.2" +istanbul-lib-coverage@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-report@^3.0.0: +istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: istanbul-lib-coverage "^3.0.0" make-dir "^4.0.0" supports-color "^7.1.0" -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.0.2: - version "3.1.6" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== +istanbul-reports@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz#cb4535162b5784aa623cee21a7252cf2c807ac93" + integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -4043,17 +3690,17 @@ joycon@^3.1.1: resolved "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz" integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== -js-string-escape@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz" - integrity sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg== +js-tokens@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-10.0.0.tgz#dffe7599b4a8bb7fe30aff8d0235234dffb79831" + integrity sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q== js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1, js-yaml@^3.14.0, js-yaml@3.14.1: +js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -4073,11 +3720,6 @@ jsesc@^3.0.2: resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz" integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== - json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" @@ -4115,11 +3757,6 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.2.2: - version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - jsonc-parser@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" @@ -4139,33 +3776,11 @@ jsonparse@^1.2.0: resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -JSONStream@^1.0.4: - version "1.3.5" - resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - kind-of@^6.0.3: version "6.0.3" resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -latest-version@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - levn@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" @@ -4174,16 +3789,90 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lilconfig@^3.1.1: - version "3.1.3" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz" - integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== +lightningcss-android-arm64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz#f033885116dfefd9c6f54787523e3514b61e1968" + integrity sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg== + +lightningcss-darwin-arm64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz#50b71871b01c8199584b649e292547faea7af9b5" + integrity sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ== + +lightningcss-darwin-x64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz#35f3e97332d130b9ca181e11b568ded6aebc6d5e" + integrity sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w== + +lightningcss-freebsd-x64@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz#9777a76472b64ed6ff94342ad64c7bafd794a575" + integrity sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig== + +lightningcss-linux-arm-gnueabihf@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz#13ae652e1ab73b9135d7b7da172f666c410ad53d" + integrity sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw== + +lightningcss-linux-arm64-gnu@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz#417858795a94592f680123a1b1f9da8a0e1ef335" + integrity sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ== + +lightningcss-linux-arm64-musl@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz#6be36692e810b718040802fd809623cffe732133" + integrity sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg== + +lightningcss-linux-x64-gnu@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz#0b7803af4eb21cfd38dd39fe2abbb53c7dd091f6" + integrity sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA== + +lightningcss-linux-x64-musl@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz#88dc8ba865ddddb1ac5ef04b0f161804418c163b" + integrity sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg== + +lightningcss-win32-arm64-msvc@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz#4f30ba3fa5e925f5b79f945e8cc0d176c3b1ab38" + integrity sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw== + +lightningcss-win32-x64-msvc@1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz#141aa5605645064928902bb4af045fa7d9f4220a" + integrity sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q== + +lightningcss@^1.32.0: + version "1.32.0" + resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.32.0.tgz#b85aae96486dcb1bf49a7c8571221273f4f1e4a9" + integrity sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ== + dependencies: + detect-libc "^2.0.3" + optionalDependencies: + lightningcss-android-arm64 "1.32.0" + lightningcss-darwin-arm64 "1.32.0" + lightningcss-darwin-x64 "1.32.0" + lightningcss-freebsd-x64 "1.32.0" + lightningcss-linux-arm-gnueabihf "1.32.0" + lightningcss-linux-arm64-gnu "1.32.0" + lightningcss-linux-arm64-musl "1.32.0" + lightningcss-linux-x64-gnu "1.32.0" + lightningcss-linux-x64-musl "1.32.0" + lightningcss-win32-arm64-msvc "1.32.0" + lightningcss-win32-x64-msvc "1.32.0" lilconfig@2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz" integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== +lilconfig@^3.1.1: + version "3.1.3" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" @@ -4233,17 +3922,6 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -load-json-file@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz" - integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== - dependencies: - graceful-fs "^4.1.15" - parse-json "^4.0.0" - pify "^4.0.1" - strip-bom "^3.0.0" - type-fest "^0.3.0" - load-tsconfig@^0.2.3: version "0.2.5" resolved "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz" @@ -4279,11 +3957,6 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash.flattendeep@^4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz" - integrity sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ== - lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz" @@ -4324,7 +3997,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@4.17.21: +lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -4352,28 +4025,11 @@ longest@^2.0.1: resolved "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz" integrity sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q== -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - lru-cache@^10.2.0: version "10.4.3" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" @@ -4393,6 +4049,22 @@ magic-string@^0.30.17: dependencies: "@jridgewell/sourcemap-codec" "^1.5.0" +magic-string@^0.30.21: + version "0.30.21" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" + integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.5" + +magicast@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.5.3.tgz#1800f6e76dd8b0dbe7257438a2c336aefabbd905" + integrity sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw== + dependencies: + "@babel/parser" "^7.29.3" + "@babel/types" "^7.29.0" + source-map-js "^1.2.1" + make-dir@^3.0.0, make-dir@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" @@ -4412,13 +4084,6 @@ make-error@^1.1.1: resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -map-age-cleaner@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - map-obj@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" @@ -4434,38 +4099,11 @@ marked@^4.3.0: resolved "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz" integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== -matcher@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz" - integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== - dependencies: - escape-string-regexp "^4.0.0" - -md5-hex@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz" - integrity sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw== - dependencies: - blueimp-md5 "^2.10.0" - -mem@^8.0.0: - version "8.1.1" - resolved "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz" - integrity sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA== - dependencies: - map-age-cleaner "^0.1.3" - mimic-fn "^3.1.0" - memorystream@^0.3.1: version "0.3.1" resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== -meow@^12.1.1: - version "12.1.1" - resolved "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz" - integrity sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw== - meow@^8.0.0: version "8.1.2" resolved "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz" @@ -4488,16 +4126,16 @@ merge-stream@^2.0.0: resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz" - integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== - merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +merge@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz" + integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== + micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" @@ -4523,16 +4161,6 @@ mimic-fn@^2.1.0: resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-fn@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz" - integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== - -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - min-indent@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" @@ -4575,7 +4203,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@1.2.7: +minimist@1.2.7, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.7" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== @@ -4624,6 +4252,11 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" +nanoid@^3.3.12: + version "3.3.15" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.15.tgz#36c490fad8c6e86c824c940dfdde999b69ed4316" + integrity sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" @@ -4646,18 +4279,6 @@ node-fetch@^2.6.1: dependencies: whatwg-url "^5.0.0" -node-preload@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz" - integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== - dependencies: - process-on-spawn "^1.0.0" - -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" @@ -4678,16 +4299,11 @@ normalize-package-data@^3.0.0: semver "^7.3.4" validate-npm-package-license "^3.0.1" -normalize-path@^3.0.0, normalize-path@~3.0.0: +normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - npm-run-all@^4.1.5: version "4.1.5" resolved "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz" @@ -4710,39 +4326,6 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -nyc@^15.1.0, nyc@>=15: - version "15.1.0" - resolved "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz" - integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== - dependencies: - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - caching-transform "^4.0.0" - convert-source-map "^1.7.0" - decamelize "^1.2.0" - find-cache-dir "^3.2.0" - find-up "^4.1.0" - foreground-child "^2.0.0" - get-package-type "^0.1.0" - glob "^7.1.6" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-hook "^3.0.0" - istanbul-lib-instrument "^4.0.0" - istanbul-lib-processinfo "^2.0.2" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - make-dir "^3.0.0" - node-preload "^0.2.1" - p-map "^3.0.0" - process-on-spawn "^1.0.0" - resolve-from "^5.0.0" - rimraf "^3.0.0" - signal-exit "^3.0.2" - spawn-wrap "^2.0.0" - test-exclude "^6.0.0" - yargs "^15.0.2" - object-assign@^4.0.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" @@ -4796,6 +4379,11 @@ object.values@^1.1.6: define-properties "^1.1.4" es-abstract "^1.20.4" +obug@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/obug/-/obug-2.1.3.tgz#c02c60f95abd603409330e767db7f2823193331e" + integrity sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg== + on-exit-leak-free@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz" @@ -4815,27 +4403,6 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open-cli@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/open-cli/-/open-cli-8.0.0.tgz" - integrity sha512-3muD3BbfLyzl+aMVSEfn2FfOqGdPYR0O4KNnxXsLEPE2q9OSjBfJAaB6XKbrUzLgymoSMejvb5jpXJfru/Ko2A== - dependencies: - file-type "^18.7.0" - get-stdin "^9.0.0" - meow "^12.1.1" - open "^10.0.0" - tempy "^3.1.0" - -open@^10.0.0: - version "10.1.2" - resolved "https://registry.npmjs.org/open/-/open-10.1.2.tgz" - integrity sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw== - dependencies: - default-browser "^5.2.1" - define-lazy-prop "^3.0.0" - is-inside-container "^1.0.0" - is-wsl "^3.1.0" - optionator@^0.9.1: version "0.9.3" resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" @@ -4848,7 +4415,7 @@ optionator@^0.9.1: prelude-ls "^1.2.1" type-check "^0.4.0" -ora@^5.2.0, ora@^5.4.1: +ora@^5.4.1: version "5.4.1" resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== @@ -4868,28 +4435,6 @@ os-tmpdir@~1.0.2: resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz" - integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== - -p-event@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz" - integrity sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ== - dependencies: - p-timeout "^3.1.0" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" @@ -4939,13 +4484,6 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-map@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz" - integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== - dependencies: - aggregate-error "^3.0.0" - p-map@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" @@ -4953,13 +4491,6 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -p-timeout@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== - dependencies: - p-finally "^1.0.0" - p-try@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" @@ -4970,31 +4501,11 @@ p-try@^2.0.0: resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -package-hash@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz" - integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== - dependencies: - graceful-fs "^4.1.15" - hasha "^5.0.0" - lodash.flattendeep "^4.4.0" - release-zalgo "^1.0.0" - package-json-from-dist@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" @@ -5020,11 +4531,6 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse-ms@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz" - integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== - parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" @@ -5068,16 +4574,16 @@ path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -path-to-regexp@^6.2.1: - version "6.2.1" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz" - integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== - path-to-regexp@3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz" integrity sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA== +path-to-regexp@^6.2.1: + version "6.2.1" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz" + integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== + path-type@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" @@ -5090,31 +4596,31 @@ path-type@^4.0.0: resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pathe@^2.0.1: +pathe@^2.0.1, pathe@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz" integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== -peek-readable@^5.1.3: - version "5.4.2" - resolved "https://registry.npmjs.org/peek-readable/-/peek-readable-5.4.2.tgz" - integrity sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg== - -picocolors@^1.0.0, picocolors@^1.1.1: +picocolors@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: +picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -"picomatch@^3 || ^4", picomatch@^4.0.2: +picomatch@^4.0.2: version "4.0.2" resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz" integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== +picomatch@^4.0.3, picomatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589" + integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== + pidtree@^0.3.0: version "0.3.1" resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz" @@ -5135,11 +4641,6 @@ pify@^3.0.0: resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - pino-abstract-transport@^1.0.0, pino-abstract-transport@v1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz" @@ -5195,15 +4696,7 @@ pirates@^4.0.1: resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz" integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== -pkg-conf@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz" - integrity sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ== - dependencies: - find-up "^3.0.0" - load-json-file "^5.2.0" - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: +pkg-dir@^4.1.0: version "4.2.0" resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== @@ -5219,13 +4712,6 @@ pkg-types@^1.3.0: mlly "^1.7.4" pathe "^2.0.1" -plur@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz" - integrity sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg== - dependencies: - irregular-plurals "^3.2.0" - postcss-load-config@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz" @@ -5233,40 +4719,30 @@ postcss-load-config@^6.0.1: dependencies: lilconfig "^3.1.1" +postcss@^8.5.15: + version "8.5.16" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.16.tgz#1230ce0b5df354c24c0ea45f99ce5f6a88279d28" + integrity sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg== + dependencies: + nanoid "^3.3.12" + picocolors "^1.1.1" + source-map-js "^1.2.1" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== - prettier@^2.5.1: version "2.8.8" resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -pretty-ms@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz" - integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== - dependencies: - parse-ms "^2.1.0" - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process-on-spawn@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz" - integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== - dependencies: - fromentries "^1.2.0" - process-warning@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/process-warning/-/process-warning-2.2.0.tgz" @@ -5295,23 +4771,11 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^1.3.2: - version "1.4.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - punycode@^2.1.0: version "2.3.0" resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== -pupa@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== - dependencies: - escape-goat "^2.0.0" - q@^1.5.1: version "1.5.1" resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" @@ -5337,16 +4801,6 @@ quick-lru@^4.0.1: resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -rc@^1.2.8, rc@1.2.8: - version "1.2.8" - resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz" @@ -5383,7 +4837,7 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.4.0, readable-stream@^3.6.0, readable-stream@3: +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -5403,17 +4857,6 @@ readable-stream@^4.0.0: process "^0.11.10" string_decoder "^1.3.0" -readable-stream@^4.7.0: - version "4.7.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz" - integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" @@ -5427,25 +4870,11 @@ readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-web-to-node-stream@^3.0.2: - version "3.0.4" - resolved "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.4.tgz" - integrity sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw== - dependencies: - readable-stream "^4.7.0" - readdirp@^4.0.1: version "4.1.2" resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz" integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - real-require@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz" @@ -5459,7 +4888,7 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -reflect-metadata@^0.1.12, reflect-metadata@0.1.13: +reflect-metadata@0.1.13: version "0.1.13" resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== @@ -5483,27 +4912,6 @@ regexpp@^3.1.0: resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -registry-auth-token@^4.0.0: - version "4.2.2" - resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz" - integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== - dependencies: - rc "1.2.8" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - -release-zalgo@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz" - integrity sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA== - dependencies: - es6-error "^4.0.1" - repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" @@ -5528,22 +4936,10 @@ require-in-the-middle@^5.1.0: module-details-from-path "^1.0.3" resolve "^1.22.1" -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" + version "1.0.0" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" @@ -5579,13 +4975,6 @@ resolve@^1.10.0, resolve@^1.22.1, resolve@^1.22.3, resolve@^1.22.4: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" - integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== - dependencies: - lowercase-keys "^1.0.0" - restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" @@ -5604,13 +4993,37 @@ rfdc@^1.3.0: resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" +rolldown@~1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/rolldown/-/rolldown-1.1.3.tgz#87072bfd0d1bdd02a66076a261a62e8e49b3f0e2" + integrity sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g== + dependencies: + "@oxc-project/types" "=0.137.0" + "@rolldown/pluginutils" "^1.0.0" + optionalDependencies: + "@rolldown/binding-android-arm64" "1.1.3" + "@rolldown/binding-darwin-arm64" "1.1.3" + "@rolldown/binding-darwin-x64" "1.1.3" + "@rolldown/binding-freebsd-x64" "1.1.3" + "@rolldown/binding-linux-arm-gnueabihf" "1.1.3" + "@rolldown/binding-linux-arm64-gnu" "1.1.3" + "@rolldown/binding-linux-arm64-musl" "1.1.3" + "@rolldown/binding-linux-ppc64-gnu" "1.1.3" + "@rolldown/binding-linux-s390x-gnu" "1.1.3" + "@rolldown/binding-linux-x64-gnu" "1.1.3" + "@rolldown/binding-linux-x64-musl" "1.1.3" + "@rolldown/binding-openharmony-arm64" "1.1.3" + "@rolldown/binding-wasm32-wasi" "1.1.3" + "@rolldown/binding-win32-arm64-msvc" "1.1.3" + "@rolldown/binding-win32-x64-msvc" "1.1.3" + rollup@^4.34.8: version "4.44.0" resolved "https://registry.npmjs.org/rollup/-/rollup-4.44.0.tgz" @@ -5640,11 +5053,6 @@ rollup@^4.34.8: "@rollup/rollup-win32-x64-msvc" "4.44.0" fsevents "~2.3.2" -run-applescript@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz" - integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== - run-async@^2.4.0: version "2.4.1" resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" @@ -5657,7 +5065,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -"rxjs@^6.0.0 || ^7.0.0", rxjs@^7.1.0, rxjs@^7.5.5, rxjs@7.8.0: +rxjs@7.8.0, rxjs@^7.5.5: version "7.8.0" resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== @@ -5715,62 +5123,23 @@ secure-json-parse@^2.4.0: resolved "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz" integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - -semver@^5.5.0: +"semver@2 || 3 || 4 || 5", semver@^5.5.0: version "5.7.2" resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.0.0: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^6.2.0: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^6.3.0: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^6.3.1: +semver@^6.0.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.1.1, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3: +semver@^7.1.1, semver@^7.2.1, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3: version "7.5.4" resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" -"semver@2 || 3 || 4 || 5": - version "5.7.2" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -serialize-error@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz" - integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== - dependencies: - type-fest "^0.13.1" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" @@ -5819,6 +5188,11 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== + signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" @@ -5867,18 +5241,10 @@ sonic-boom@^3.0.0, sonic-boom@^3.1.0: dependencies: atomic-sleep "^1.0.0" -source-map-support@^0.5.17, source-map-support@^0.5.19: - version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== source-map@0.8.0-beta.0: version "0.8.0-beta.0" @@ -5887,23 +5253,16 @@ source-map@0.8.0-beta.0: dependencies: whatwg-url "^7.0.0" +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + spawn-command@^0.0.2-1: version "0.0.2-1" resolved "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz" integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== -spawn-wrap@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz" - integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== - dependencies: - foreground-child "^2.0.0" - is-windows "^1.0.2" - make-dir "^3.0.0" - rimraf "^3.0.0" - signal-exit "^3.0.2" - which "^2.0.1" - spdx-correct@^3.0.0: version "3.2.0" resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" @@ -5930,13 +5289,6 @@ spdx-license-ids@^3.0.0: resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz" integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== -split@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - split2@^3.0.0: version "3.2.2" resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" @@ -5949,17 +5301,22 @@ split2@^4.0.0: resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== +split@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== standard-version@^9.0.0: version "9.5.0" @@ -5981,26 +5338,10 @@ standard-version@^9.0.0: stringify-package "^1.0.1" yargs "^16.0.0" -stream-events@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz" - integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== - dependencies: - stubs "^3.0.0" - -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" +std-env@^4.0.0-rc.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-4.1.0.tgz#45899abc590d86d682e87f0acd1033a75084cd3f" + integrity sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ== string-argv@^0.3.1: version "0.3.2" @@ -6016,7 +5357,7 @@ string-argv@^0.3.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -6025,16 +5366,7 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2 is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.0: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string-width@^5.0.1, string-width@^5.1.2: +string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== @@ -6079,6 +5411,20 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +string_decoder@^1.1.1, string_decoder@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + stringify-package@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz" @@ -6105,16 +5451,16 @@ strip-ansi@^7.0.1: dependencies: ansi-regex "^6.0.1" +strip-bom@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== -strip-bom@^4.0.0, strip-bom@4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" @@ -6127,16 +5473,11 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1, strip-json-comments@3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - strip-outer@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz" @@ -6144,19 +5485,6 @@ strip-outer@^1.0.1: dependencies: escape-string-regexp "^1.0.2" -strtok3@^7.0.0: - version "7.1.1" - resolved "https://registry.npmjs.org/strtok3/-/strtok3-7.1.1.tgz" - integrity sha512-mKX8HA/cdBqMKUr0MMZAFssCkIGoZeSCMXgnt79yKxNFguMLVFgRe6wB+fsL0NmoHDbeyZXczy7vEPSoo3rkzg== - dependencies: - "@tokenizer/token" "^0.3.0" - peek-readable "^5.1.3" - -stubs@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz" - integrity sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw== - sucrase@^3.35.0: version "3.35.0" resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz" @@ -6170,17 +5498,6 @@ sucrase@^3.35.0: pirates "^4.0.1" ts-interface-checker "^0.1.9" -supertap@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/supertap/-/supertap-2.0.0.tgz" - integrity sha512-jRzcXlCeDYvKoZGA5oRhYyR3jUIYu0enkSxtmAgHRlD7HwrovTpH4bDSi0py9FtuA8si9cW/fKommJHuaoDHJA== - dependencies: - arrify "^2.0.1" - indent-string "^4.0.0" - js-yaml "^3.14.0" - serialize-error "^7.0.1" - strip-ansi "^6.0.0" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -6223,46 +5540,6 @@ table@^6.0.9: string-width "^4.2.3" strip-ansi "^6.0.1" -teeny-request@7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.1.tgz" - integrity sha512-iwY6rkW5DDGq8hE2YgNQlKbptYpY5Nn2xecjQiNjOXWbKzPGUfmeUBCSQbbr306d7Z7U2N0TPl+/SwYRfua1Dg== - dependencies: - http-proxy-agent "^4.0.0" - https-proxy-agent "^5.0.0" - node-fetch "^2.6.1" - stream-events "^1.0.5" - uuid "^8.0.0" - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -temp-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz" - integrity sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw== - -tempy@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz" - integrity sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g== - dependencies: - is-stream "^3.0.0" - temp-dir "^3.0.0" - type-fest "^2.12.2" - unique-string "^3.0.0" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - text-extensions@^1.0.0: version "1.9.0" resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz" @@ -6294,11 +5571,6 @@ thread-stream@^2.0.0: dependencies: real-require "^0.2.0" -through@^2.3.6, through@^2.3.8, "through@>=2.2.7 <3", through@2: - version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - through2@^2.0.0: version "2.0.5" resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" @@ -6314,16 +5586,26 @@ through2@^4.0.0: dependencies: readable-stream "3" -time-zone@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz" - integrity sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA== +through@2, "through@>=2.2.7 <3", through@^2.3.6, through@^2.3.8: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tinybench@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" + integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== tinyexec@^0.3.2: version "0.3.2" resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz" integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== +tinyexec@^1.0.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.2.4.tgz#ae45bb2edebda94c70f4ea897e0f1243e470db71" + integrity sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg== + tinyglobby@^0.2.11: version "0.2.14" resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz" @@ -6332,6 +5614,19 @@ tinyglobby@^0.2.11: fdir "^6.4.4" picomatch "^4.0.2" +tinyglobby@^0.2.15, tinyglobby@^0.2.17: + version "0.2.17" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.17.tgz#562a9a6c9eb2b3b123d39719f9af5bb44fcd7631" + integrity sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.4" + +tinyrainbow@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-3.1.0.tgz#1d8a623893f95cf0a2ddb9e5d11150e191409421" + integrity sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw== + tmp@^0.0.33: version "0.0.33" resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" @@ -6339,11 +5634,6 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" @@ -6351,14 +5641,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -token-types@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz" - integrity sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg== - dependencies: - "@tokenizer/token" "^0.3.0" - ieee754 "^1.2.1" - tr46@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz" @@ -6381,11 +5663,6 @@ trim-newlines@^3.0.0: resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== -trim-off-newlines@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz" - integrity sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg== - trim-repeated@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz" @@ -6398,7 +5675,7 @@ ts-interface-checker@^0.1.9: resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== -ts-node@^10.8.1, ts-node@>=10: +ts-node@^10.8.1: version "10.9.1" resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== @@ -6417,18 +5694,6 @@ ts-node@^10.8.1, ts-node@>=10: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -ts-node@^9.0.0: - version "9.1.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz" - integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== - dependencies: - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.17" - yn "3.1.1" - tsconfig-paths@^3.14.2: version "3.14.2" resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz" @@ -6439,12 +5704,17 @@ tsconfig-paths@^3.14.2: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz" + integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== + +tslib@2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== -tslib@^1.9.0: +tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -6454,15 +5724,10 @@ tslib@^2.1.0: resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz" integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== -tslib@2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz" - integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== - -tslib@2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== +tslib@^2.4.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tsup@^8.5.0: version "8.5.0" @@ -6487,7 +5752,7 @@ tsup@^8.5.0: tinyglobby "^0.2.11" tree-kill "^1.2.2" -tsutils@^3.0.0, tsutils@^3.21.0: +tsutils@^3.21.0: version "3.21.0" resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== @@ -6501,11 +5766,6 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-fest@^0.13.1: - version "0.13.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz" - integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== - type-fest@^0.18.0: version "0.18.1" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" @@ -6521,36 +5781,16 @@ type-fest@^0.21.3: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^0.3.0: - version "0.3.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== - type-fest@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== -type-fest@^0.8.0: - version "0.8.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - type-fest@^0.8.1: version "0.8.1" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^1.0.1: - version "1.4.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - -type-fest@^2.12.2: - version "2.19.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - typed-array-buffer@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz" @@ -6612,7 +5852,7 @@ typedoc@^0.24.7: minimatch "^9.0.0" shiki "^0.14.1" -"typescript@^3.4.1 || ^4.0.0", typescript@^4.6.4, "typescript@^4.6.4 || ^5.0.0", typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", typescript@>=4, typescript@>=4.5.0, "typescript@4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x": +typescript@^4.6.4, "typescript@^4.6.4 || ^5.0.0": version "4.9.5" resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== @@ -6644,6 +5884,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + unique-string@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" @@ -6651,46 +5896,11 @@ unique-string@^2.0.0: dependencies: crypto-random-string "^2.0.0" -unique-string@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz" - integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== - dependencies: - crypto-random-string "^4.0.0" - universalify@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -update-notifier@^5.0.1: - version "5.1.0" - resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz" - integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== - dependencies: - boxen "^5.0.0" - chalk "^4.1.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.4.0" - is-npm "^5.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.1.0" - pupa "^2.1.1" - semver "^7.3.4" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" @@ -6698,13 +5908,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" - integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== - dependencies: - prepend-http "^2.0.0" - url-parse@^1.5.10: version "1.5.10" resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" @@ -6713,23 +5916,11 @@ url-parse@^1.5.10: querystringify "^2.1.1" requires-port "^1.0.0" -urlgrey@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/urlgrey/-/urlgrey-1.0.0.tgz" - integrity sha512-hJfIzMPJmI9IlLkby8QrsCykQ+SXDeO2W5Q9QTW3QpqZVTx4a/K7p8/5q+/isD8vsbVaFgql/gvAoQCRQ2Cb5w== - dependencies: - fast-url-parser "^1.1.3" - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -uuid@^8.0.0, uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" @@ -6748,6 +5939,45 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +"vite@^6.0.0 || ^7.0.0 || ^8.0.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/vite/-/vite-8.1.0.tgz#0734dc1a48faeb2bd5f5b16b66dcbfae484fec55" + integrity sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q== + dependencies: + lightningcss "^1.32.0" + picomatch "^4.0.4" + postcss "^8.5.15" + rolldown "~1.1.2" + tinyglobby "^0.2.17" + optionalDependencies: + fsevents "~2.3.3" + +vitest@^4.1.0: + version "4.1.9" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-4.1.9.tgz#98f22fbd70e2a18c4a92bb20624bc92e5dfac5f3" + integrity sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ== + dependencies: + "@vitest/expect" "4.1.9" + "@vitest/mocker" "4.1.9" + "@vitest/pretty-format" "4.1.9" + "@vitest/runner" "4.1.9" + "@vitest/snapshot" "4.1.9" + "@vitest/spy" "4.1.9" + "@vitest/utils" "4.1.9" + es-module-lexer "^2.0.0" + expect-type "^1.3.0" + magic-string "^0.30.21" + obug "^2.1.1" + pathe "^2.0.3" + picomatch "^4.0.3" + std-env "^4.0.0-rc.1" + tinybench "^2.9.0" + tinyexec "^1.0.2" + tinyglobby "^0.2.15" + tinyrainbow "^3.1.0" + vite "^6.0.0 || ^7.0.0 || ^8.0.0" + why-is-node-running "^2.3.0" + vscode-oniguruma@^1.7.0: version "1.7.0" resolved "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz" @@ -6763,7 +5993,7 @@ vscode-uri@^3.0.2: resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz" integrity sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA== -wcwidth@^1.0.1, wcwidth@>=1.0.1: +wcwidth@>=1.0.1, wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== @@ -6780,11 +6010,6 @@ webidl-conversions@^4.0.2: resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -well-known-symbols@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz" - integrity sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" @@ -6813,11 +6038,6 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-module@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz" - integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== - which-typed-array@^1.1.10, which-typed-array@^1.1.11: version "1.1.11" resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz" @@ -6829,14 +6049,7 @@ which-typed-array@^1.1.10, which-typed-array@^1.1.11: gopd "^1.0.1" has-tostringtag "^1.0.0" -which@^1.2.14: - version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^1.2.9: +which@^1.2.14, which@^1.2.9: version "1.3.1" resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -6850,12 +6063,13 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== +why-is-node-running@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" + integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== dependencies: - string-width "^4.0.0" + siginfo "^2.0.0" + stackback "0.0.2" word-wrap@^1.0.3: version "1.2.5" @@ -6908,7 +6122,7 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: +write-file-atomic@^3.0.0: version "3.0.3" resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== @@ -6928,21 +6142,11 @@ xtend@~4.0.1: resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - y18n@^5.0.5: version "5.0.8" resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" @@ -6953,41 +6157,11 @@ yaml@^1.10.2: resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yaml@^2.4.2: - version "2.8.0" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz" - integrity sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ== - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^20.2.2, yargs-parser@^20.2.3: version "20.2.9" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs@^15.0.2: - version "15.4.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - yargs@^16.0.0, yargs@^16.2.0: version "16.2.0" resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz"