diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 47aa63c9..00000000 --- a/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -.docusaurus -build \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index ae985a6a..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,91 +0,0 @@ -module.exports = { - parser: '@typescript-eslint/parser', - root: true, - extends: ['prettier', 'plugin:jest/recommended', 'plugin:import/recommended'], - plugins: ['@typescript-eslint', 'jest', 'prettier', 'unused-imports', 'import'], - env: { - 'jest/globals': true, - }, - overrides: [ - { - files: ['**/*.ts', '**/*.tsx'], - parser: '@typescript-eslint/parser', - extends: [ - 'plugin:@typescript-eslint/recommended', - 'plugin:@typescript-eslint/recommended-requiring-type-checking', - ], - settings: { - 'import/resolver': { - typescript: { - project: './tsconfig.json', - }, - }, - }, - parserOptions: { - tsconfigRootDir: __dirname, - project: ['./tsconfig.json'], - }, - rules: { - '@typescript-eslint/no-explicit-any': 'error', - '@typescript-eslint/no-unused-vars': 'error', - '@typescript-eslint/no-misused-promises': [ - 'error', - { - checksVoidReturn: { - arguments: false, - attributes: false, - }, - }, - ], - }, - }, - ], - rules: { - 'prettier/prettier': [ - 'error', - { - trailingComma: 'es5', - singleQuote: true, - printWidth: 100, - endOfLine: 'auto', - semi: true, - arrowParens: 'always', - bracketSpacing: true, - tabWidth: 2, - }, - ], - 'import/no-unresolved': [ - 0, - { - commonjs: true, - amd: true, - }, - ], - 'import/no-cycle': 'error', - 'jest/no-disabled-tests': 'warn', - 'jest/no-focused-tests': 'error', - 'jest/no-identical-title': 'error', - 'jest/valid-expect': 'error', - 'import/first': 'error', - 'import/named': 'off', - 'import/no-duplicates': 'error', - 'import/newline-after-import': 'error', - 'no-console': 'error', - 'no-unused-expressions': [ - 1, - { - allowTernary: true, - }, - ], - 'unused-imports/no-unused-imports': 'error', - 'unused-imports/no-unused-vars': [ - 'warn', - { - vars: 'all', - varsIgnorePattern: '^_', - args: 'after-used', - argsIgnorePattern: '^_', - }, - ], - }, -}; diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 34bd8bbc..74e43a48 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,7 +27,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v3 with: - node-version: 16.x.x + node-version: 18.x.x - name: Install dependencies run: npm ci diff --git a/.github/workflows/commitlint.yml b/.github/workflows/commitlint.yml index 8d299e0a..1ad7f869 100644 --- a/.github/workflows/commitlint.yml +++ b/.github/workflows/commitlint.yml @@ -27,7 +27,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v3 with: - node-version: 16.x.x + node-version: 18.x.x - name: Install dependencies run: npm install diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml index 96009e8f..3c886f80 100644 --- a/.github/workflows/eslint.yml +++ b/.github/workflows/eslint.yml @@ -27,7 +27,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v3 with: - node-version: 16.x.x + node-version: 18.x.x - name: Install dependencies run: npm ci diff --git a/.github/workflows/jest-tests.yml b/.github/workflows/jest-tests.yml index 0aaf650b..7004ba82 100644 --- a/.github/workflows/jest-tests.yml +++ b/.github/workflows/jest-tests.yml @@ -1,8 +1,8 @@ -name: Jest tests +name: Clone Bitbucket Repo and test on: push: - branches: ["main"] + branches: ["main", "feat/SD-960-node-sdk-v4"] pull_request: types: [opened, synchronize] @@ -10,33 +10,64 @@ jobs: tests: name: Run Jest tests timeout-minutes: 15 - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest] + runs-on: ubuntu-latest + env: + REGION: ${{ vars.REGION }} + ENVIRONMENT: ${{ vars.ENVIRONMENT }} + AWS_THIRD_PARTY_API_REGION: ${{ vars.AWS_THIRD_PARTY_API_REGION }} + ACCOUNT: ${{ secrets.ACCOUNT }} + SEED_API_KEY: ${{ secrets.SEED_API_KEY }} + SENTRY_DSN: ${{ secrets.SENTRY_DSN }} + SEGMENT_WRITE_KEY: ${{ secrets.SEGMENT_WRITE_KEY }} + SEGMENT_SOURCE_ID: ${{ secrets.SEGMENT_SOURCE_ID }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + SALABLE_STRIPE_SECRET_KEY: ${{ secrets.SALABLE_STRIPE_SECRET_KEY }} + SALABLE_STRIPE_TEST_SECRET_KEY: ${{ secrets.SALABLE_STRIPE_TEST_SECRET_KEY }} + DATABASE_URL: ${{ secrets.DATABASE_URL }} + LAUNCHDARKLY_KEY: ${{ secrets.LAUNCHDARKLY_KEY }} + KMS_ENCRYPTION_KEY_ARN: ${{ secrets.KMS_ENCRYPTION_KEY_ARN }} + SALABLE_BASE_URL: ${{ secrets.SALABLE_BASE_TEST_URL }} + SALABLE_TEST_API_KEY: ${{ secrets.SALABLE_TEST_API_KEY }} + STRIPE_ACCOUNT_ID: ${{ secrets.STRIPE_ACCOUNT_ID }} + STRIPE_KEY: ${{ secrets.STRIPE_KEY }} steps: - - name: Check out code - uses: actions/checkout@v4 - with: - fetch-depth: 0 + - name: Checkout this repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 # Fetch all history to avoid shallow clone issues + + - name: Set up SSH agent + uses: webfactory/ssh-agent@v0.7.0 + with: + ssh-private-key: ${{ secrets.BITBUCKET_SSH_KEY }} + + - name: Add Bitbucket to known_hosts + run: | + mkdir -p ~/.ssh + ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts + + - name: Clone Bitbucket repository + run: | + git clone ${{ vars.SALABLE_API_REPO_URL }} + if [ ! -d "salable-api" ]; then + echo "Error: Directory 'salable-api' does not exist." + exit 1 + fi + + - name: Build and deploy - - name: Fetch main branch - run: git fetch --no-tags --depth=1000 origin main + run: | + cd salable-api + npm ci + npx prisma generate + npx prisma db push --force-reset + npx sst build --stage node-sdk --region ${{ vars.REGION }} + npx sst deploy --stage node-sdk --region ${{ vars.REGION }} - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: 16.x.x + - name: Install dependencies + run: npm ci - - name: Install dependencies - run: npm install - - - name: Jest Tests Overall - run: npm run test - - - name: Jest Tests Code Coverage (branch) - run: npm run test:coverage - - - name: Jest Tests Code Coverage (global) - run: npm run test:globalCoverage + - name: Jest Tests Overall + run: npm run test \ No newline at end of file diff --git a/.husky/commit-msg b/.husky/commit-msg index 9ced9799..8f113d5a 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,4 +1 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - -npx --no -- commitlint --edit "" +npx --no -- commitlint --edit "" \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit index d4a43dd1..72c4429b 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - -npm run pre-commit +npm test diff --git a/.husky/pre-push b/.husky/pre-push index fd213fc3..79130947 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -1,4 +1 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - npm run test:coverage diff --git a/.npmignore b/.npmignore new file mode 100644 index 00000000..d89294c5 --- /dev/null +++ b/.npmignore @@ -0,0 +1,3 @@ +prisma + +test-utils \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json index 6b221a4a..3f4b7901 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -2,7 +2,7 @@ "singleQuote": true, "semi": true, "arrowParens": "always", - "printWidth": 100, + "printWidth": 300, "bracketSpacing": true, "tabWidth": 2 } diff --git a/CHANGELOG.md b/CHANGELOG.md index 333e6097..35ceeaf5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,56 +1,48 @@ ## [3.4.1](https://github.com/Salable/node-sdk/compare/v3.4.0...v3.4.1) (2024-10-10) - ### Bug Fixes -* deprecate rbac ([b75d464](https://github.com/Salable/node-sdk/commit/b75d464d1d01a9d801f097920bdf89758aadaecd)) +- deprecate rbac ([b75d464](https://github.com/Salable/node-sdk/commit/b75d464d1d01a9d801f097920bdf89758aadaecd)) # [3.4.0](https://github.com/Salable/node-sdk/compare/v3.3.0...v3.4.0) (2024-07-12) - ### Features -* **SD-168:** added verify-signature method ([c8b4a42](https://github.com/Salable/node-sdk/commit/c8b4a42a83fa72e6884adcfac96cefbddaf0dc20)) +- **SD-168:** added verify-signature method ([c8b4a42](https://github.com/Salable/node-sdk/commit/c8b4a42a83fa72e6884adcfac96cefbddaf0dc20)) # [3.3.0](https://github.com/Salable/node-sdk/compare/v3.2.1...v3.3.0) (2024-02-01) - ### Bug Fixes -* fixed licenses cancelMany method ([3cf5fe7](https://github.com/Salable/node-sdk/commit/3cf5fe7c052befd466f94c034214d4dec5043700)) - +- fixed licenses cancelMany method ([3cf5fe7](https://github.com/Salable/node-sdk/commit/3cf5fe7c052befd466f94c034214d4dec5043700)) ### Features -* currency and quantity parameters added checkout link and pricing table methods ([f822750](https://github.com/Salable/node-sdk/commit/f82275015c83fac69df2b0ab7b6b681821334c24)) +- currency and quantity parameters added checkout link and pricing table methods ([f822750](https://github.com/Salable/node-sdk/commit/f82275015c83fac69df2b0ab7b6b681821334c24)) ## [3.2.1](https://github.com/Salable/node-sdk/compare/v3.2.0...v3.2.1) (2023-12-05) - ### Bug Fixes -* added isTest to the response types ([46ba143](https://github.com/Salable/node-sdk/commit/46ba14365b7393b43a4d0417ecf6785d60633bc6)) +- added isTest to the response types ([46ba143](https://github.com/Salable/node-sdk/commit/46ba14365b7393b43a4d0417ecf6785d60633bc6)) # [3.2.0](https://github.com/Salable/node-sdk/compare/v3.1.0...v3.2.0) (2023-11-27) - ### Features -* added grace as an optional parameter to license check ([39105e8](https://github.com/Salable/node-sdk/commit/39105e806c7dfc4ddbafc0e825e19a8628532457)) +- added grace as an optional parameter to license check ([39105e8](https://github.com/Salable/node-sdk/commit/39105e806c7dfc4ddbafc0e825e19a8628532457)) # [3.1.0](https://github.com/Salable/node-sdk/compare/v3.0.1...v3.1.0) (2023-11-24) - ### Bug Fixes -* updated getByGranteeId response type comment ([143a3a8](https://github.com/Salable/node-sdk/commit/143a3a883339aa8992cfecb74ba807c6e16e3705)) - +- updated getByGranteeId response type comment ([143a3a8](https://github.com/Salable/node-sdk/commit/143a3a883339aa8992cfecb74ba807c6e16e3705)) ### Features -* create licenses updated to be able to create many licenses ([d0b7f43](https://github.com/Salable/node-sdk/commit/d0b7f4382e38fd7d774bf5eef7e4ac25f80a3978)) -* create licenses updated to be able to create many licenses ([9b43b3a](https://github.com/Salable/node-sdk/commit/9b43b3a69be7d9e529766e0e465647dce93dcf7a)) -* licenses endpoints up to date ([e0972da](https://github.com/Salable/node-sdk/commit/e0972dacceea6d9723b2969ba5d9e5948bcea133)) +- create licenses updated to be able to create many licenses ([d0b7f43](https://github.com/Salable/node-sdk/commit/d0b7f4382e38fd7d774bf5eef7e4ac25f80a3978)) +- create licenses updated to be able to create many licenses ([9b43b3a](https://github.com/Salable/node-sdk/commit/9b43b3a69be7d9e529766e0e465647dce93dcf7a)) +- licenses endpoints up to date ([e0972da](https://github.com/Salable/node-sdk/commit/e0972dacceea6d9723b2969ba5d9e5948bcea133)) ## [3.0.1](https://github.com/Salable/node-sdk/compare/v3.0.0...v3.0.1) (2023-11-24) diff --git a/README.md b/README.md index 264d50d5..16345442 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Salable SDK for JavaScript +# Salable SDK for JavaScript The Salable SDK enables you to easily interact with the Salable ecosystem, accessing the Salable API, and other toolkit methods. @@ -9,12 +9,47 @@ Let’s walk through setting up a project that uses the Salable API Class from t 1. Create a new Node.js project. 2. Inside of the project, run: `npm install @salable/node-sdk`. Adding packages results in update in lock file, [yarn.lock](https://yarnpkg.com/getting-started/qa/#should-lockfiles-be-committed-to-the-repository) or [package-lock.json](https://docs.npmjs.com/configuring-npm/package-lock-json). You **should** commit your lock file along with your code to avoid potential breaking changes. -3. Create a new file called index.js, Instantiate a Salable Class and send a request. +## v4.0.0 Update + +The SDK now supports Salable API version selection and developers can choose which version of the Salable API they want to interact with via the SDK +As such, the Salable API version is now a required argument when instantiating the SDK ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('your_api_key', 'v2'); +``` +> **_NOTE:_** Support for `v1` of the Salable API has been deprecated, `v2` is currently the only supported version + +### General Changes -const check = await salable.licenses.check('{{PRODUCT_UUID}}', ['userId_1']); +#### Salable API versioning and Types +- Types and method documentation are dynamic and automatically adjust to the version selected + +```typescript +import { Salable } from '@salable/node-sdk'; + +const salableV1 = new Salable('your_api_key', 'v1'); // NOTE: 'v1' is not supported and used for example purposes +const salableV2 = new Salable('your_api_key', 'v2'); + +// The "licenses.getUsage" method is supported in this version and will work +await salableV1.licenses.getUsage(): + +// This will error as "licenses.getUsage" has been deprecated in 'v2' +await salableV2.licenses.getUsage(): // Will error with: "Property 'getUsage' does not exist ..." ``` +#### Pagination +- All methods are now scope authorized and your API Key must contain the appropriate scopes to user certain methods +- `getAll` endpoints are now paginated and offer cursor based pagination + +```typescript +{ + first: "item-id-1", + last: "item-id-3", + data: [ + {id: "item-id-1"}, + {id: "item-id-2"}, + {id: "item-id-3"} + ] +} +``` \ No newline at end of file diff --git a/__tests__/_setup/setup-test-envs.ts b/__tests__/_setup/setup-test-envs.ts new file mode 100644 index 00000000..07597b9b --- /dev/null +++ b/__tests__/_setup/setup-test-envs.ts @@ -0,0 +1,27 @@ +import createStripeData from '../../test-utils/stripe/create-stripe-test-data'; +import createTestData from '../../test-utils/scripts/create-test-data'; +import { config } from 'dotenv'; +import { exec } from 'child_process'; +import { promisify } from 'util'; +import getConsoleLoader from '../../test-utils/helpers/console-loading-wheel'; + +const promiseExec = promisify(exec); + +config({ path: '.env.test' }); + +const globalSetup = async () => { + console.log('\n PREPARING GLOBAL SETUP'); + const loadingWheel = getConsoleLoader('RESETTING DATABASE'); + await promiseExec('npx prisma db push --force-reset'); + clearInterval(loadingWheel); + console.log('\n DATABASE RESET'); + + const obj = await createStripeData(); + console.log('\n STRIPE ACCOUNT DATA CREATED'); + process.env.stripEnvs = JSON.stringify(obj); + + await createTestData(obj); + console.log('\n TEST DATA CREATED'); +}; + +export default globalSetup; diff --git a/__tests__/_setup/test-setup.ts b/__tests__/_setup/test-setup.ts new file mode 100644 index 00000000..310a0d12 --- /dev/null +++ b/__tests__/_setup/test-setup.ts @@ -0,0 +1,2 @@ +import * as matchers from 'jest-extended'; +expect.extend(matchers); diff --git a/docs/docs/changelog.md b/docs/docs/changelog.md index 37761e23..2829c464 100644 --- a/docs/docs/changelog.md +++ b/docs/docs/changelog.md @@ -4,6 +4,75 @@ sidebar_position: 2 # Changelog +## v4.0.0 + +### Breaking Changes + +- Salable API versions are now supported and `Version` is now a required argument upon `Salable` instantiation. (Currently supports `v2`) + - Support for `v1` of the Salable API has been deprecated + +### Licenses + +- `getAll` now supports cursor based pagination, licenses can also be filtered by `status`, `subscriptionUuid`, `planUuid`, `productUuid`, and `granteeId` +- `getOne` and `getForGranteeId` now offer an `expand` option to expand certain properties (e.g. `plan` etc) +- `getForPurchaser` no longer offers `cancelLink` as an option +- `getUsage` has been deprecated +- `create` and `createMany` are now seperate methods, `status` and `endTime` have been added as optional parameters +- `update` method parameters have been changed to have an object as the second parameter, the `granteeId` property is where the grantee ID value can be assigned +- `cancelMany` method parameter has been updated to be an object, the `uuids` property is where an array of license UUIDs to cancel can be assigned +- `verifyLicenseCheck` has been renamed to `verify` + +### Plans + +- `getOne` now offers an `expand` option to expand certain properties (e.g. `product` etc) +- `getCheckoutLink` options have now been updated: + - `vat` is no longer supported and has been deprecated + - `customer` has been deprecated and been replaced with `customerId` and `customerEmail` + - `contactUsLink` has been deprecated + - `marketingConsent` has been deprecated + - `couponCode` has been deprecated + - `customMessage` has been deprecated + - `automaticTax`, `changeQuantity`, and `requirePaymentMethod` have been added + +### Pricing Tables + +- `getOne` options have been updated. The only supported options are now `granteeId` and `currency` + +### Products + +- `getOne` now offers an `expand` option to expand certain properties (e.g. `plan` etc) +- `getPricingTable` options have been updated. The only supported options are now `granteeId` and `currency` + +### Subscriptions + +- `getOne` now offers an `expand` option to expand certain properties (e.g. `plan` etc) +- `getAll` method added. Retrieves a list of all subscriptions +- `getInvoices` method added. Retrieves a list of invoices for a subscription +- `getSwitchablePlans` method added. Retrieves a list of available plans that a subscribed user can switch to +- `getUpdatePaymentLink` method added. Retrieves the update payment portal link for a specific subscription +- `getPortalLink` method added. Retrieves the customer portal link for a subscription +- `getCancelSubscriptionLink` method added. Retrieves the cancel subscription portal link for a specific subscription +- `getPaymentMethod` method added. Retrieves the payment method used to pay for a subscription +- `reactivateSubscription` method added. Reactivate a Subscription's scheduled cancellation before the billing period has passed +- `updatePlan` method has been deprecated +- `addSeats` and `removeSeats` now optionally allow proration as an option + +### Usage (NEW) + +- `getAllUsageRecords` gets all usage records for grantee's metered licenses +- `getCurrentUsageRecord` gets current usage record for grantee on plan +- `updateLicenseUsage` updates a license's usage + +### RBAC (DEPRECATED) + +- All RBAC methods have been deprecated and currently not supported by the SDK + +### Other Changes + +- **DOCS**: JSDoc and SDK documentation have been updated +- interfaces have been replaced with types +- `403` and `404` errors now specifically handled + ## v3.2.0 ### Licenses diff --git a/docs/docs/licenses/_category_.json b/docs/docs/licenses/_category_.json index cda9a30b..ecd7f061 100644 --- a/docs/docs/licenses/_category_.json +++ b/docs/docs/licenses/_category_.json @@ -3,6 +3,6 @@ "position": 2, "link": { "type": "generated-index", - "description": " " + "description": "Contains methods for the License resource" } } diff --git a/docs/docs/licenses/cancel-many.md b/docs/docs/licenses/cancel-many.md index ed666eb9..77a15cee 100644 --- a/docs/docs/licenses/cancel-many.md +++ b/docs/docs/licenses/cancel-many.md @@ -1,5 +1,5 @@ --- -sidebar_position: 11 +sidebar_position: 12 --- # Cancel many Licenses @@ -11,9 +11,9 @@ This method will cancel many ad hoc Licenses ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -await salable.licenses.cancelMany(['{{LICENSE_UUID_ONE}}', '{{LICENSE_UUID_TWO}}']); +await salable.licenses.cancelMany(['license_1', 'license_2']); ``` ## Parameters @@ -26,4 +26,4 @@ _Type:_ `string[]` ## Return Type -For more information about this request see our API documentation on [cancel many Licenses](https://docs.salable.app/api#tag/Licenses/operation/cancelLicenses) +For more information about this request see our API documentation on [cancel many Licenses](https://docs.salable.app/api/v2#tag/Licenses/operation/cancelLicenses) diff --git a/docs/docs/licenses/cancel.md b/docs/docs/licenses/cancel.md index 27a16b68..62748378 100644 --- a/docs/docs/licenses/cancel.md +++ b/docs/docs/licenses/cancel.md @@ -1,5 +1,5 @@ --- -sidebar_position: 10 +sidebar_position: 11 --- # Cancel License @@ -11,14 +11,14 @@ This method will cancel an ad hoc License ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -await salable.licenses.cancel('{{LICENSE_UUID}}'); +await salable.licenses.cancel('license_1'); ``` ## Parameters -##### licenseUuid (_required_) +#### licenseUuid (_required_) _Type:_ `string` @@ -26,4 +26,4 @@ _Type:_ `string` ## Return Type -For more information about this request see our API documentation on [cancel License](https://docs.salable.app/api#tag/Licenses/operation/cancelLicense) +For more information about this request see our API documentation on [cancel License](https://docs.salable.app/api/v2#tag/Licenses/operation/cancelLicense) diff --git a/docs/docs/licenses/check.md b/docs/docs/licenses/check.md index 98561d63..f044f145 100644 --- a/docs/docs/licenses/check.md +++ b/docs/docs/licenses/check.md @@ -1,5 +1,5 @@ --- -sidebar_position: 3 +sidebar_position: 10 --- # Check License @@ -11,35 +11,26 @@ Retrieves the capabilities the grantee(s) have access to. ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -const check = await salable.licenses.check('{{PRODUCT_UUID}}', ['userId_1', 'userId_2']); +const check = await salable.licenses.check({ + productUuid: 'product1', + granteeIds: ['grantee_1', 'grantee_2'], +}); ``` ## Parameters -##### productUuid (_required_) +#### checkLicenseParams (_required_) -_Type:_ `string` +_Type:_ `CheckLicenseInput` -Product `uuid` - ---- - -##### granteeIds (_required_) - -_Type:_ `string[]` - -A String array of the grantee Ids you wish to check against - ---- - -##### grace - -_Type:_ `number` - -The number of days to extend the end dates of capabilities +| Option | Type | Description | Required | +| -------------------- | -------- | ---------------------------------- | -------- | +| grantproductUuideeId | string | The UUID of the product | ✅ | +| granteeIds | string[] | An array of grantee IDs | ✅ | +| grace | number | Optional grace period to filter by | ❌ | ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) diff --git a/docs/docs/licenses/create-many.md b/docs/docs/licenses/create-many.md new file mode 100644 index 00000000..afe7d26c --- /dev/null +++ b/docs/docs/licenses/create-many.md @@ -0,0 +1,52 @@ +--- +sidebar_position: 2 +--- + +# Create Many Licenses + +This method creates many ad hoc licenses + +## Code Sample + +### Create Many + +```typescript +import { Salable } from '@salable/node-sdk'; + +const salable = new Salable('{{API_KEY}}', 'v2'); + +const license = await salable.licenses.createMany([ + { + planUuid: 'plan_1', + member: 'orgId_1234', + granteeId: 'userId_1', + status: 'ACTIVE', + endTime: '2025-07-06T12:00:00.000Z', + }, + { + planUuid: 'plan_2', + member: 'orgId_1234', + granteeId: 'userId_2', + status: 'ACTIVE', + endTime: '2025-07-06T12:00:00.000Z', + } +]); +``` + +## Parameters + +#### createManyAdHocLicenseParams (_required_) + +_Type:_ `CreateAdhocLicenseInput[]` + +| Option | Type | Description | Required | +| --------- | ------ | --------------------------------------------------------------------------------------------------------------------- | -------- | +| planUuid | string | The UUID of the plan associated with the license. The planUuid can be found on the Plan view in the Salable dashboard | ✅ | +| member | string | The ID of the member who will manage the license. | ✅ | +| granteeId | string | The grantee ID for the license. | ❌ | +| status | string | The status of the created license, e.g. "ACTIVE" "TRIALING" | ❌ | +| endTime | string | Provide a custom end time for the license; this will override the plan's default interval. | ❌ | + +## Return Type + +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/docs/licenses/create.md b/docs/docs/licenses/create.md index 1e06d847..d9422e2b 100644 --- a/docs/docs/licenses/create.md +++ b/docs/docs/licenses/create.md @@ -4,7 +4,7 @@ sidebar_position: 1 # Create License -This method will create one or many a new ad hoc licenses. +This method creates an ad hoc license ## Code Sample @@ -13,60 +13,31 @@ This method will create one or many a new ad hoc licenses. ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); const license = await salable.licenses.create({ - planUuid: '{{PLAN_UUID}}', + planUuid: 'plan_1', member: 'orgId_1234', - granteeId: 'userId-1', + granteeId: 'userId_1', + status: 'ACTIVE', + endTime: '2025-07-06T12:00:00.000Z', }); ``` -### Create many - -```typescript -import { Salable } from '@salable/node-sdk'; - -const salable = new Salable('{{API_KEY}}'); - -const license = await salable.licenses.create([ - { - planUuid: '{{PLAN_UUID}}', - member: 'orgId_1234', - granteeId: 'userId-1', - }, - { - planUuid: '{{PLAN_UUID}}', - member: 'orgId_1234', - granteeId: 'userId-2', - }, -]); -``` - ## Parameters -##### planUuid (_required_) - -_Type:_ `string` - -`uuid` of the Plan you wish to create the License on - ---- - -##### member (_required_) - -_Type:_ `string` - -The ID of the member who will manage the license - ---- - -##### granteeId (_required_) +#### createAdHocLicenseParams (_required_) -_Type:_ `string` or `null` +_Type:_ `CreateAdhocLicenseInput` -The grantee ID for the license +| Option | Type | Description | Required | +| --------- | ------ | --------------------------------------------------------------------------------------------------------------------- | -------- | +| planUuid | string | The UUID of the plan associated with the license. The planUuid can be found on the Plan view in the Salable dashboard | ✅ | +| member | string | The ID of the member who will manage the license. | ✅ | +| granteeId | string | The grantee ID for the license. | ❌ | +| status | string | The status of the created license, e.g. "ACTIVE" "TRIALING" | ❌ | +| endTime | string | Provide a custom end time for the license; this will override the plan's default interval. | ❌ | ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/docs/licenses/get-all.md b/docs/docs/licenses/get-all.md index 9518e1b3..7906b602 100644 --- a/docs/docs/licenses/get-all.md +++ b/docs/docs/licenses/get-all.md @@ -11,11 +11,27 @@ Returns a list of all the licenses created by your Salable organization ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); const licenses = await salable.licenses.getAll(); ``` +## Parameters + +#### options + +_Type:_ `GetLicenseOptions` + +| Option | Type | Description | Required | +| ---------------- | ------ | ----------------------------------------------------------- | -------- | +| status | string | The status of the created license, e.g. "ACTIVE" "TRIALING" | ❌ | +| cursor | string | Cursor value, used for pagination | ❌ | +| take | string | The amount of licenses to fetch | ❌ | +| subscriptionUuid | string | The UUID of the subscription to filter by | ❌ | +| granteeId | string | The grantee ID to filter by | ❌ | +| planUuid | string | The UUID of the plan to filter by | ❌ | +| productUuid | string | The UUID of the product to filter by | ❌ | + ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/docs/licenses/get-count.md b/docs/docs/licenses/get-count.md index ab9f54a0..bd32df4e 100644 --- a/docs/docs/licenses/get-count.md +++ b/docs/docs/licenses/get-count.md @@ -1,5 +1,5 @@ --- -sidebar_position: 7 +sidebar_position: 5 --- # Get Licenses Count @@ -11,25 +11,22 @@ This method returns aggregate count number of Licenses. ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -const licenseCount = await salable.licenses.getCount('{{SUBSCRIPTION_UUID}}'); +const licenseCount = await salable.licenses.getCount({subscriptionUuid: 'subscription_1', status: 'ACTIVE'}); ``` ## Parameters -#### subscriptionUuid (_required_) +#### options -_Type:_ `string` +_Type:_ `GetLicenseCountOptions` -The `uuid` of the subscription to filter the license count - -#### status - -_Type:_ `string` - -The `status` of the license to filter by +| Option | Type | Description | Required | +| ---------------- | ------ | ------------------------ | -------- | +| subscriptionUuid | string | Filter by subscription | ❌ | +| status | string | Filter by license status | ❌ | ## Return Type -For more information about this request see our API documentation on [License count](https://docs.salable.app/api#tag/Licenses/operation/getLicensesCount) +For more information about this request see our API documentation on [License count](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicensesCount) diff --git a/docs/docs/licenses/get-for-granteeId.md b/docs/docs/licenses/get-for-granteeId.md index 33ee51d2..349ea73d 100644 --- a/docs/docs/licenses/get-for-granteeId.md +++ b/docs/docs/licenses/get-for-granteeId.md @@ -1,5 +1,5 @@ --- -sidebar_position: 4 +sidebar_position: 7 --- # Get Licenses for a Grantee ID @@ -11,9 +11,9 @@ Returns licenses for a grantee ID ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -const licenses = await salable.licenses.getForGranteeId('userId_1'); +const licenses = await salable.licenses.getForGranteeId('userId_1', { expand: 'plan' }); ``` ## Parameters @@ -24,6 +24,16 @@ _Type:_ `string` The grantee ID of the licenses +--- + +#### options + +_Type:_ `{ expand: string[] }` + +| Option | Type | Description | Required | +| ------ | ------ | --------------------------------------------------------------- | -------- | +| expand | string | Specify which properties to expand. e.g. `{ expand: ['plan'] }` | ❌ | + ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/docs/licenses/get-for-purchaser.md b/docs/docs/licenses/get-for-purchaser.md index 74d618d0..082a5fbf 100644 --- a/docs/docs/licenses/get-for-purchaser.md +++ b/docs/docs/licenses/get-for-purchaser.md @@ -1,5 +1,5 @@ --- -sidebar_position: 5 +sidebar_position: 6 --- # Get Licenses for a Purchaser @@ -11,33 +11,23 @@ Returns licenses for a purchaser on a product ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -const licenses = await salable.licenses.getForPurchaser('orgId_1', '{{PRODUCT_UUID}}'); +const licenses = await salable.licenses.getForPurchaser({purchaser: 'purchaser_1', productUuid: 'product_1', status: 'ACTIVE'}); ``` ## Parameters -#### purchaser (_required_) +#### getForPurchaserOptions (_required_) -_Type:_ `string` +_Type:_ `GetPurchasersLicensesOptions` -The purchaser of the license - -#### productUuid (_required_) - -_Type:_ `string` - -The `uuid` of the product which the license gives access to - -#### options - -_Type:_ `LicenseGetByPurchaserOptions` - -| Option | Description | -| ------ | ------------------------ | -| status | Filter by license status | +| Option | Type | Description | Required | +| ----------- | ------ | ------------------------------------------ | -------- | +| purchaser | string | The purchaser of the licenses to fetch for | ✅ | +| productUuid | string | The UUID of the product | ✅ | +| status | string | Filter by license status | ❌ | ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/docs/licenses/get-one.md b/docs/docs/licenses/get-one.md index ae31006c..e916f5f8 100644 --- a/docs/docs/licenses/get-one.md +++ b/docs/docs/licenses/get-one.md @@ -1,5 +1,5 @@ --- -sidebar_position: 2 +sidebar_position: 4 --- # Get One License @@ -11,11 +11,29 @@ Returns a single license ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -const license = await salable.licenses.getOne('{{LICENSE_UUID}}'); +const license = await salable.licenses.getOne('license_1', { expand: 'plan' }); ``` +## Parameters + +#### licenseUuid (_required_) + +_Type:_ `string` + +The UUID of the license + +--- + +#### options + +_Type:_ `{ expand: string[] }` + +| Option | Type | Description | Required | +| ------ | -------- | -------------------------------------------------------------- | -------- | +| expand | string[] | Specify which properties to expand. e.g. `{ expand: ['plan' }` | ❌ | + ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/docs/licenses/get-usage-on-license.md b/docs/docs/licenses/get-usage-on-license.md deleted file mode 100644 index 753a076e..00000000 --- a/docs/docs/licenses/get-usage-on-license.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Get usage on a License - -Returns usage count on a License - -## Code Sample - -```typescript -import { Salable } from '@salable/node-sdk'; - -const salable = new Salable('{{API_KEY}}'); - -const licenses = await salable.licenses.getUsage('{{LICENSE_UUID}}'); -``` - -## Parameters - -#### licenseUuid (_required_) - -_Type:_ `string` - -The `uuid` of the license - -## Return Type - -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/docs/licenses/update-many.md b/docs/docs/licenses/update-many.md index 72d07d2e..49657160 100644 --- a/docs/docs/licenses/update-many.md +++ b/docs/docs/licenses/update-many.md @@ -11,34 +11,26 @@ This method updates many Licenses with the values passed into the body of the re ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); const updatedLicenses = await salable.licenses.updateMany([ - { granteeId: 'userId_1', uuid: '{{LICENSE_UUID_ONE}}' }, - { granteeId: 'userId_2', uuid: '{{LICENSE_UUID_TWO}}' }, + { granteeId: 'userId_1', uuid: 'license_1' }, + { granteeId: 'userId_2', uuid: 'license_2' }, ]); ``` ## Parameters -### updateManyConfig (_required_) +### updateManyLicensesParams(_required_) -_Type:_ `IUpdateManyLicenseInput[]` +_Type:_ `UpdateManyLicenseInput[]` -All config options which can be passed in to this method +| Option | Type | Description | Required | +| --------- | ------ | --------------------------------- | -------- | +| granteeId | string | The new grantee ID value | ✅ | +| uuid | string | The UUID of the license to update | ✅ | -#### uuid (_required_) - -_Type:_ `string` - -The `uuid` of the license to be updated - -#### granteeId (_required_) - -_Type:_ `string` or `null` - -The value of the new granteeId. To un-assign a license set the `granteeId` to `null`. ## Return Type -For more information about this request see our API documentation on [licenses object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [licenses object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/docs/licenses/update.md b/docs/docs/licenses/update.md index 8c8d5d80..c14965ef 100644 --- a/docs/docs/licenses/update.md +++ b/docs/docs/licenses/update.md @@ -11,14 +11,14 @@ This method updates specific Licenses with the values passed into the body of th ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -const updatedLicense = await salable.licenses.updateMany([ await salable.licenses.update('{{LICENSE_UUID}}', 'userId_2'); +const updatedLicense = await salable.licenses.update('license_1', { granteeId: 'updated_grantee_id' }); ``` ## Parameters -##### licenseUuid (_required_) +#### licenseUuid (_required_) _Type:_ `string` @@ -26,12 +26,14 @@ The `uuid` of the license to be updated --- -##### granteeId (_required_) +#### updateLicenseParams (_required_) -_Type:_ `string` or `null` +_Type:_ `{ granteeId: string }` -The value of the new granteeId. To un-assign the license set the `granteeId` to `null`. +| Option | Type | Description | Required | +| --------- | ------ | ------------------------ | -------- | +| granteeId | string | The new grantee ID value | ✅ | ## Return Type -For more information about this request see our API documentation on [license object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [license object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/docs/licenses/verify.md b/docs/docs/licenses/verify.md new file mode 100644 index 00000000..6ad094d5 --- /dev/null +++ b/docs/docs/licenses/verify.md @@ -0,0 +1,50 @@ +--- +sidebar_position: 13 +--- + +# Verify License Checks + +This method can be used to verify license checks using your organsiations public key, the signature, and the capabilities returned from a license check method. + +## Code Sample + +```typescript +import { Salable } from '@salable/node-sdk'; + +const salable = new Salable('{{API_KEY}}', 'v2'); + +const verified = salable.licenses.verify({ + publicKey: 'your_public_key', + signature: 'license_check_signature', + payload: JSON.stringify([ + { + capability: 'capability_1', + expiry: '2024-08-14T13:15:49.310Z' + }, + { + capability: 'capability_2', + expiry: '2024-08-14T13:32:29.313Z' + }, + { + capability: 'capability_3', + expiry: '2024-08-14T13:32:29.313Z' + } + ]), +}); +``` + +## Parameters + +#### verifyLicenseParams (_required_) + +_Type:_ `{ publicKey: String; signature: String; payload: String }` + +| Option | Type | Description | Required | +| --------- | ------ | ---------------------------------------------- | -------- | +| publicKey | string | The public key belonging to your organisation | ✅ | +| signature | string | The signature returned from a license check | ✅ | +| payload | string | The capabilities returned from a license check | ✅ | + +## Return Type + +`boolean` diff --git a/docs/docs/overview.md b/docs/docs/overview.md index bd2f1638..a3089e54 100644 --- a/docs/docs/overview.md +++ b/docs/docs/overview.md @@ -8,10 +8,12 @@ Salable is designed to be a flexible tool to allow you to integrate your app wit Our Node SDK exposes HTTP endpoints that accept requests with JSON arguments and return JSON responses. Authentication is done via the API key passed to the `Salable` class. +Specific versions of the Salable API can also be specified as the second argument of the `Salable` constructor function. + ```ts import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); ``` > NOTE: If you'd like to use test mode, make sure to use an API key generated in test mode (prefixed with `test_`). diff --git a/docs/docs/plans/_category_.json b/docs/docs/plans/_category_.json index 233d0d08..8e44db87 100644 --- a/docs/docs/plans/_category_.json +++ b/docs/docs/plans/_category_.json @@ -3,6 +3,6 @@ "position": 5, "link": { "type": "generated-index", - "description": " " + "description": "Contains methods for the Plans resource" } } diff --git a/docs/docs/plans/get-capabilities.md b/docs/docs/plans/get-capabilities.md index 92fa53c2..3b3e9819 100644 --- a/docs/docs/plans/get-capabilities.md +++ b/docs/docs/plans/get-capabilities.md @@ -11,14 +11,14 @@ Returns a list of all the Capabilities associated with a Plan ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -const plan = await salable.plans.getCapabilities('{{PLAN_UUID}}'); +const plan = await salable.plans.getCapabilities('plan_1'); ``` ## Parameters -##### planId (_required_) +##### planUuid (_required_) _Type:_ `string` @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Features from ## Return Type -For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCapabilities) +For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCapabilities) diff --git a/docs/docs/plans/get-checkout-link.md b/docs/docs/plans/get-checkout-link.md index 3f861f18..a1b6a65f 100644 --- a/docs/docs/plans/get-checkout-link.md +++ b/docs/docs/plans/get-checkout-link.md @@ -13,9 +13,9 @@ Returns the checkout link for a plan. This endpoint will only work for paid Plan ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -const checkoutLink = await salable.plans.getCheckoutLink('{{PLAN_UUID}}', { +const checkoutLink = await salable.plans.getCheckoutLink('plan_1', { cancelUrl: 'https://example.com/cancel', successUrl: 'https://example.com/success', granteeId: 'userId-1', @@ -30,88 +30,41 @@ import { Salable } from '@salable/node-sdk'; const salable = new Salable('{{API_KEY}}'); -const checkoutLink = await salable.plans.getCheckoutLink('{{PLAN_UUID}}', { - cancelUrl: 'https://example.com/cancel', - successUrl: 'https://example.com/success', - granteeId: 'userId-1', - member: 'orgId_1', - customer: { - email: 'person@company.com', - }, -}); -``` - -#### VAT (Paddle only) - -```typescript -import { Salable } from '@salable/node-sdk'; - -const salable = new Salable('{{API_KEY}}'); - -const checkoutLink = await salable.plans.getCheckoutLink('{{PLAN_UUID}}', { +const checkoutLink = await salable.plans.getCheckoutLink('plan_1', { cancelUrl: 'https://example.com/cancel', successUrl: 'https://example.com/success', granteeId: 'userId-1', member: 'orgId_1', - vat: { - number: 'GB123456789', - companyName: 'Company', - street: '1 Street Name', - city: 'City', - state: 'State', - country: 'GB', - postcode: 'NR1 1RN', - }, + customerEmail: 'person@company.com', }); ``` ## Parameters -##### planId (_required_) +#### planUuid (_required_) _Type:_ `string` The `uuid` of the Plan to get the checkout link from -##### queryParams (_required_) +#### options (_required_) -_Type:_ `IPlanCheckoutInputParams` +_Type:_ `GetPlanCheckoutOptions` Query parameters to be passed in to the checkout config -| **Parameter** | **Description** | **Required** | -| :--------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | -| successUrl | The URL to send users if they have successfully completed a purchase | ✅ | -| cancelUrl | The URL to send users to if the transaction fails. | ✅ | -| member | The purchaser of the license | ✅ | -| granteeId | Value to use as granteeId on Plan | ✅ | -| marketingConsent | Opt user in to marketing | ❌ | -| couponCode | Coupon code to be used in checkout | ❌ | -| promoCode | If your service offers promotional codes, use the `promoCode` parameter to automatically fill in these codes during checkout. Make sure these codes are already configured in your payment provider.
**Stripe**
Provide the Stripe Promotion Code ID to the `promoCode` parameter, you can find this in your Stripe dashboard. For guidance on creating a promotion code in Stripe, consult their [documentation](https://stripe.com/docs/billing/subscriptions/coupons). Make sure to use the ID and not the promo code itself.
_Note_: If a promo code is applied this way, customers will not have the ability to modify it in the checkout. If you would prefer to give customers the option to enter a promo code themselves, you can use the `allowPromoCode` parameter instead.
**Paddle**
Pass the coupon code that you have created in the Paddle dashboard directly into the `promoCode` parameter. Users can modify this manually in the checkout later. | ❌ | -| allowPromoCode | The `allowPromoCode` parameter controls the visibility and functionality of the Promotion Code field in your checkout process.
**Stripe**
In Stripe, you can use either `allowPromoCode` or `promoCode`, but not both simultaneously. Setting `allowPromoCode` to true displays the promo code field, allowing customers to enter a code.
_Note_: If you would prefer to use a pre-filled specific promo code, use the `promoCode` parameter with the Promotion Code ID from your Stripe dashboard. Remember, using `promoCode` in Stripe means customers cannot modify the code during checkout.
**Paddle**
By default, this is set to true. Setting `allowPromoCode` to false will hide the promo code field in the checkout. If you're using the `promoCode` parameter to pre-fill a code, the user can still modify it during checkout. | ❌ | -| currency | Shortname of the currency to be used in the checkout. The currency must be added to the plan's product in Salable. If not specified, it defaults to the currency selected on the product. | ❌ | -| quantity | Only applicable for per seat plans. Set the amount of seats the customer pays for in the checkout. | ❌ | -| customer.email | Pre fills email for checkout customer | ❌ | - -See [code example](#customer-details) with customer details - -##### Paddle specific parameters - -| **Parameter** | **Description** | **Required** | -| :---------------- | :----------------------------------------------------------------- | :----------: | -| vat.number | Prefill the checkout form with the customer's VAT number | ❌ | -| vat.companyName | Prefill the checkout form with the customer's Company Name for VAT | ❌ | -| vat.street | Prefill the checkout form with the customer's Street for VAT | ❌ | -| vat.city | Prefill the checkout form with the customer's city for VAT | ❌ | -| vat.state | Prefill the checkout form with the customer's state for VAT | ❌ | -| vat.country | Prefill the checkout form with the customer's country for VAT | ❌ | -| vat.postcode | Prefill the checkout form with the customer's postcode for VAT | ❌ | -| customMessage | Add a message to show in Paddle checkout | ❌ | -| customer.country | Pre fills country for checkout customer | ❌ | -| customer.postcode | Pre fills postcode for checkout customer | ❌ | - -See [code example](#vat-paddle-only) with VAT parameters +| **Parameter** | **Type** | **Description** | **Required** | +| :------------ |:------| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | +| successUrl | string | The URL to send users if they have successfully completed a purchase | ✅ | +| cancelUrl |string | The URL to send users to if the transaction fails. | ✅ | +| member | string |The purchaser of the license | ✅ | +| granteeId | string |Value to use as granteeId on Plan | ✅ | +| promoCode | string |Enables the promo code field in Stripe checkout. Cannot be used with promoCode. | ❌ | +| currency | string |Shortname of the currency to be used in the checkout. The currency must be added to the plan's product in Salable. If not specified, it defaults to the currency selected on the product. | ❌ | +| quantity | string |Only applicable for per seat plans. Set the amount of seats the customer pays for in the checkout. | ❌ | +| customerEmail | string |Pre fills email for checkout customer | ❌ | +| automaticTax | string |Automatically calculate tax on checkout based on customers location and your Stripe settings. | ❌ | ## Return Type -For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api#tag/Plans/operation/getPlanCheckoutLink) +For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCheckoutLink) diff --git a/docs/docs/plans/get-currencies.md b/docs/docs/plans/get-currencies.md index 8b69b722..09dc345c 100644 --- a/docs/docs/plans/get-currencies.md +++ b/docs/docs/plans/get-currencies.md @@ -11,14 +11,14 @@ Returns a list of all the Currencies associated with a Plan ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -const plan = await salable.plans.getCurrencies('{{PLAN_UUID}}'); +const plan = await salable.plans.getCurrencies('plan_1'); ``` ## Parameters -##### planId (_required_) +##### planUuid (_required_) _Type:_ `string` @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Currencies from ## Return Type -For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCurrencies) +For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCurrencies) diff --git a/docs/docs/plans/get-features.md b/docs/docs/plans/get-features.md index 920182f6..14820372 100644 --- a/docs/docs/plans/get-features.md +++ b/docs/docs/plans/get-features.md @@ -11,14 +11,14 @@ Returns a list of all the Features associated with a Plan ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -const plan = await salable.plans.getFeatures('{{PLAN_UUID}}'); +const plan = await salable.plans.getFeatures('plan_1'); ``` ## Parameters -##### planId (_required_) +##### planUuid (_required_) _Type:_ `string` @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Features from ## Return Type -For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api#tag/Plans/operation/getPlanFeatures) +For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanFeatures) diff --git a/docs/docs/plans/get-one.md b/docs/docs/plans/get-one.md index c8f8a5c6..a6be91c6 100644 --- a/docs/docs/plans/get-one.md +++ b/docs/docs/plans/get-one.md @@ -11,19 +11,30 @@ Returns the details of a single plan. ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -const plan = await salable.plans.getOne('{{PLAN_UUID}}'); +const plan = await salable.plans.getOne('plan_1', { expand: ['product'] }); ``` ## Parameters -##### planId (_required_) +#### planUuid (_required_) _Type:_ `string` The `uuid` of the Plan to be returned +--- + +#### options + +_Type:_ `{ expand: string[] }` + +| Option | Type | Description | Required | +| ------ | ------ | ------------------------------------------------------------------ | -------- | +| expand | string | Specify which properties to expand. e.g. `{ expand: ['product'] }` | ❌ | + + ## Return Type -For more information about this request see our API documentation on [plan object](https://docs.salable.app/api#tag/Plans/operation/getPlanByUuid) +For more information about this request see our API documentation on [plan object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanByUuid) diff --git a/docs/docs/pricing-tables/_category_.json b/docs/docs/pricing-tables/_category_.json index dcb0407b..95a951e7 100644 --- a/docs/docs/pricing-tables/_category_.json +++ b/docs/docs/pricing-tables/_category_.json @@ -3,6 +3,6 @@ "position": 7, "link": { "type": "generated-index", - "description": " " + "description": "Contains methods for the Pricing Tables resource" } } diff --git a/docs/docs/pricing-tables/get-one.md b/docs/docs/pricing-tables/get-one.md index fb8b3a2a..e77e0e6b 100644 --- a/docs/docs/pricing-tables/get-one.md +++ b/docs/docs/pricing-tables/get-one.md @@ -13,88 +13,13 @@ Returns all necessary data on a display a pricing table. ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); - -const pricingTable = await salable.pricingTables.getOne('{{PRICING_TABLE_UUID}}', { - globalPlanOptions: { - granteeId: 'userId_1', - member: 'orgId_1', - cancelUrl: 'https://example.com/cancel', - successUrl: 'https://example.com/success', - }, -}); -``` - -#### Individual plans - -```typescript -import { Salable } from '@salable/node-sdk'; - -const salable = new Salable('{{API_KEY}}'); - -const pricingTable = await salable.pricingTables.getOne('{{PRICING_TABLE_UUID}}', { - globalPlanOptions: { - granteeId: 'userId_1', - member: 'orgId_1', - cancelUrl: 'https://example.com/cancel', - successUrl: 'https://example.com/success', - }, - individualPlanOptions: { - '{{PLAN_UUID}}': { - granteeId: 'userId_2', - cancelUrl: 'https://example.com/cancel2', - successUrl: 'https://example.com/success2', - }, - }, -}); -``` - -#### Customer details - -```typescript -import { Salable } from '@salable/node-sdk'; - -const salable = new Salable('{{API_KEY}}'); - -const pricingTable = await salable.pricingTables.getOne('{{PRICING_TABLE_UUID}}', { - globalPlanOptions: { - granteeId: 'userId_1', - member: 'orgId_1', - cancelUrl: 'https://example.com/cancel', - successUrl: 'https://example.com/success', - customer: { - email: 'person@company.com', - }, - }, -}); -``` - -#### VAT (Paddle only) - -```typescript -import { Salable } from '@salable/node-sdk'; +const salable = new Salable('{{API_KEY}}', 'v2'); -const salable = new Salable('{{API_KEY}}'); - -const pricingTable = await salable.pricingTables.getOne('{{PRICING_TABLE_UUID}}', { - globalPlanOptions: { - granteeId: 'userId_1', - member: 'orgId_1', - cancelUrl: 'https://example.com/cancel', - successUrl: 'https://example.com/success', - vat: { - number: 'GB123456789', - companyName: 'Company', - street: '1 Street Name', - city: 'City', - state: 'State', - country: 'GB', - postcode: 'NR1 1RN', - }, - }, +const pricingTable = await salable.pricingTables.getOne('pricing_table_1', { + granteeId: 'grantee_1', + currency: 'USD' }); ``` - ## Parameters ##### pricingTableUuid (_required_) @@ -105,59 +30,16 @@ The `uuid` of the Pricing Table to build --- -##### queryParams (_required_) - -_Type:_ `PricingTableParameters` - -Below is the list of properties than can be used in the `queryParams` argument. - -**globalPlanOptions** -The `globalPlanOptions` are default parameters that apply to all plans listed in the pricing table. These settings apply to each plan unless overridden by `individualPlanOptions`. - -| **Parameter** | **Description** | **Required** | -| :--------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | -| successUrl | The URL to send users if they have successfully completed a purchase | ✅ | -| cancelUrl | The URL to send users to if the transaction fails. | ✅ | -| member | The purchaser of the license | ✅ | -| granteeId | Value to use as granteeId on Plan | ✅ | -| marketingConsent | Opt user in to marketing | ❌ | -| couponCode | Coupon code to be used in checkout | ❌ | -| promoCode | If your service offers promotional codes, use the `promoCode` parameter to automatically fill in these codes during checkout. Make sure these codes are already configured in your payment provider.
**Stripe**
Provide the Stripe Promotion Code ID to the `promoCode` parameter, you can find this in your Stripe dashboard. For guidance on creating a promotion code in Stripe, consult their [documentation](https://stripe.com/docs/billing/subscriptions/coupons). Make sure to use the ID and not the promo code itself.
_Note_: If a promo code is applied this way, customers will not have the ability to modify it in the checkout. If you would prefer to give customers the option to enter a promo code themselves, you can use the `allowPromoCode` parameter instead.
**Paddle**
Pass the coupon code that you have created in the Paddle dashboard directly into the `promoCode` parameter. Users can modify this manually in the checkout later. | ❌ | -| allowPromoCode | The `allowPromoCode` parameter controls the visibility and functionality of the Promotion Code field in your checkout process.
**Stripe**
In Stripe, you can use either `allowPromoCode` or `promoCode`, but not both simultaneously. Setting `allowPromoCode` to true displays the promo code field, allowing customers to enter a code.
_Note_: If you would prefer to use a pre-filled specific promo code, use the `promoCode` parameter with the Promotion Code ID from your Stripe dashboard. Remember, using `promoCode` in Stripe means customers cannot modify the code during checkout.
**Paddle**
By default, this is set to true. Setting `allowPromoCode` to false will hide the promo code field in the checkout. If you're using the `promoCode` parameter to pre-fill a code, the user can still modify it during checkout. | ❌ | -| currency | Shortname of the currency to be used in the checkout. The currency must be added to the plan's product in Salable. If not specified, it defaults to the currency selected on the product. | ❌ | -| customer.email | Pre fills email for checkout customer | ❌ | - -See [code example](#customer-details) with customer details - -##### Paddle specific parameters - -| Parameter | Description | Required | -| :---------------- | :--------------------------------------------------------------------------------------- | :------: | -| vat.number | Prefill the checkout form with the customer's VAT number | ❌ | -| vat.companyName | Prefill the checkout form with the customer's Company Name for VAT | ❌ | -| vat.street | Prefill the checkout form with the customer's Street for VAT | ❌ | -| vat.city | Prefill the checkout form with the customer's city for VAT | ❌ | -| vat.state | Prefill the checkout form with the customer's state for VAT | ❌ | -| vat.country | Prefill the checkout form with the customer's country for VAT. ISO country codes format. | ❌ | -| vat.postcode | Prefill the checkout form with the customer's postcode for VAT | ❌ | -| customer.country | Pre fills country for checkout customer | ❌ | -| customer.postcode | Pre fills postcode for checkout customer | ❌ | -| customMessage | Add a message to show in Paddle checkout | ❌ | - -See [code example](#vat-paddle-only) with VAT parameters - -**individualPlanOptions** +#### options -You can use `individualPlanOptions` to override `globalPlanOptions` for any plan. To do this, assign an override object to `individualPlanOptions` using the `planUuid` as the key. Note that the override capability is limited to specific parameters: `successUrl`, `cancelUrl`, and `granteeId`. +_Type:_ `{ granteeId: String, currency: String }` -| **Parameter** | **Description** | **Required** | -| :------------ | :------------------------------------------------------------------- | :----------: | -| successUrl | The URL to send users if they have successfully completed a purchase | ❌ | -| cancelUrl | The URL to send users to if the transaction fails. | ❌ | -| granteeId | Value to use as granteeId on Plan | ❌ | +| Option | Type | Description | Required | +| --------- | ------ | ------------------------------------------------------------------------------------------------------------------ | -------- | +| granteeId | string | The unique identifier for the grantee | ❌ | +| currency | string | Uses the currency short name e.g. USD, defaults to the default currency on the Product which the Plan is linked to | ❌ | -See [code example](#individual-plans) for individual plans ## Return Type -For more information about this request see our API documentation on [Pricing Table](https://docs.salable.app/api#tag/Pricing-Tables/operation/getPricingTableByUuid) +For more information about this request see our API documentation on [Pricing Table](https://docs.salable.app/api/v2#tag/Pricing-Tables/operation/getPricingTableByUuid) diff --git a/docs/docs/products/get-all.md b/docs/docs/products/get-all.md index a2f62cf0..e171fe52 100644 --- a/docs/docs/products/get-all.md +++ b/docs/docs/products/get-all.md @@ -2,7 +2,7 @@ sidebar_position: 2 --- -# Get All +# Get All Products Returns a list of all the products created by your Salable organization @@ -18,4 +18,4 @@ const products = await salable.products.getAll(); ## Return Type -For more information about this request see our API documentation on [Product Object](https://docs.salable.app/api#tag/Products/operation/getProductByUuid) +For more information about this request see our API documentation on [Product Object](https://docs.salable.app/api/v2#tag/Products/operation/getProducts) diff --git a/docs/docs/products/get-capabilities.md b/docs/docs/products/get-capabilities.md index 669c5cc2..9da43300 100644 --- a/docs/docs/products/get-capabilities.md +++ b/docs/docs/products/get-capabilities.md @@ -13,9 +13,17 @@ import { Salable } from '@salable/node-sdk'; const salable = new Salable('{{API_KEY}}'); -const currencies = await salable.products.getCapabilities(); +const currencies = await salable.products.getCapabilities('product_1'); ``` +## Parameters + +#### productUuid (_required_) + +_Type:_ `string` + +The UUID of the Product + ## Return Type -For more information about this request see our API documentation on [Capability Object](https://docs.salable.app/api#tag/Products/operation/getProductCapabilities) +For more information about this request see our API documentation on [Product Capability Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductCapabilities) diff --git a/docs/docs/products/get-currencies.md b/docs/docs/products/get-currencies.md index 588e09d2..223782c9 100644 --- a/docs/docs/products/get-currencies.md +++ b/docs/docs/products/get-currencies.md @@ -2,7 +2,7 @@ sidebar_position: 6 --- -# Get Currencies +# Get Currencies for a product Returns a list of all the currencies associated with a product @@ -13,9 +13,17 @@ import { Salable } from '@salable/node-sdk'; const salable = new Salable('{{API_KEY}}'); -const currencies = await salable.products.getCurrencies(); +const currencies = await salable.products.getCurrencies('product_1'); ``` +## Parameters + +#### productUuid (_required_) + +_Type:_ `string` + +The UUID of the Product + ## Return Type -For more information about this request see our API documentation on [Product Currency Object](https://docs.salable.app/api#tag/Products/operation/getProductCurrencies) +For more information about this request see our API documentation on [Product Currency Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductCurrencies) diff --git a/docs/docs/products/get-features.md b/docs/docs/products/get-features.md index ac40368e..e08f6938 100644 --- a/docs/docs/products/get-features.md +++ b/docs/docs/products/get-features.md @@ -2,7 +2,7 @@ sidebar_position: 5 --- -# Get Features +# Get Features for a product Returns a list of all the features associated with a product @@ -13,9 +13,17 @@ import { Salable } from '@salable/node-sdk'; const salable = new Salable('{{API_KEY}}'); -const features = await salable.products.getFeatures(); +const features = await salable.products.getFeatures('product_1'); ``` +## Parameters + +#### productUuid (_required_) + +_Type:_ `string` + +The UUID of the Product + ## Return Type -For more information about this request see our API documentation on [Feature Object](https://docs.salable.app/api#tag/Products/operation/getProductFeatures) +For more information about this request see our API documentation on [Product Feature Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductFeatures) diff --git a/docs/docs/products/get-one.md b/docs/docs/products/get-one.md index 84cfd0ec..b9c5cbba 100644 --- a/docs/docs/products/get-one.md +++ b/docs/docs/products/get-one.md @@ -11,19 +11,29 @@ Returns the details of a single product. ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -const product = await salable.products.getOne('{{PRODUCT_UUID}}'); +const product = await salable.products.getOne('product_1'); ``` ## Parameters -##### productUuid (_required_) +#### productUuid (_required_) _Type:_ `string` -The `uuid` of the Product to be returned +The UUID of the Product to be returned + +--- + +#### options + +_Type:_ `GetProductOptions` + +| Option | Type | Description | Required | +| ------ | -------- | ---------------------------------------------------------------------------- | -------- | +| expand | string[] | Specify which properties to expand. e.g. `{ expand: ['features', 'plans'] }` | ❌ | ## Return Type -For more information about this request see our API documentation on [product object](https://docs.salable.app/api#tag/Products/operation/getProductByUuid) +For more information about this request see our API documentation on [Product Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductByUuid) diff --git a/docs/docs/products/get-plans.md b/docs/docs/products/get-plans.md index df3016af..87ef94a1 100644 --- a/docs/docs/products/get-plans.md +++ b/docs/docs/products/get-plans.md @@ -2,7 +2,7 @@ sidebar_position: 4 --- -# Get Plans +# Get Plans for a Product Returns a list of all the plans associated with a product @@ -13,9 +13,17 @@ import { Salable } from '@salable/node-sdk'; const salable = new Salable('{{API_KEY}}'); -const plans = await salable.products.getPlans(); +const plans = await salable.products.getPlans('product_1'); ``` +## Parameters + +#### productUuid (_required_) + +_Type:_ `string` + +The UUID of the Product + ## Return Type -For more information about this request see our API documentation on [Plan Object](https://docs.salable.app/api#tag/Plans/operation/getPlanByUuid) +For more information about this request see our API documentation on [Plan Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductPlans) diff --git a/docs/docs/products/get-pricing-table.md b/docs/docs/products/get-pricing-table.md index f749e977..7b3619c7 100644 --- a/docs/docs/products/get-pricing-table.md +++ b/docs/docs/products/get-pricing-table.md @@ -4,7 +4,7 @@ sidebar_position: 3 # Get Pricing Table for a Product -Returns all necessary data on a Product to be able to display a pricing table. Every active plan on the product will be added to the table in the sort order of free plans, paid plans price and then coming soon plans. +Returns all necessary data on a Product to be able to display a pricing table. Every active plan on the product will be added to the table in the sort order of free plans, paid plans price, and then coming soon plans. ## Code Sample @@ -15,83 +15,8 @@ import { Salable } from '@salable/node-sdk'; const salable = new Salable('{{API_KEY}}'); -const pricingTable = await salable.product.getPricingTable('{{PRODUCT_UUID}}', { - globalPlanOptions: { - granteeId: 'userId_1', - member: 'orgId_1', - cancelUrl: 'https://example.com/cancel', - successUrl: 'https://example.com/success', - }, -}); -``` - -#### Individual plans - -```typescript -import { Salable } from '@salable/node-sdk'; - -const salable = new Salable('{{API_KEY}}'); - -const pricingTable = await salable.product.getPricingTable('{{PRODUCT_UUID}}', { - globalPlanOptions: { - granteeId: 'userId_1', - member: 'orgId_1', - cancelUrl: 'https://example.com/cancel', - successUrl: 'https://example.com/success', - }, - individualPlanOptions: { - '{{PLAN_UUID}}': { - granteeId: 'userId_2', - cancelUrl: 'https://example.com/cancel2', - successUrl: 'https://example.com/success2', - }, - }, -}); -``` - -#### Customer details - -```typescript -import { Salable } from '@salable/node-sdk'; - -const salable = new Salable('{{API_KEY}}'); - -const pricingTable = await salable.product.getPricingTable('{{PRODUCT_UUID}}', { - globalPlanOptions: { - granteeId: 'userId_1', - member: 'orgId_1', - cancelUrl: 'https://example.com/cancel', - successUrl: 'https://example.com/success', - customer: { - email: 'person@company.com', - }, - }, -}); -``` - -#### VAT (Paddle only) - -```typescript -import { Salable } from '@salable/node-sdk'; - -const salable = new Salable('{{API_KEY}}'); - -const pricingTable = await salable.product.getPricingTable('{{PRODUCT_UUID}}', { - globalPlanOptions: { - granteeId: 'userId_1', - member: 'orgId_1', - cancelUrl: 'https://example.com/cancel', - successUrl: 'https://example.com/success', - vat: { - number: 'GB123456789', - companyName: 'Company', - street: '1 Street Name', - city: 'City', - state: 'State', - country: 'GB', - postcode: 'NR1 1RN', - }, - }, +const pricingTable = await salable.products.getPricingTable('product_1', { + granteeId: 'granteeid@email.com', }); ``` @@ -101,7 +26,7 @@ const pricingTable = await salable.product.getPricingTable('{{PRODUCT_UUID}}', { _Type:_ `string` -The `uuid` of the Product to build the pricing table for +The UUID of the Product to build the pricing table for --- @@ -111,53 +36,11 @@ _Type:_ `PricingTableParameters` Below is the list of properties than can be used in the `queryParams` argument. -**globalPlanOptions** -The `globalPlanOptions` are default parameters that apply to all plans listed in the pricing table. These settings apply to each plan unless overridden by `individualPlanOptions`. - -| **Parameter** | **Description** | **Required** | -| :--------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------: | -| successUrl | The URL to send users if they have successfully completed a purchase | ✅ | -| cancelUrl | The URL to send users to if the transaction fails. | ✅ | -| member | The purchaser of the license | ✅ | -| granteeId | Value to use as granteeId on Plan | ✅ | -| marketingConsent | Opt user in to marketing | ❌ | -| couponCode | Coupon code to be used in checkout | ❌ | -| promoCode | If your service offers promotional codes, use the `promoCode` parameter to automatically fill in these codes during checkout. Make sure these codes are already configured in your payment provider.
**Stripe**
Provide the Stripe Promotion Code ID to the `promoCode` parameter, you can find this in your Stripe dashboard. For guidance on creating a promotion code in Stripe, consult their [documentation](https://stripe.com/docs/billing/subscriptions/coupons). Make sure to use the ID and not the promo code itself.
_Note_: If a promo code is applied this way, customers will not have the ability to modify it in the checkout. If you would prefer to give customers the option to enter a promo code themselves, you can use the `allowPromoCode` parameter instead.
**Paddle**
Pass the coupon code that you have created in the Paddle dashboard directly into the `promoCode` parameter. Users can modify this manually in the checkout later. | ❌ | -| allowPromoCode | The `allowPromoCode` parameter controls the visibility and functionality of the Promotion Code field in your checkout process.
**Stripe**
In Stripe, you can use either `allowPromoCode` or `promoCode`, but not both simultaneously. Setting `allowPromoCode` to true displays the promo code field, allowing customers to enter a code.
_Note_: If you would prefer to use a pre-filled specific promo code, use the `promoCode` parameter with the Promotion Code ID from your Stripe dashboard. Remember, using `promoCode` in Stripe means customers cannot modify the code during checkout.
**Paddle**
By default, this is set to true. Setting `allowPromoCode` to false will hide the promo code field in the checkout. If you're using the `promoCode` parameter to pre-fill a code, the user can still modify it during checkout. | ❌ | -| currency | Shortname of the currency to be used in the checkout. The currency must be added to the plan's product in Salable. If not specified, it defaults to the currency selected on the product. | ❌ | -| customer.email | Pre fills email for checkout customer | ❌ | - -See [code example](#customer-details) with customer details - -##### Paddle specific parameters - -| Parameter | Description | Required | -| :---------------- | :--------------------------------------------------------------------------------------- | :------: | -| vat.number | Prefill the checkout form with the customer's VAT number | ❌ | -| vat.companyName | Prefill the checkout form with the customer's Company Name for VAT | ❌ | -| vat.street | Prefill the checkout form with the customer's Street for VAT | ❌ | -| vat.city | Prefill the checkout form with the customer's city for VAT | ❌ | -| vat.state | Prefill the checkout form with the customer's state for VAT | ❌ | -| vat.country | Prefill the checkout form with the customer's country for VAT. ISO country codes format. | ❌ | -| vat.postcode | Prefill the checkout form with the customer's postcode for VAT | ❌ | -| customer.country | Pre fills country for checkout customer | ❌ | -| customer.postcode | Pre fills postcode for checkout customer | ❌ | -| customMessage | Add a message to show in Paddle checkout | ❌ | - -See [code example](#vat-paddle-only) with VAT parameters - -**individualPlanOptions** - -You can use `individualPlanOptions` to override `globalPlanOptions` for any plan. To do this, assign an override object to `individualPlanOptions` using the `planUuid` as the key. Note that the override capability is limited to specific parameters: `successUrl`, `cancelUrl`, and `granteeId`. - -| **Parameter** | **Description** | **Required** | -| :------------ | :------------------------------------------------------------------- | :----------: | -| successUrl | The URL to send users if they have successfully completed a purchase | ❌ | -| cancelUrl | The URL to send users to if the transaction fails. | ❌ | -| granteeId | Value to use as granteeId on Plan | ❌ | - -See [code example](#individual-plans) for individual plans +| Parameter | Description | Required | +| --------- | ----------------------------------------------------------------------------------------------------------------- | -------- | +| granteeId | The unique identifier for the grantee | ✅ | +| currency | Uses the currency short name e.g USD, defaults to the default currency on the product which the plan is linked to | ❌ | ## Return Type -For more information about this request see our API documentation on [Product Pricing Table](https://docs.salable.app/api#tag/Products/operation/getProductPricingTable) +For more information about this request see our API documentation on [Product Pricing Table Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductPricingTable) diff --git a/docs/docs/subscriptions/add-seats.md b/docs/docs/subscriptions/add-seats.md index 3350e68c..e9970ae0 100644 --- a/docs/docs/subscriptions/add-seats.md +++ b/docs/docs/subscriptions/add-seats.md @@ -1,8 +1,8 @@ --- -sidebar_position: 4 +sidebar_position: 12 --- -# Add Subscription Seats +# Increment Subscription Seats Adds seats to a Subscription. Initially the seats will be unassigned. To assign granteeIds to the seats use the [update many](../licenses/update-many.md) method. @@ -11,23 +11,28 @@ Adds seats to a Subscription. Initially the seats will be unassigned. To assign ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -await salable.subscriptions.addSeats('{{SUBSCRIPTION_UUID}}', { increment: 2 }); +await salable.subscriptions.addSeats('subscription_1', { increment: 2 }); ``` ## Parameters -##### subscriptionId (_required_) +#### subscriptionUuid (_required_) _Type:_ `string` -The `uuid` of the Subscription where the seats will be added +The UUID of the Subscription -##### config (_required_) +#### Options (_required_) -_Type:_ `ISubscriptionAddSeatsParams` +_Type:_ `{ increment: number, proration: string }` -| Option | Description | -| --------- | --------------------------------- | -| increment | The number of seats to be created | +| Option | Type | Description | Required | +| --------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | +| increment | number | The number of seats to be created | ✅ | +| proration | string | `create_prorations`: Will cause proration invoice items to be created when applicable (default). `none`: Disable creating prorations in this request. `always_invoice`: Always invoice immediately for prorations. | ❌ | + +## Return Type + +For more information about this request see our API documentation on [Subscription Seat Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/incrementSubscriptionSeats) diff --git a/docs/docs/subscriptions/cancel.md b/docs/docs/subscriptions/cancel.md index 796fd89d..9cfd973b 100644 --- a/docs/docs/subscriptions/cancel.md +++ b/docs/docs/subscriptions/cancel.md @@ -11,28 +11,27 @@ Cancels a Subscription with options for when it terminates. ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -await salable.subscriptions.cancel('{{SUBSCRIPTION_UUID}}', 'end'); +await salable.subscriptions.cancel('subscription_1', { when: 'end' }); ``` ## Parameters -##### subscriptionId (_required_) +#### subscriptionUuid (_required_) _Type:_ `string` -The `uuid` of the Subscription to be canceled +The UUID of the Subscription to be canceled -##### when (_required_) +##### options (_required_) -_Type:_ `end` | `now` +_Type:_ `CancelSubscriptionOptions` -| When | Description | -| ---- | ---------------------------------------------------------- | -| now | Immediately cancels the Subscription | -| end | Cancels the Subscription at the end of it's billing period | +| Option | Type | Description | Required | +| ------ | ---- | -------------------------------------------------------------------------------------------------------------- | -------- | +| when | enum | `now`: Immediately cancels the Subscription. `end`: Cancels the Subscription at the end of it's billing period | ✅ | ## Return Type -Return void +Returns void diff --git a/docs/docs/subscriptions/change-plan.md b/docs/docs/subscriptions/change-plan.md index 099b4f83..0c26ce0f 100644 --- a/docs/docs/subscriptions/change-plan.md +++ b/docs/docs/subscriptions/change-plan.md @@ -1,5 +1,5 @@ --- -sidebar_position: 2 +sidebar_position: 3 --- # Change a Subscription's Plan @@ -11,10 +11,10 @@ Move a Subscription to a new Plan. Proration behaviour can optionally be set. ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -const changeSubscriptionPlan = await salable.subscriptions.changePlan('{{SUBSCRIPTION_UUID}}', { - planUuid: '{{PLAN_UUID}}', +const changeSubscriptionPlan = await salable.subscriptions.changePlan('subscription_1', { + planUuid: 'plan_1', }); ``` @@ -24,17 +24,17 @@ const changeSubscriptionPlan = await salable.subscriptions.changePlan('{{SUBSCRI _Type:_ `string` -The `uuid` of the Subscription that is being moved +The UUID of the Subscription that is being moved -##### config (_required_) +##### options (_required_) -_Type:_ `SubscriptionsChangePlanBody` +_Type:_ `SubscriptionsChangePlanOptions` -| **Parameter** | **Description** | **Notes** | **Required** | -| :-----------: | :--------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------: | -| planUuid | The `uuid` of the Plan the Subscription is moving to | | ✅ | -| proration | Proration behaviour | `create_prorations`: Will cause proration invoice items to be created when applicable (default). `none`: Disable creating prorations in this request. `always_invoice`: Always invoice immediately for prorations. | ❌ | +| Option | Type | Description | Required | +| --------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | +| planUuid | string | The status of the subscription, e.g. "ACTIVE" "CANCELED" | ✅ | +| proration | string | `create_prorations`: Will cause proration invoice items to be created when applicable (default). `none`: Disable creating prorations in this request. `always_invoice`: Always invoice immediately for prorations. | ❌ | ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/changeSubscriptionsPlan) diff --git a/docs/docs/subscriptions/get-all.md b/docs/docs/subscriptions/get-all.md new file mode 100644 index 00000000..46e926be --- /dev/null +++ b/docs/docs/subscriptions/get-all.md @@ -0,0 +1,35 @@ +--- +sidebar_position: 1 +--- + +# Get All Subscriptions + +Returns a list of all the subscriptions created by your Salable organization. + +## Code Sample + +```typescript +import { Salable } from '@salable/node-sdk'; + +const salable = new Salable('{{API_KEY}}', 'v2'); + +const subscription = await salable.subscriptions.getAll(); +``` + +## Parameters + +#### options + +_Type:_ `GetSubscriptionOptions` + +| Option | Type | Description | Required | +| ------ | -------- | ------------------------------------------------------------------------- | -------- | +| status | string | The status of the subscription, e.g. "ACTIVE" "CANCELED" | ❌ | +| email | string | The email of who purchased the subscription | ❌ | +| cursor | string | Cursor value, used for pagination | ❌ | +| take | string | The amount of subscriptions to fetch. Default: `20` | ❌ | +| expand | string[] | Specify which properties to expand. e.g `{ expand: ['product', 'plan'] }` | ❌ | + +## Return Type + +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptions) diff --git a/docs/docs/subscriptions/get-cancel-subscription-link.md b/docs/docs/subscriptions/get-cancel-subscription-link.md new file mode 100644 index 00000000..198a083b --- /dev/null +++ b/docs/docs/subscriptions/get-cancel-subscription-link.md @@ -0,0 +1,29 @@ +--- +sidebar_position: 9 +--- + +# Get Cancel Subscription Link + +Returns a link to cancel a specific subscription. + +## Code Sample + +```typescript +import { Salable } from '@salable/node-sdk'; + +const salable = new Salable('{{API_KEY}}', 'v2'); + +const subscription = await salable.subscriptions.getCancelSubscriptionLink('subscription_1'); +``` + +## Parameters + +#### subscriptionUuid (_required_) + +_Type:_ `string` + +The UUID of the subscription + +## Return Type + +For more information about this request see our API documentation on [Cancel Subscription Link Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionCancelLink) diff --git a/docs/docs/subscriptions/get-customer-portal-link.md b/docs/docs/subscriptions/get-customer-portal-link.md new file mode 100644 index 00000000..7068385f --- /dev/null +++ b/docs/docs/subscriptions/get-customer-portal-link.md @@ -0,0 +1,29 @@ +--- +sidebar_position: 8 +--- + +# Get a Customer Portal Link for a Subscription + +Returns the customer portal link for a subscription. + +## Code Sample + +```typescript +import { Salable } from '@salable/node-sdk'; + +const salable = new Salable('{{API_KEY}}', 'v2'); + +const subscription = await salable.subscriptions.getOne('subscription_1'); +``` + +## Parameters + +#### subscriptionUuid (_required_) + +_Type:_ `string` + +The UUID of the subscription to be returned + +## Return Type + +For more information about this request see our API documentation on [Subscription Portal Link Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionCustomerPortalLink) diff --git a/docs/docs/subscriptions/get-invoices.md b/docs/docs/subscriptions/get-invoices.md new file mode 100644 index 00000000..9ceea654 --- /dev/null +++ b/docs/docs/subscriptions/get-invoices.md @@ -0,0 +1,29 @@ +--- +sidebar_position: 4 +--- + +# Get Subscription Invoices + +Returns a list of invoices for a subscription. + +## Code Sample + +```typescript +import { Salable } from '@salable/node-sdk'; + +const salable = new Salable('{{API_KEY}}', 'v2'); + +const subscription = await salable.subscriptions.getInvoices('subscription_1'); +``` + +## Parameters + +#### subscriptionUuid (_required_) + +_Type:_ `string` + +The UUID of the subscription + +## Return Type + +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionInvoices) diff --git a/docs/docs/subscriptions/get-one.md b/docs/docs/subscriptions/get-one.md index 7dfadcd9..aa978177 100644 --- a/docs/docs/subscriptions/get-one.md +++ b/docs/docs/subscriptions/get-one.md @@ -1,5 +1,5 @@ --- -sidebar_position: 1 +sidebar_position: 2 --- # Get One Subscription @@ -11,19 +11,29 @@ Returns the details of a single subscription. ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -const subscription = await salable.subscriptions.getOne('{{SUBSCRIPTION_UUID}}'); +const subscription = await salable.subscriptions.getOne('subscription_1'); ``` ## Parameters -##### subscriptionId (_required_) +#### subscriptionUuid (_required_) _Type:_ `string` -The `uuid` of the Subscription to be returned +The UUID of the subscription to be returned + +--- + +#### options + +_Type:_ `GetSubscriptionOptions` + +| Option | Type | Description | Required | +| ------ | -------- | ---------------------------------------------------------------- | -------- | +| expand | string[] | Specify which properties to expand. e.g. `{ expand: 'product' }` | ❌ | ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/docs/subscriptions/get-payment-link.md b/docs/docs/subscriptions/get-payment-link.md new file mode 100644 index 00000000..2952628b --- /dev/null +++ b/docs/docs/subscriptions/get-payment-link.md @@ -0,0 +1,29 @@ +--- +sidebar_position: 7 +--- + +# Get a Subscription Update Payment Link + +Returns the update payment link for a specific subscription. + +## Code Sample + +```typescript +import { Salable } from '@salable/node-sdk'; + +const salable = new Salable('{{API_KEY}}', 'v2'); + +const subscription = await salable.subscriptions.getPortalLink('subscription_1'); +``` + +## Parameters + +#### subscriptionUuid (_required_) + +_Type:_ `string` + +The UUID of the subscription + +## Return Type + +For more information about this request see our API documentation on [Subscription Payment Link Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionUpdatePaymentLink) diff --git a/docs/docs/subscriptions/get-payment-method.md b/docs/docs/subscriptions/get-payment-method.md new file mode 100644 index 00000000..7f5e9899 --- /dev/null +++ b/docs/docs/subscriptions/get-payment-method.md @@ -0,0 +1,29 @@ +--- +sidebar_position: 10 +--- + +# Get a Subscription Payment Method + +Returns the payment method used to pay for a subscription. + +## Code Sample + +```typescript +import { Salable } from '@salable/node-sdk'; + +const salable = new Salable('{{API_KEY}}', 'v2'); + +const subscription = await salable.subscriptions.getPaymentMethod('subscription_1'); +``` + +## Parameters + +#### subscriptionUuid (_required_) + +_Type:_ `string` + +The UUID of the subscription + +## Return Type + +For more information about this request see our API documentation on [Subscription Payment Method Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionPaymentMethod) diff --git a/docs/docs/subscriptions/get-user-plans.md b/docs/docs/subscriptions/get-user-plans.md new file mode 100644 index 00000000..45982883 --- /dev/null +++ b/docs/docs/subscriptions/get-user-plans.md @@ -0,0 +1,29 @@ +--- +sidebar_position: 5 +--- + +# Get Switchable Plans for a Subscribed User + +Returns the details of a single subscription. + +## Code Sample + +```typescript +import { Salable } from '@salable/node-sdk'; + +const salable = new Salable('{{API_KEY}}', 'v2'); + +const subscription = await salable.subscriptions.getSwitchablePlans('subscription_1'); +``` + +## Parameters + +#### subscriptionUuid (_required_) + +_Type:_ `string` + +The UUID of the subscription + +## Return Type + +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionUpdatablePlans) diff --git a/docs/docs/subscriptions/reactivate.md b/docs/docs/subscriptions/reactivate.md new file mode 100644 index 00000000..963b5859 --- /dev/null +++ b/docs/docs/subscriptions/reactivate.md @@ -0,0 +1,29 @@ +--- +sidebar_position: 11 +--- + +# Reactivate a Subscription + +This method reactivates a subscription scheduled for cancellation before the billing period has passed. + +## Code Sample + +```typescript +import { Salable } from '@salable/node-sdk'; + +const salable = new Salable('{{API_KEY}}', 'v2'); + +const subscription = await salable.subscriptions.reactivateSubscription('subscription_1'); +``` + +## Parameters + +#### subscriptionUuid (_required_) + +_Type:_ `string` + +The UUID of the subscription to be returned + +## Return Type + +Returns void diff --git a/docs/docs/subscriptions/remove-seats.md b/docs/docs/subscriptions/remove-seats.md index 0749672c..e7ef5ba1 100644 --- a/docs/docs/subscriptions/remove-seats.md +++ b/docs/docs/subscriptions/remove-seats.md @@ -1,5 +1,5 @@ --- -sidebar_position: 5 +sidebar_position: 13 --- # Remove Subscription Seats @@ -11,23 +11,28 @@ Remove seats from a Subscription. Seats can only be removed if they are unassign ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -await salable.subscriptions.removeSeats('{{SUBSCRIPTION_UUID}}', { decrement: 2 }); +await salable.subscriptions.removeSeats('subscription_1', { decrement: 1 }); ``` ## Parameters -##### subscriptionId (_required_) +#### subscriptionUuid (_required_) _Type:_ `string` -The `uuid` of the Subscription the seats will be removed from +The UUID of the Subscription -##### config (_required_) +#### Options (_required_) -_Type:_ `ISubscriptionRemoveSeatsParams` +_Type:_ `RemoveSubscriptionSeatsOption` -| Option | Description | -| --------- | --------------------------------- | -| decrement | The number of seats to be removed | +| Option | Type | Description | Required | +| --------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | +| decrement | number | The number of seats to be created | ✅ | +| proration | string | `create_prorations`: Will cause proration invoice items to be created when applicable (default). `none`: Disable creating prorations in this request. `always_invoice`: Always invoice immediately for prorations. | ❌ | + +## Return Type + +For more information about this request see our API documentation on [Subscription Seat Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/decrementSubscriptionSeats) diff --git a/docs/docs/subscriptions/update-plan.md b/docs/docs/subscriptions/update-plan.md deleted file mode 100644 index d96102bc..00000000 --- a/docs/docs/subscriptions/update-plan.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Update a Subscription's Plan (DEPRECATED) - -This method is deprecated. Please use the [Change Plan](./change-plan.md) method. - -Update the subscription to a new plan. - -## Code Sample - -```typescript -import { Salable } from '@salable/node-sdk'; - -const salable = new Salable('{{API_KEY}}'); - -const subscription = await salable.subscriptions.updatePlan( - '{{PLAN_UUID}}', - '{{SUBSCRIPTION_UUID}}' -); -``` - -## Parameters - -##### newPlanId (_required_) - -_Type:_ `string` - -The `uuid` of the new Plan the Subscription will be moved to - -##### subscriptionId (_required_) - -_Type:_ `string` - -The `uuid` of the Subscription that is being moved - -## Return Type - -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/docs/usage/get-record-for-plan.md b/docs/docs/usage/get-record-for-plan.md new file mode 100644 index 00000000..cb6416b4 --- /dev/null +++ b/docs/docs/usage/get-record-for-plan.md @@ -0,0 +1,35 @@ +--- +sidebar_position: 3 +--- + +# Get Current Usage Record for Grantee on Plan + +Returns the currency usage record for a metered license + +## Code Sample + +```typescript +import { Salable } from '@salable/node-sdk'; + +const salable = new Salable('{{API_KEY}}', 'v2'); + +const records = await salable.usage.getCurrentUsageRecord('grantee_1', 'plan_1'); +``` + +## Parameters + +#### granteeId (_required_) + +_Type:_ `string` + +The granteeId of the license + +#### planUuid (_required_) + +_Type:_ `string` + +The UUID of the plan the license belongs to + +## Return Type + +For more information about this request see our API documentation on [Usage Record Object](https://docs.salable.app/api/v2#tag/Usage/operation/getCurrentLicenseUsage) diff --git a/docs/docs/usage/get-records.md b/docs/docs/usage/get-records.md new file mode 100644 index 00000000..3b8516e5 --- /dev/null +++ b/docs/docs/usage/get-records.md @@ -0,0 +1,45 @@ +--- +sidebar_position: 1 +--- + +# Get All Usage Records for a Grantee + +Returns a list of all the usage records for grantee's metered licenses + +## Code Sample + +```typescript +import { Salable } from '@salable/node-sdk'; + +const salable = new Salable('{{API_KEY}}', 'v2'); + +const records = await salable.usage.getAllUsageRecords('grantee_1'); +``` + +## Parameters + +#### granteeId (_required_) + +_Type:_ `string` + +The granteeId of the license + +--- + +#### options + +_Type:_ `GetLicenseOptions` + +| Option | Type | Description | Required | +| ---------------- | ------ | ------------------------------------------------------------------------------------ | -------- | +| type | string | Filter by the type of usage record | ❌ | +| status | string | Filter by the status of the license | ❌ | +| planUuid | string | The UUID of the plan the license belongs to | ❌ | +| subscriptionUuid | string | Filters usage records by their license's subscription | ❌ | +| sort | string | Sorts usage records by createdAt field. Default (`'asc'`). Enum: `'asc'` \| `'desc'` | ❌ | +| cursor | string | Cursor value, used for pagination | ❌ | +| take | string | The amount of licenses to fetch | ❌ | + +## Return Type + +For more information about this request see our API documentation on [Usage Record Object](https://docs.salable.app/api/v2#tag/Usage/operation/getLicenseUsage) diff --git a/docs/docs/usage/update.md b/docs/docs/usage/update.md index b5e05867..50bcb40b 100644 --- a/docs/docs/usage/update.md +++ b/docs/docs/usage/update.md @@ -1,5 +1,5 @@ --- -sidebar_position: 1 +sidebar_position: 2 --- # Update Usage @@ -11,31 +11,37 @@ Increments usage count on a License ```typescript import { Salable } from '@salable/node-sdk'; -const salable = new Salable('{{API_KEY}}'); +const salable = new Salable('{{API_KEY}}', 'v2'); -await salable.usage.update('{{LICENSE_UUID}}', '{{FEATURE_VARIABLE_NAME}}', { - increment: 2, -}); +await salable.usage.updateLicenseUsage('grantee_1', 'plan_1', 1, 'idempotency_key_1'); ``` ## Parameters -##### licenseUuid (_required_) +#### granteeId (_required_) _Type:_ `string` -The `uuid` of the License to update the usage on +The granteeId of the license -##### featureVariableName (_required_) +#### planUuid (_required_) _Type:_ `string` -The variable name of the feature to be updated +The UUID of the plan the license belongs to -##### countOptions (_required_) +#### increment (_required_) -_Type:_ `ICountOptions` +_Type:_ `number` -| Option | Description | -| --------- | ------------------------------------ | -| increment | The number to increment the count by | +The value to increment the usage on the license + +#### idempotencyKey (_required_) + +_Type:_ `string` + +A unique key for idempotent requests + +## Return Type + +Returns void diff --git a/docs/versioned_docs/version-1.4.0/licenses/check-licenses.md b/docs/versioned_docs/version-1.4.0/licenses/check-licenses.md index 79465875..22d7ce2d 100644 --- a/docs/versioned_docs/version-1.4.0/licenses/check-licenses.md +++ b/docs/versioned_docs/version-1.4.0/licenses/check-licenses.md @@ -37,4 +37,4 @@ A String array of the grantee Ids you wish to check against ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) diff --git a/docs/versioned_docs/version-1.4.0/licenses/create-license.md b/docs/versioned_docs/version-1.4.0/licenses/create-license.md index 047a29c3..d396827f 100644 --- a/docs/versioned_docs/version-1.4.0/licenses/create-license.md +++ b/docs/versioned_docs/version-1.4.0/licenses/create-license.md @@ -47,4 +47,4 @@ The grantee ID for the license ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) diff --git a/docs/versioned_docs/version-1.4.0/licenses/get-licenses.md b/docs/versioned_docs/version-1.4.0/licenses/get-licenses.md index 20091e0f..bc72b87e 100644 --- a/docs/versioned_docs/version-1.4.0/licenses/get-licenses.md +++ b/docs/versioned_docs/version-1.4.0/licenses/get-licenses.md @@ -18,4 +18,4 @@ const licenses = await salable.licenses.getLicenses(); ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-1.4.0/subscriptions/get-subscription.md b/docs/versioned_docs/version-1.4.0/subscriptions/get-subscription.md index f9d403a9..89956564 100644 --- a/docs/versioned_docs/version-1.4.0/subscriptions/get-subscription.md +++ b/docs/versioned_docs/version-1.4.0/subscriptions/get-subscription.md @@ -28,4 +28,4 @@ The `uuid` of the Subscription to be returned ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-1.7.0/licenses/check-licenses.md b/docs/versioned_docs/version-1.7.0/licenses/check-licenses.md index 2c7f593b..c8906034 100644 --- a/docs/versioned_docs/version-1.7.0/licenses/check-licenses.md +++ b/docs/versioned_docs/version-1.7.0/licenses/check-licenses.md @@ -37,4 +37,4 @@ A String array of the grantee Ids you wish to check against ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) diff --git a/docs/versioned_docs/version-1.7.0/licenses/create-license.md b/docs/versioned_docs/version-1.7.0/licenses/create-license.md index 334bc00d..d5068e1b 100644 --- a/docs/versioned_docs/version-1.7.0/licenses/create-license.md +++ b/docs/versioned_docs/version-1.7.0/licenses/create-license.md @@ -46,4 +46,4 @@ The grantee ID for the license ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) diff --git a/docs/versioned_docs/version-1.7.0/licenses/get-licenses.md b/docs/versioned_docs/version-1.7.0/licenses/get-licenses.md index 88347e03..82b1c947 100644 --- a/docs/versioned_docs/version-1.7.0/licenses/get-licenses.md +++ b/docs/versioned_docs/version-1.7.0/licenses/get-licenses.md @@ -18,4 +18,4 @@ const licenses = await salable.licenses.getLicenses(); ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-1.7.0/subscriptions/change-plan.md b/docs/versioned_docs/version-1.7.0/subscriptions/change-plan.md index 2d658c77..a2d363f6 100644 --- a/docs/versioned_docs/version-1.7.0/subscriptions/change-plan.md +++ b/docs/versioned_docs/version-1.7.0/subscriptions/change-plan.md @@ -35,4 +35,4 @@ The `uuid` of the Subscription that is being moved ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-1.7.0/subscriptions/get-subscription.md b/docs/versioned_docs/version-1.7.0/subscriptions/get-subscription.md index 29bee77c..74951efe 100644 --- a/docs/versioned_docs/version-1.7.0/subscriptions/get-subscription.md +++ b/docs/versioned_docs/version-1.7.0/subscriptions/get-subscription.md @@ -28,4 +28,4 @@ The `uuid` of the Subscription to be returned ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.0.0/licenses/check.md b/docs/versioned_docs/version-2.0.0/licenses/check.md index 84ff3ac0..08cfc195 100644 --- a/docs/versioned_docs/version-2.0.0/licenses/check.md +++ b/docs/versioned_docs/version-2.0.0/licenses/check.md @@ -34,4 +34,4 @@ A String array of the grantee Ids you wish to check against ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) diff --git a/docs/versioned_docs/version-2.0.0/licenses/create.md b/docs/versioned_docs/version-2.0.0/licenses/create.md index 35edccef..23fca3ba 100644 --- a/docs/versioned_docs/version-2.0.0/licenses/create.md +++ b/docs/versioned_docs/version-2.0.0/licenses/create.md @@ -46,4 +46,4 @@ The grantee ID for the license ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) diff --git a/docs/versioned_docs/version-2.0.0/licenses/get-all.md b/docs/versioned_docs/version-2.0.0/licenses/get-all.md index 9518e1b3..cebdce75 100644 --- a/docs/versioned_docs/version-2.0.0/licenses/get-all.md +++ b/docs/versioned_docs/version-2.0.0/licenses/get-all.md @@ -18,4 +18,4 @@ const licenses = await salable.licenses.getAll(); ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.0.0/subscriptions/get-one.md b/docs/versioned_docs/version-2.0.0/subscriptions/get-one.md index 7dfadcd9..87ee8e98 100644 --- a/docs/versioned_docs/version-2.0.0/subscriptions/get-one.md +++ b/docs/versioned_docs/version-2.0.0/subscriptions/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Subscription to be returned ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.0.0/subscriptions/update-plan.md b/docs/versioned_docs/version-2.0.0/subscriptions/update-plan.md index 3fcf26f4..642060d5 100644 --- a/docs/versioned_docs/version-2.0.0/subscriptions/update-plan.md +++ b/docs/versioned_docs/version-2.0.0/subscriptions/update-plan.md @@ -35,4 +35,4 @@ The `uuid` of the Subscription that is being moved ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.1.0/licenses/check.md b/docs/versioned_docs/version-2.1.0/licenses/check.md index 84ff3ac0..08cfc195 100644 --- a/docs/versioned_docs/version-2.1.0/licenses/check.md +++ b/docs/versioned_docs/version-2.1.0/licenses/check.md @@ -34,4 +34,4 @@ A String array of the grantee Ids you wish to check against ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) diff --git a/docs/versioned_docs/version-2.1.0/licenses/create.md b/docs/versioned_docs/version-2.1.0/licenses/create.md index 4e52f2ef..8b413c93 100644 --- a/docs/versioned_docs/version-2.1.0/licenses/create.md +++ b/docs/versioned_docs/version-2.1.0/licenses/create.md @@ -46,4 +46,4 @@ The grantee ID for the license ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.1.0/licenses/get-all.md b/docs/versioned_docs/version-2.1.0/licenses/get-all.md index 9518e1b3..cebdce75 100644 --- a/docs/versioned_docs/version-2.1.0/licenses/get-all.md +++ b/docs/versioned_docs/version-2.1.0/licenses/get-all.md @@ -18,4 +18,4 @@ const licenses = await salable.licenses.getAll(); ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.1.0/subscriptions/get-one.md b/docs/versioned_docs/version-2.1.0/subscriptions/get-one.md index 7dfadcd9..87ee8e98 100644 --- a/docs/versioned_docs/version-2.1.0/subscriptions/get-one.md +++ b/docs/versioned_docs/version-2.1.0/subscriptions/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Subscription to be returned ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.1.0/subscriptions/update-plan.md b/docs/versioned_docs/version-2.1.0/subscriptions/update-plan.md index 3fcf26f4..642060d5 100644 --- a/docs/versioned_docs/version-2.1.0/subscriptions/update-plan.md +++ b/docs/versioned_docs/version-2.1.0/subscriptions/update-plan.md @@ -35,4 +35,4 @@ The `uuid` of the Subscription that is being moved ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.2.0/licenses/check.md b/docs/versioned_docs/version-2.2.0/licenses/check.md index 84ff3ac0..08cfc195 100644 --- a/docs/versioned_docs/version-2.2.0/licenses/check.md +++ b/docs/versioned_docs/version-2.2.0/licenses/check.md @@ -34,4 +34,4 @@ A String array of the grantee Ids you wish to check against ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) diff --git a/docs/versioned_docs/version-2.2.0/licenses/create.md b/docs/versioned_docs/version-2.2.0/licenses/create.md index 4e52f2ef..8b413c93 100644 --- a/docs/versioned_docs/version-2.2.0/licenses/create.md +++ b/docs/versioned_docs/version-2.2.0/licenses/create.md @@ -46,4 +46,4 @@ The grantee ID for the license ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.2.0/licenses/get-all.md b/docs/versioned_docs/version-2.2.0/licenses/get-all.md index 9518e1b3..cebdce75 100644 --- a/docs/versioned_docs/version-2.2.0/licenses/get-all.md +++ b/docs/versioned_docs/version-2.2.0/licenses/get-all.md @@ -18,4 +18,4 @@ const licenses = await salable.licenses.getAll(); ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.2.0/subscriptions/get-one.md b/docs/versioned_docs/version-2.2.0/subscriptions/get-one.md index 7dfadcd9..87ee8e98 100644 --- a/docs/versioned_docs/version-2.2.0/subscriptions/get-one.md +++ b/docs/versioned_docs/version-2.2.0/subscriptions/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Subscription to be returned ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.2.0/subscriptions/update-plan.md b/docs/versioned_docs/version-2.2.0/subscriptions/update-plan.md index 3fcf26f4..642060d5 100644 --- a/docs/versioned_docs/version-2.2.0/subscriptions/update-plan.md +++ b/docs/versioned_docs/version-2.2.0/subscriptions/update-plan.md @@ -35,4 +35,4 @@ The `uuid` of the Subscription that is being moved ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.3.0/licenses/check.md b/docs/versioned_docs/version-2.3.0/licenses/check.md index 84ff3ac0..08cfc195 100644 --- a/docs/versioned_docs/version-2.3.0/licenses/check.md +++ b/docs/versioned_docs/version-2.3.0/licenses/check.md @@ -34,4 +34,4 @@ A String array of the grantee Ids you wish to check against ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) diff --git a/docs/versioned_docs/version-2.3.0/licenses/create.md b/docs/versioned_docs/version-2.3.0/licenses/create.md index 4e52f2ef..8b413c93 100644 --- a/docs/versioned_docs/version-2.3.0/licenses/create.md +++ b/docs/versioned_docs/version-2.3.0/licenses/create.md @@ -46,4 +46,4 @@ The grantee ID for the license ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.3.0/licenses/get-all.md b/docs/versioned_docs/version-2.3.0/licenses/get-all.md index 9518e1b3..cebdce75 100644 --- a/docs/versioned_docs/version-2.3.0/licenses/get-all.md +++ b/docs/versioned_docs/version-2.3.0/licenses/get-all.md @@ -18,4 +18,4 @@ const licenses = await salable.licenses.getAll(); ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.3.0/subscriptions/get-one.md b/docs/versioned_docs/version-2.3.0/subscriptions/get-one.md index 7dfadcd9..87ee8e98 100644 --- a/docs/versioned_docs/version-2.3.0/subscriptions/get-one.md +++ b/docs/versioned_docs/version-2.3.0/subscriptions/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Subscription to be returned ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.3.0/subscriptions/update-plan.md b/docs/versioned_docs/version-2.3.0/subscriptions/update-plan.md index 3fcf26f4..642060d5 100644 --- a/docs/versioned_docs/version-2.3.0/subscriptions/update-plan.md +++ b/docs/versioned_docs/version-2.3.0/subscriptions/update-plan.md @@ -35,4 +35,4 @@ The `uuid` of the Subscription that is being moved ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.4.0/licenses/check.md b/docs/versioned_docs/version-2.4.0/licenses/check.md index 84ff3ac0..08cfc195 100644 --- a/docs/versioned_docs/version-2.4.0/licenses/check.md +++ b/docs/versioned_docs/version-2.4.0/licenses/check.md @@ -34,4 +34,4 @@ A String array of the grantee Ids you wish to check against ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) diff --git a/docs/versioned_docs/version-2.4.0/licenses/create.md b/docs/versioned_docs/version-2.4.0/licenses/create.md index 4e52f2ef..8b413c93 100644 --- a/docs/versioned_docs/version-2.4.0/licenses/create.md +++ b/docs/versioned_docs/version-2.4.0/licenses/create.md @@ -46,4 +46,4 @@ The grantee ID for the license ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.4.0/licenses/get-all.md b/docs/versioned_docs/version-2.4.0/licenses/get-all.md index 9518e1b3..cebdce75 100644 --- a/docs/versioned_docs/version-2.4.0/licenses/get-all.md +++ b/docs/versioned_docs/version-2.4.0/licenses/get-all.md @@ -18,4 +18,4 @@ const licenses = await salable.licenses.getAll(); ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.4.0/plans/get-capabilities.md b/docs/versioned_docs/version-2.4.0/plans/get-capabilities.md index d8ee187b..e6b3dae3 100644 --- a/docs/versioned_docs/version-2.4.0/plans/get-capabilities.md +++ b/docs/versioned_docs/version-2.4.0/plans/get-capabilities.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Features from ## Return Type -For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCapabilities) +For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCapabilities) diff --git a/docs/versioned_docs/version-2.4.0/plans/get-checkout-link.md b/docs/versioned_docs/version-2.4.0/plans/get-checkout-link.md index 77f9c774..2e39450e 100644 --- a/docs/versioned_docs/version-2.4.0/plans/get-checkout-link.md +++ b/docs/versioned_docs/version-2.4.0/plans/get-checkout-link.md @@ -64,4 +64,4 @@ Query parameters to be passed in to the checkout config ## Return Type -For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api#tag/Plans/operation/getPlanCheckoutLink) +For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCheckoutLink) diff --git a/docs/versioned_docs/version-2.4.0/plans/get-currencies.md b/docs/versioned_docs/version-2.4.0/plans/get-currencies.md index 8b69b722..9cb918a8 100644 --- a/docs/versioned_docs/version-2.4.0/plans/get-currencies.md +++ b/docs/versioned_docs/version-2.4.0/plans/get-currencies.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Currencies from ## Return Type -For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCurrencies) +For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCurrencies) diff --git a/docs/versioned_docs/version-2.4.0/plans/get-features.md b/docs/versioned_docs/version-2.4.0/plans/get-features.md index 920182f6..aeae44cd 100644 --- a/docs/versioned_docs/version-2.4.0/plans/get-features.md +++ b/docs/versioned_docs/version-2.4.0/plans/get-features.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Features from ## Return Type -For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api#tag/Plans/operation/getPlanFeatures) +For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanFeatures) diff --git a/docs/versioned_docs/version-2.4.0/plans/get-one.md b/docs/versioned_docs/version-2.4.0/plans/get-one.md index c8f8a5c6..fc61bef6 100644 --- a/docs/versioned_docs/version-2.4.0/plans/get-one.md +++ b/docs/versioned_docs/version-2.4.0/plans/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to be returned ## Return Type -For more information about this request see our API documentation on [plan object](https://docs.salable.app/api#tag/Plans/operation/getPlanByUuid) +For more information about this request see our API documentation on [plan object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanByUuid) diff --git a/docs/versioned_docs/version-2.4.0/subscriptions/get-one.md b/docs/versioned_docs/version-2.4.0/subscriptions/get-one.md index 7dfadcd9..87ee8e98 100644 --- a/docs/versioned_docs/version-2.4.0/subscriptions/get-one.md +++ b/docs/versioned_docs/version-2.4.0/subscriptions/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Subscription to be returned ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.4.0/subscriptions/update-plan.md b/docs/versioned_docs/version-2.4.0/subscriptions/update-plan.md index 526cd2bb..f8b264d4 100644 --- a/docs/versioned_docs/version-2.4.0/subscriptions/update-plan.md +++ b/docs/versioned_docs/version-2.4.0/subscriptions/update-plan.md @@ -35,4 +35,4 @@ The `uuid` of the Subscription that is being moved ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.5.0/licenses/check.md b/docs/versioned_docs/version-2.5.0/licenses/check.md index 84ff3ac0..08cfc195 100644 --- a/docs/versioned_docs/version-2.5.0/licenses/check.md +++ b/docs/versioned_docs/version-2.5.0/licenses/check.md @@ -34,4 +34,4 @@ A String array of the grantee Ids you wish to check against ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) diff --git a/docs/versioned_docs/version-2.5.0/licenses/create.md b/docs/versioned_docs/version-2.5.0/licenses/create.md index 4e52f2ef..8b413c93 100644 --- a/docs/versioned_docs/version-2.5.0/licenses/create.md +++ b/docs/versioned_docs/version-2.5.0/licenses/create.md @@ -46,4 +46,4 @@ The grantee ID for the license ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.5.0/licenses/get-all.md b/docs/versioned_docs/version-2.5.0/licenses/get-all.md index 9518e1b3..cebdce75 100644 --- a/docs/versioned_docs/version-2.5.0/licenses/get-all.md +++ b/docs/versioned_docs/version-2.5.0/licenses/get-all.md @@ -18,4 +18,4 @@ const licenses = await salable.licenses.getAll(); ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.5.0/plans/get-capabilities.md b/docs/versioned_docs/version-2.5.0/plans/get-capabilities.md index d8ee187b..e6b3dae3 100644 --- a/docs/versioned_docs/version-2.5.0/plans/get-capabilities.md +++ b/docs/versioned_docs/version-2.5.0/plans/get-capabilities.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Features from ## Return Type -For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCapabilities) +For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCapabilities) diff --git a/docs/versioned_docs/version-2.5.0/plans/get-checkout-link.md b/docs/versioned_docs/version-2.5.0/plans/get-checkout-link.md index 77f9c774..2e39450e 100644 --- a/docs/versioned_docs/version-2.5.0/plans/get-checkout-link.md +++ b/docs/versioned_docs/version-2.5.0/plans/get-checkout-link.md @@ -64,4 +64,4 @@ Query parameters to be passed in to the checkout config ## Return Type -For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api#tag/Plans/operation/getPlanCheckoutLink) +For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCheckoutLink) diff --git a/docs/versioned_docs/version-2.5.0/plans/get-currencies.md b/docs/versioned_docs/version-2.5.0/plans/get-currencies.md index 8b69b722..9cb918a8 100644 --- a/docs/versioned_docs/version-2.5.0/plans/get-currencies.md +++ b/docs/versioned_docs/version-2.5.0/plans/get-currencies.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Currencies from ## Return Type -For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCurrencies) +For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCurrencies) diff --git a/docs/versioned_docs/version-2.5.0/plans/get-features.md b/docs/versioned_docs/version-2.5.0/plans/get-features.md index 920182f6..aeae44cd 100644 --- a/docs/versioned_docs/version-2.5.0/plans/get-features.md +++ b/docs/versioned_docs/version-2.5.0/plans/get-features.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Features from ## Return Type -For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api#tag/Plans/operation/getPlanFeatures) +For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanFeatures) diff --git a/docs/versioned_docs/version-2.5.0/plans/get-one.md b/docs/versioned_docs/version-2.5.0/plans/get-one.md index c8f8a5c6..fc61bef6 100644 --- a/docs/versioned_docs/version-2.5.0/plans/get-one.md +++ b/docs/versioned_docs/version-2.5.0/plans/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to be returned ## Return Type -For more information about this request see our API documentation on [plan object](https://docs.salable.app/api#tag/Plans/operation/getPlanByUuid) +For more information about this request see our API documentation on [plan object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanByUuid) diff --git a/docs/versioned_docs/version-2.5.0/products/get-all.md b/docs/versioned_docs/version-2.5.0/products/get-all.md index a2f62cf0..55dd1567 100644 --- a/docs/versioned_docs/version-2.5.0/products/get-all.md +++ b/docs/versioned_docs/version-2.5.0/products/get-all.md @@ -18,4 +18,4 @@ const products = await salable.products.getAll(); ## Return Type -For more information about this request see our API documentation on [Product Object](https://docs.salable.app/api#tag/Products/operation/getProductByUuid) +For more information about this request see our API documentation on [Product Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductByUuid) diff --git a/docs/versioned_docs/version-2.5.0/products/get-capabilities.md b/docs/versioned_docs/version-2.5.0/products/get-capabilities.md index 669c5cc2..fd77c04d 100644 --- a/docs/versioned_docs/version-2.5.0/products/get-capabilities.md +++ b/docs/versioned_docs/version-2.5.0/products/get-capabilities.md @@ -18,4 +18,4 @@ const currencies = await salable.products.getCapabilities(); ## Return Type -For more information about this request see our API documentation on [Capability Object](https://docs.salable.app/api#tag/Products/operation/getProductCapabilities) +For more information about this request see our API documentation on [Capability Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductCapabilities) diff --git a/docs/versioned_docs/version-2.5.0/products/get-currencies.md b/docs/versioned_docs/version-2.5.0/products/get-currencies.md index 588e09d2..ca1fadfd 100644 --- a/docs/versioned_docs/version-2.5.0/products/get-currencies.md +++ b/docs/versioned_docs/version-2.5.0/products/get-currencies.md @@ -18,4 +18,4 @@ const currencies = await salable.products.getCurrencies(); ## Return Type -For more information about this request see our API documentation on [Product Currency Object](https://docs.salable.app/api#tag/Products/operation/getProductCurrencies) +For more information about this request see our API documentation on [Product Currency Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductCurrencies) diff --git a/docs/versioned_docs/version-2.5.0/products/get-features.md b/docs/versioned_docs/version-2.5.0/products/get-features.md index ac40368e..b222b67e 100644 --- a/docs/versioned_docs/version-2.5.0/products/get-features.md +++ b/docs/versioned_docs/version-2.5.0/products/get-features.md @@ -18,4 +18,4 @@ const features = await salable.products.getFeatures(); ## Return Type -For more information about this request see our API documentation on [Feature Object](https://docs.salable.app/api#tag/Products/operation/getProductFeatures) +For more information about this request see our API documentation on [Feature Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductFeatures) diff --git a/docs/versioned_docs/version-2.5.0/products/get-one.md b/docs/versioned_docs/version-2.5.0/products/get-one.md index 84cfd0ec..86b9f698 100644 --- a/docs/versioned_docs/version-2.5.0/products/get-one.md +++ b/docs/versioned_docs/version-2.5.0/products/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Product to be returned ## Return Type -For more information about this request see our API documentation on [product object](https://docs.salable.app/api#tag/Products/operation/getProductByUuid) +For more information about this request see our API documentation on [product object](https://docs.salable.app/api/v2#tag/Products/operation/getProductByUuid) diff --git a/docs/versioned_docs/version-2.5.0/products/get-plans.md b/docs/versioned_docs/version-2.5.0/products/get-plans.md index df3016af..f1e1acb7 100644 --- a/docs/versioned_docs/version-2.5.0/products/get-plans.md +++ b/docs/versioned_docs/version-2.5.0/products/get-plans.md @@ -18,4 +18,4 @@ const plans = await salable.products.getPlans(); ## Return Type -For more information about this request see our API documentation on [Plan Object](https://docs.salable.app/api#tag/Plans/operation/getPlanByUuid) +For more information about this request see our API documentation on [Plan Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanByUuid) diff --git a/docs/versioned_docs/version-2.5.0/products/get-pricing-table.md b/docs/versioned_docs/version-2.5.0/products/get-pricing-table.md index d4ff6e36..43467159 100644 --- a/docs/versioned_docs/version-2.5.0/products/get-pricing-table.md +++ b/docs/versioned_docs/version-2.5.0/products/get-pricing-table.md @@ -18,4 +18,4 @@ const products = await salable.products.getAll(); ## Return Type -For more information about this request see our API documentation on [Product Pricing Table](https://docs.salable.app/api#tag/Products/operation/getProductPricingTable) +For more information about this request see our API documentation on [Product Pricing Table](https://docs.salable.app/api/v2#tag/Products/operation/getProductPricingTable) diff --git a/docs/versioned_docs/version-2.5.0/subscriptions/get-one.md b/docs/versioned_docs/version-2.5.0/subscriptions/get-one.md index 7dfadcd9..87ee8e98 100644 --- a/docs/versioned_docs/version-2.5.0/subscriptions/get-one.md +++ b/docs/versioned_docs/version-2.5.0/subscriptions/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Subscription to be returned ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.5.0/subscriptions/update-plan.md b/docs/versioned_docs/version-2.5.0/subscriptions/update-plan.md index 3fcf26f4..642060d5 100644 --- a/docs/versioned_docs/version-2.5.0/subscriptions/update-plan.md +++ b/docs/versioned_docs/version-2.5.0/subscriptions/update-plan.md @@ -35,4 +35,4 @@ The `uuid` of the Subscription that is being moved ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.6.0/licenses/check.md b/docs/versioned_docs/version-2.6.0/licenses/check.md index 2c797669..3f47479a 100644 --- a/docs/versioned_docs/version-2.6.0/licenses/check.md +++ b/docs/versioned_docs/version-2.6.0/licenses/check.md @@ -36,5 +36,5 @@ A String array of the grantee Ids you wish to check against ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) ``` diff --git a/docs/versioned_docs/version-2.6.0/licenses/create.md b/docs/versioned_docs/version-2.6.0/licenses/create.md index 4e52f2ef..8b413c93 100644 --- a/docs/versioned_docs/version-2.6.0/licenses/create.md +++ b/docs/versioned_docs/version-2.6.0/licenses/create.md @@ -46,4 +46,4 @@ The grantee ID for the license ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.6.0/licenses/get-all.md b/docs/versioned_docs/version-2.6.0/licenses/get-all.md index 9518e1b3..cebdce75 100644 --- a/docs/versioned_docs/version-2.6.0/licenses/get-all.md +++ b/docs/versioned_docs/version-2.6.0/licenses/get-all.md @@ -18,4 +18,4 @@ const licenses = await salable.licenses.getAll(); ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.6.0/plans/get-capabilities.md b/docs/versioned_docs/version-2.6.0/plans/get-capabilities.md index d8ee187b..e6b3dae3 100644 --- a/docs/versioned_docs/version-2.6.0/plans/get-capabilities.md +++ b/docs/versioned_docs/version-2.6.0/plans/get-capabilities.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Features from ## Return Type -For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCapabilities) +For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCapabilities) diff --git a/docs/versioned_docs/version-2.6.0/plans/get-checkout-link.md b/docs/versioned_docs/version-2.6.0/plans/get-checkout-link.md index 77f9c774..2e39450e 100644 --- a/docs/versioned_docs/version-2.6.0/plans/get-checkout-link.md +++ b/docs/versioned_docs/version-2.6.0/plans/get-checkout-link.md @@ -64,4 +64,4 @@ Query parameters to be passed in to the checkout config ## Return Type -For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api#tag/Plans/operation/getPlanCheckoutLink) +For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCheckoutLink) diff --git a/docs/versioned_docs/version-2.6.0/plans/get-currencies.md b/docs/versioned_docs/version-2.6.0/plans/get-currencies.md index 8b69b722..9cb918a8 100644 --- a/docs/versioned_docs/version-2.6.0/plans/get-currencies.md +++ b/docs/versioned_docs/version-2.6.0/plans/get-currencies.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Currencies from ## Return Type -For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCurrencies) +For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCurrencies) diff --git a/docs/versioned_docs/version-2.6.0/plans/get-features.md b/docs/versioned_docs/version-2.6.0/plans/get-features.md index 920182f6..aeae44cd 100644 --- a/docs/versioned_docs/version-2.6.0/plans/get-features.md +++ b/docs/versioned_docs/version-2.6.0/plans/get-features.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Features from ## Return Type -For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api#tag/Plans/operation/getPlanFeatures) +For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanFeatures) diff --git a/docs/versioned_docs/version-2.6.0/plans/get-one.md b/docs/versioned_docs/version-2.6.0/plans/get-one.md index c8f8a5c6..fc61bef6 100644 --- a/docs/versioned_docs/version-2.6.0/plans/get-one.md +++ b/docs/versioned_docs/version-2.6.0/plans/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to be returned ## Return Type -For more information about this request see our API documentation on [plan object](https://docs.salable.app/api#tag/Plans/operation/getPlanByUuid) +For more information about this request see our API documentation on [plan object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanByUuid) diff --git a/docs/versioned_docs/version-2.6.0/products/get-all.md b/docs/versioned_docs/version-2.6.0/products/get-all.md index a2f62cf0..55dd1567 100644 --- a/docs/versioned_docs/version-2.6.0/products/get-all.md +++ b/docs/versioned_docs/version-2.6.0/products/get-all.md @@ -18,4 +18,4 @@ const products = await salable.products.getAll(); ## Return Type -For more information about this request see our API documentation on [Product Object](https://docs.salable.app/api#tag/Products/operation/getProductByUuid) +For more information about this request see our API documentation on [Product Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductByUuid) diff --git a/docs/versioned_docs/version-2.6.0/products/get-capabilities.md b/docs/versioned_docs/version-2.6.0/products/get-capabilities.md index 669c5cc2..fd77c04d 100644 --- a/docs/versioned_docs/version-2.6.0/products/get-capabilities.md +++ b/docs/versioned_docs/version-2.6.0/products/get-capabilities.md @@ -18,4 +18,4 @@ const currencies = await salable.products.getCapabilities(); ## Return Type -For more information about this request see our API documentation on [Capability Object](https://docs.salable.app/api#tag/Products/operation/getProductCapabilities) +For more information about this request see our API documentation on [Capability Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductCapabilities) diff --git a/docs/versioned_docs/version-2.6.0/products/get-currencies.md b/docs/versioned_docs/version-2.6.0/products/get-currencies.md index 588e09d2..ca1fadfd 100644 --- a/docs/versioned_docs/version-2.6.0/products/get-currencies.md +++ b/docs/versioned_docs/version-2.6.0/products/get-currencies.md @@ -18,4 +18,4 @@ const currencies = await salable.products.getCurrencies(); ## Return Type -For more information about this request see our API documentation on [Product Currency Object](https://docs.salable.app/api#tag/Products/operation/getProductCurrencies) +For more information about this request see our API documentation on [Product Currency Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductCurrencies) diff --git a/docs/versioned_docs/version-2.6.0/products/get-features.md b/docs/versioned_docs/version-2.6.0/products/get-features.md index ac40368e..b222b67e 100644 --- a/docs/versioned_docs/version-2.6.0/products/get-features.md +++ b/docs/versioned_docs/version-2.6.0/products/get-features.md @@ -18,4 +18,4 @@ const features = await salable.products.getFeatures(); ## Return Type -For more information about this request see our API documentation on [Feature Object](https://docs.salable.app/api#tag/Products/operation/getProductFeatures) +For more information about this request see our API documentation on [Feature Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductFeatures) diff --git a/docs/versioned_docs/version-2.6.0/products/get-one.md b/docs/versioned_docs/version-2.6.0/products/get-one.md index 84cfd0ec..86b9f698 100644 --- a/docs/versioned_docs/version-2.6.0/products/get-one.md +++ b/docs/versioned_docs/version-2.6.0/products/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Product to be returned ## Return Type -For more information about this request see our API documentation on [product object](https://docs.salable.app/api#tag/Products/operation/getProductByUuid) +For more information about this request see our API documentation on [product object](https://docs.salable.app/api/v2#tag/Products/operation/getProductByUuid) diff --git a/docs/versioned_docs/version-2.6.0/products/get-plans.md b/docs/versioned_docs/version-2.6.0/products/get-plans.md index df3016af..f1e1acb7 100644 --- a/docs/versioned_docs/version-2.6.0/products/get-plans.md +++ b/docs/versioned_docs/version-2.6.0/products/get-plans.md @@ -18,4 +18,4 @@ const plans = await salable.products.getPlans(); ## Return Type -For more information about this request see our API documentation on [Plan Object](https://docs.salable.app/api#tag/Plans/operation/getPlanByUuid) +For more information about this request see our API documentation on [Plan Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanByUuid) diff --git a/docs/versioned_docs/version-2.6.0/products/get-pricing-table.md b/docs/versioned_docs/version-2.6.0/products/get-pricing-table.md index d4ff6e36..43467159 100644 --- a/docs/versioned_docs/version-2.6.0/products/get-pricing-table.md +++ b/docs/versioned_docs/version-2.6.0/products/get-pricing-table.md @@ -18,4 +18,4 @@ const products = await salable.products.getAll(); ## Return Type -For more information about this request see our API documentation on [Product Pricing Table](https://docs.salable.app/api#tag/Products/operation/getProductPricingTable) +For more information about this request see our API documentation on [Product Pricing Table](https://docs.salable.app/api/v2#tag/Products/operation/getProductPricingTable) diff --git a/docs/versioned_docs/version-2.6.0/subscriptions/get-one.md b/docs/versioned_docs/version-2.6.0/subscriptions/get-one.md index 7dfadcd9..87ee8e98 100644 --- a/docs/versioned_docs/version-2.6.0/subscriptions/get-one.md +++ b/docs/versioned_docs/version-2.6.0/subscriptions/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Subscription to be returned ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.6.0/subscriptions/update-plan.md b/docs/versioned_docs/version-2.6.0/subscriptions/update-plan.md index 3fcf26f4..642060d5 100644 --- a/docs/versioned_docs/version-2.6.0/subscriptions/update-plan.md +++ b/docs/versioned_docs/version-2.6.0/subscriptions/update-plan.md @@ -35,4 +35,4 @@ The `uuid` of the Subscription that is being moved ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.7.0/licenses/check.md b/docs/versioned_docs/version-2.7.0/licenses/check.md index 84ff3ac0..08cfc195 100644 --- a/docs/versioned_docs/version-2.7.0/licenses/check.md +++ b/docs/versioned_docs/version-2.7.0/licenses/check.md @@ -34,4 +34,4 @@ A String array of the grantee Ids you wish to check against ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) diff --git a/docs/versioned_docs/version-2.7.0/licenses/create.md b/docs/versioned_docs/version-2.7.0/licenses/create.md index 4e52f2ef..8b413c93 100644 --- a/docs/versioned_docs/version-2.7.0/licenses/create.md +++ b/docs/versioned_docs/version-2.7.0/licenses/create.md @@ -46,4 +46,4 @@ The grantee ID for the license ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.7.0/licenses/get-all.md b/docs/versioned_docs/version-2.7.0/licenses/get-all.md index 2a4039c7..c6e432a6 100644 --- a/docs/versioned_docs/version-2.7.0/licenses/get-all.md +++ b/docs/versioned_docs/version-2.7.0/licenses/get-all.md @@ -18,4 +18,4 @@ const licenses = await salable.licenses.getAll(); ## Return Type -For more information about this request see our API documentation on [Liccense Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [Liccense Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.7.0/licenses/update-many.md b/docs/versioned_docs/version-2.7.0/licenses/update-many.md index 320c41b6..b7e9c865 100644 --- a/docs/versioned_docs/version-2.7.0/licenses/update-many.md +++ b/docs/versioned_docs/version-2.7.0/licenses/update-many.md @@ -41,4 +41,4 @@ The value of the new granteeId. To un-assign a license set the `granteeId` to `n ## Return Type -For more information about this request see our API documentation on [licenses object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [licenses object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.7.0/licenses/update.md b/docs/versioned_docs/version-2.7.0/licenses/update.md index c0f904cf..827dd590 100644 --- a/docs/versioned_docs/version-2.7.0/licenses/update.md +++ b/docs/versioned_docs/version-2.7.0/licenses/update.md @@ -34,4 +34,4 @@ The value of the new granteeId. To un-assign the license set the `granteeId` to ## Return Type -For more information about this request see our API documentation on [license object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [license object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.7.0/plans/get-capabilities.md b/docs/versioned_docs/version-2.7.0/plans/get-capabilities.md index d8ee187b..e6b3dae3 100644 --- a/docs/versioned_docs/version-2.7.0/plans/get-capabilities.md +++ b/docs/versioned_docs/version-2.7.0/plans/get-capabilities.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Features from ## Return Type -For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCapabilities) +For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCapabilities) diff --git a/docs/versioned_docs/version-2.7.0/plans/get-checkout-link.md b/docs/versioned_docs/version-2.7.0/plans/get-checkout-link.md index 77f9c774..2e39450e 100644 --- a/docs/versioned_docs/version-2.7.0/plans/get-checkout-link.md +++ b/docs/versioned_docs/version-2.7.0/plans/get-checkout-link.md @@ -64,4 +64,4 @@ Query parameters to be passed in to the checkout config ## Return Type -For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api#tag/Plans/operation/getPlanCheckoutLink) +For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCheckoutLink) diff --git a/docs/versioned_docs/version-2.7.0/plans/get-currencies.md b/docs/versioned_docs/version-2.7.0/plans/get-currencies.md index 8b69b722..9cb918a8 100644 --- a/docs/versioned_docs/version-2.7.0/plans/get-currencies.md +++ b/docs/versioned_docs/version-2.7.0/plans/get-currencies.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Currencies from ## Return Type -For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCurrencies) +For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCurrencies) diff --git a/docs/versioned_docs/version-2.7.0/plans/get-features.md b/docs/versioned_docs/version-2.7.0/plans/get-features.md index 920182f6..aeae44cd 100644 --- a/docs/versioned_docs/version-2.7.0/plans/get-features.md +++ b/docs/versioned_docs/version-2.7.0/plans/get-features.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Features from ## Return Type -For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api#tag/Plans/operation/getPlanFeatures) +For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanFeatures) diff --git a/docs/versioned_docs/version-2.7.0/plans/get-one.md b/docs/versioned_docs/version-2.7.0/plans/get-one.md index c8f8a5c6..fc61bef6 100644 --- a/docs/versioned_docs/version-2.7.0/plans/get-one.md +++ b/docs/versioned_docs/version-2.7.0/plans/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to be returned ## Return Type -For more information about this request see our API documentation on [plan object](https://docs.salable.app/api#tag/Plans/operation/getPlanByUuid) +For more information about this request see our API documentation on [plan object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanByUuid) diff --git a/docs/versioned_docs/version-2.7.0/products/get-all.md b/docs/versioned_docs/version-2.7.0/products/get-all.md index a2f62cf0..55dd1567 100644 --- a/docs/versioned_docs/version-2.7.0/products/get-all.md +++ b/docs/versioned_docs/version-2.7.0/products/get-all.md @@ -18,4 +18,4 @@ const products = await salable.products.getAll(); ## Return Type -For more information about this request see our API documentation on [Product Object](https://docs.salable.app/api#tag/Products/operation/getProductByUuid) +For more information about this request see our API documentation on [Product Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductByUuid) diff --git a/docs/versioned_docs/version-2.7.0/products/get-capabilities.md b/docs/versioned_docs/version-2.7.0/products/get-capabilities.md index 669c5cc2..fd77c04d 100644 --- a/docs/versioned_docs/version-2.7.0/products/get-capabilities.md +++ b/docs/versioned_docs/version-2.7.0/products/get-capabilities.md @@ -18,4 +18,4 @@ const currencies = await salable.products.getCapabilities(); ## Return Type -For more information about this request see our API documentation on [Capability Object](https://docs.salable.app/api#tag/Products/operation/getProductCapabilities) +For more information about this request see our API documentation on [Capability Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductCapabilities) diff --git a/docs/versioned_docs/version-2.7.0/products/get-currencies.md b/docs/versioned_docs/version-2.7.0/products/get-currencies.md index 588e09d2..ca1fadfd 100644 --- a/docs/versioned_docs/version-2.7.0/products/get-currencies.md +++ b/docs/versioned_docs/version-2.7.0/products/get-currencies.md @@ -18,4 +18,4 @@ const currencies = await salable.products.getCurrencies(); ## Return Type -For more information about this request see our API documentation on [Product Currency Object](https://docs.salable.app/api#tag/Products/operation/getProductCurrencies) +For more information about this request see our API documentation on [Product Currency Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductCurrencies) diff --git a/docs/versioned_docs/version-2.7.0/products/get-features.md b/docs/versioned_docs/version-2.7.0/products/get-features.md index ac40368e..b222b67e 100644 --- a/docs/versioned_docs/version-2.7.0/products/get-features.md +++ b/docs/versioned_docs/version-2.7.0/products/get-features.md @@ -18,4 +18,4 @@ const features = await salable.products.getFeatures(); ## Return Type -For more information about this request see our API documentation on [Feature Object](https://docs.salable.app/api#tag/Products/operation/getProductFeatures) +For more information about this request see our API documentation on [Feature Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductFeatures) diff --git a/docs/versioned_docs/version-2.7.0/products/get-one.md b/docs/versioned_docs/version-2.7.0/products/get-one.md index 84cfd0ec..86b9f698 100644 --- a/docs/versioned_docs/version-2.7.0/products/get-one.md +++ b/docs/versioned_docs/version-2.7.0/products/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Product to be returned ## Return Type -For more information about this request see our API documentation on [product object](https://docs.salable.app/api#tag/Products/operation/getProductByUuid) +For more information about this request see our API documentation on [product object](https://docs.salable.app/api/v2#tag/Products/operation/getProductByUuid) diff --git a/docs/versioned_docs/version-2.7.0/products/get-plans.md b/docs/versioned_docs/version-2.7.0/products/get-plans.md index df3016af..f1e1acb7 100644 --- a/docs/versioned_docs/version-2.7.0/products/get-plans.md +++ b/docs/versioned_docs/version-2.7.0/products/get-plans.md @@ -18,4 +18,4 @@ const plans = await salable.products.getPlans(); ## Return Type -For more information about this request see our API documentation on [Plan Object](https://docs.salable.app/api#tag/Plans/operation/getPlanByUuid) +For more information about this request see our API documentation on [Plan Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanByUuid) diff --git a/docs/versioned_docs/version-2.7.0/products/get-pricing-table.md b/docs/versioned_docs/version-2.7.0/products/get-pricing-table.md index d4ff6e36..43467159 100644 --- a/docs/versioned_docs/version-2.7.0/products/get-pricing-table.md +++ b/docs/versioned_docs/version-2.7.0/products/get-pricing-table.md @@ -18,4 +18,4 @@ const products = await salable.products.getAll(); ## Return Type -For more information about this request see our API documentation on [Product Pricing Table](https://docs.salable.app/api#tag/Products/operation/getProductPricingTable) +For more information about this request see our API documentation on [Product Pricing Table](https://docs.salable.app/api/v2#tag/Products/operation/getProductPricingTable) diff --git a/docs/versioned_docs/version-2.7.0/subscriptions/get-one.md b/docs/versioned_docs/version-2.7.0/subscriptions/get-one.md index 7dfadcd9..87ee8e98 100644 --- a/docs/versioned_docs/version-2.7.0/subscriptions/get-one.md +++ b/docs/versioned_docs/version-2.7.0/subscriptions/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Subscription to be returned ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.7.0/subscriptions/update-plan.md b/docs/versioned_docs/version-2.7.0/subscriptions/update-plan.md index 3fcf26f4..642060d5 100644 --- a/docs/versioned_docs/version-2.7.0/subscriptions/update-plan.md +++ b/docs/versioned_docs/version-2.7.0/subscriptions/update-plan.md @@ -35,4 +35,4 @@ The `uuid` of the Subscription that is being moved ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.8.0/licenses/check.md b/docs/versioned_docs/version-2.8.0/licenses/check.md index 84ff3ac0..08cfc195 100644 --- a/docs/versioned_docs/version-2.8.0/licenses/check.md +++ b/docs/versioned_docs/version-2.8.0/licenses/check.md @@ -34,4 +34,4 @@ A String array of the grantee Ids you wish to check against ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) diff --git a/docs/versioned_docs/version-2.8.0/licenses/create.md b/docs/versioned_docs/version-2.8.0/licenses/create.md index 4e52f2ef..8b413c93 100644 --- a/docs/versioned_docs/version-2.8.0/licenses/create.md +++ b/docs/versioned_docs/version-2.8.0/licenses/create.md @@ -46,4 +46,4 @@ The grantee ID for the license ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.8.0/licenses/get-all.md b/docs/versioned_docs/version-2.8.0/licenses/get-all.md index 2a4039c7..c6e432a6 100644 --- a/docs/versioned_docs/version-2.8.0/licenses/get-all.md +++ b/docs/versioned_docs/version-2.8.0/licenses/get-all.md @@ -18,4 +18,4 @@ const licenses = await salable.licenses.getAll(); ## Return Type -For more information about this request see our API documentation on [Liccense Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [Liccense Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.8.0/licenses/update-many.md b/docs/versioned_docs/version-2.8.0/licenses/update-many.md index 320c41b6..b7e9c865 100644 --- a/docs/versioned_docs/version-2.8.0/licenses/update-many.md +++ b/docs/versioned_docs/version-2.8.0/licenses/update-many.md @@ -41,4 +41,4 @@ The value of the new granteeId. To un-assign a license set the `granteeId` to `n ## Return Type -For more information about this request see our API documentation on [licenses object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [licenses object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.8.0/licenses/update.md b/docs/versioned_docs/version-2.8.0/licenses/update.md index c0f904cf..827dd590 100644 --- a/docs/versioned_docs/version-2.8.0/licenses/update.md +++ b/docs/versioned_docs/version-2.8.0/licenses/update.md @@ -34,4 +34,4 @@ The value of the new granteeId. To un-assign the license set the `granteeId` to ## Return Type -For more information about this request see our API documentation on [license object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [license object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-2.8.0/plans/get-capabilities.md b/docs/versioned_docs/version-2.8.0/plans/get-capabilities.md index d8ee187b..e6b3dae3 100644 --- a/docs/versioned_docs/version-2.8.0/plans/get-capabilities.md +++ b/docs/versioned_docs/version-2.8.0/plans/get-capabilities.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Features from ## Return Type -For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCapabilities) +For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCapabilities) diff --git a/docs/versioned_docs/version-2.8.0/plans/get-checkout-link.md b/docs/versioned_docs/version-2.8.0/plans/get-checkout-link.md index 77f9c774..2e39450e 100644 --- a/docs/versioned_docs/version-2.8.0/plans/get-checkout-link.md +++ b/docs/versioned_docs/version-2.8.0/plans/get-checkout-link.md @@ -64,4 +64,4 @@ Query parameters to be passed in to the checkout config ## Return Type -For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api#tag/Plans/operation/getPlanCheckoutLink) +For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCheckoutLink) diff --git a/docs/versioned_docs/version-2.8.0/plans/get-currencies.md b/docs/versioned_docs/version-2.8.0/plans/get-currencies.md index 8b69b722..9cb918a8 100644 --- a/docs/versioned_docs/version-2.8.0/plans/get-currencies.md +++ b/docs/versioned_docs/version-2.8.0/plans/get-currencies.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Currencies from ## Return Type -For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCurrencies) +For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCurrencies) diff --git a/docs/versioned_docs/version-2.8.0/plans/get-features.md b/docs/versioned_docs/version-2.8.0/plans/get-features.md index 920182f6..aeae44cd 100644 --- a/docs/versioned_docs/version-2.8.0/plans/get-features.md +++ b/docs/versioned_docs/version-2.8.0/plans/get-features.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Features from ## Return Type -For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api#tag/Plans/operation/getPlanFeatures) +For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanFeatures) diff --git a/docs/versioned_docs/version-2.8.0/plans/get-one.md b/docs/versioned_docs/version-2.8.0/plans/get-one.md index c8f8a5c6..fc61bef6 100644 --- a/docs/versioned_docs/version-2.8.0/plans/get-one.md +++ b/docs/versioned_docs/version-2.8.0/plans/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to be returned ## Return Type -For more information about this request see our API documentation on [plan object](https://docs.salable.app/api#tag/Plans/operation/getPlanByUuid) +For more information about this request see our API documentation on [plan object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanByUuid) diff --git a/docs/versioned_docs/version-2.8.0/pricing-tables/get-one.md b/docs/versioned_docs/version-2.8.0/pricing-tables/get-one.md index 79163af5..6a6b22af 100644 --- a/docs/versioned_docs/version-2.8.0/pricing-tables/get-one.md +++ b/docs/versioned_docs/version-2.8.0/pricing-tables/get-one.md @@ -103,4 +103,4 @@ const pricingTable = await salable.pricingTables.getOne('{{PRICING_TABLE_UUID}}' ## Return Type -For more information about this request see our API documentation on [Pricing Table](https://docs.salable.app/api#tag/Pricing-Tables/operation/getPricingTableByUuid) +For more information about this request see our API documentation on [Pricing Table](https://docs.salable.app/api/v2#tag/Pricing-Tables/operation/getPricingTableByUuid) diff --git a/docs/versioned_docs/version-2.8.0/products/get-all.md b/docs/versioned_docs/version-2.8.0/products/get-all.md index a2f62cf0..55dd1567 100644 --- a/docs/versioned_docs/version-2.8.0/products/get-all.md +++ b/docs/versioned_docs/version-2.8.0/products/get-all.md @@ -18,4 +18,4 @@ const products = await salable.products.getAll(); ## Return Type -For more information about this request see our API documentation on [Product Object](https://docs.salable.app/api#tag/Products/operation/getProductByUuid) +For more information about this request see our API documentation on [Product Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductByUuid) diff --git a/docs/versioned_docs/version-2.8.0/products/get-capabilities.md b/docs/versioned_docs/version-2.8.0/products/get-capabilities.md index 669c5cc2..fd77c04d 100644 --- a/docs/versioned_docs/version-2.8.0/products/get-capabilities.md +++ b/docs/versioned_docs/version-2.8.0/products/get-capabilities.md @@ -18,4 +18,4 @@ const currencies = await salable.products.getCapabilities(); ## Return Type -For more information about this request see our API documentation on [Capability Object](https://docs.salable.app/api#tag/Products/operation/getProductCapabilities) +For more information about this request see our API documentation on [Capability Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductCapabilities) diff --git a/docs/versioned_docs/version-2.8.0/products/get-currencies.md b/docs/versioned_docs/version-2.8.0/products/get-currencies.md index 588e09d2..ca1fadfd 100644 --- a/docs/versioned_docs/version-2.8.0/products/get-currencies.md +++ b/docs/versioned_docs/version-2.8.0/products/get-currencies.md @@ -18,4 +18,4 @@ const currencies = await salable.products.getCurrencies(); ## Return Type -For more information about this request see our API documentation on [Product Currency Object](https://docs.salable.app/api#tag/Products/operation/getProductCurrencies) +For more information about this request see our API documentation on [Product Currency Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductCurrencies) diff --git a/docs/versioned_docs/version-2.8.0/products/get-features.md b/docs/versioned_docs/version-2.8.0/products/get-features.md index ac40368e..b222b67e 100644 --- a/docs/versioned_docs/version-2.8.0/products/get-features.md +++ b/docs/versioned_docs/version-2.8.0/products/get-features.md @@ -18,4 +18,4 @@ const features = await salable.products.getFeatures(); ## Return Type -For more information about this request see our API documentation on [Feature Object](https://docs.salable.app/api#tag/Products/operation/getProductFeatures) +For more information about this request see our API documentation on [Feature Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductFeatures) diff --git a/docs/versioned_docs/version-2.8.0/products/get-one.md b/docs/versioned_docs/version-2.8.0/products/get-one.md index 84cfd0ec..86b9f698 100644 --- a/docs/versioned_docs/version-2.8.0/products/get-one.md +++ b/docs/versioned_docs/version-2.8.0/products/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Product to be returned ## Return Type -For more information about this request see our API documentation on [product object](https://docs.salable.app/api#tag/Products/operation/getProductByUuid) +For more information about this request see our API documentation on [product object](https://docs.salable.app/api/v2#tag/Products/operation/getProductByUuid) diff --git a/docs/versioned_docs/version-2.8.0/products/get-plans.md b/docs/versioned_docs/version-2.8.0/products/get-plans.md index df3016af..f1e1acb7 100644 --- a/docs/versioned_docs/version-2.8.0/products/get-plans.md +++ b/docs/versioned_docs/version-2.8.0/products/get-plans.md @@ -18,4 +18,4 @@ const plans = await salable.products.getPlans(); ## Return Type -For more information about this request see our API documentation on [Plan Object](https://docs.salable.app/api#tag/Plans/operation/getPlanByUuid) +For more information about this request see our API documentation on [Plan Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanByUuid) diff --git a/docs/versioned_docs/version-2.8.0/products/get-pricing-table.md b/docs/versioned_docs/version-2.8.0/products/get-pricing-table.md index b53f6b2c..bd64a242 100644 --- a/docs/versioned_docs/version-2.8.0/products/get-pricing-table.md +++ b/docs/versioned_docs/version-2.8.0/products/get-pricing-table.md @@ -103,4 +103,4 @@ const pricingTable = await salable.products.getPricingTable('{{PRODUCT_UUID}}', ## Return Type -For more information about this request see our API documentation on [Pricing Table](https://docs.salable.app/api#tag/Pricing-Tables/operation/getPricingTableByUuid) +For more information about this request see our API documentation on [Pricing Table](https://docs.salable.app/api/v2#tag/Pricing-Tables/operation/getPricingTableByUuid) diff --git a/docs/versioned_docs/version-2.8.0/subscriptions/change-plan.md b/docs/versioned_docs/version-2.8.0/subscriptions/change-plan.md index 099b4f83..eaf80bb8 100644 --- a/docs/versioned_docs/version-2.8.0/subscriptions/change-plan.md +++ b/docs/versioned_docs/version-2.8.0/subscriptions/change-plan.md @@ -37,4 +37,4 @@ _Type:_ `SubscriptionsChangePlanBody` ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.8.0/subscriptions/get-one.md b/docs/versioned_docs/version-2.8.0/subscriptions/get-one.md index 7dfadcd9..87ee8e98 100644 --- a/docs/versioned_docs/version-2.8.0/subscriptions/get-one.md +++ b/docs/versioned_docs/version-2.8.0/subscriptions/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Subscription to be returned ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-2.8.0/subscriptions/update-plan.md b/docs/versioned_docs/version-2.8.0/subscriptions/update-plan.md index 3fcf26f4..642060d5 100644 --- a/docs/versioned_docs/version-2.8.0/subscriptions/update-plan.md +++ b/docs/versioned_docs/version-2.8.0/subscriptions/update-plan.md @@ -35,4 +35,4 @@ The `uuid` of the Subscription that is being moved ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-3.0.0/licenses/check.md b/docs/versioned_docs/version-3.0.0/licenses/check.md index 84ff3ac0..08cfc195 100644 --- a/docs/versioned_docs/version-3.0.0/licenses/check.md +++ b/docs/versioned_docs/version-3.0.0/licenses/check.md @@ -34,4 +34,4 @@ A String array of the grantee Ids you wish to check against ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) diff --git a/docs/versioned_docs/version-3.0.0/licenses/create.md b/docs/versioned_docs/version-3.0.0/licenses/create.md index ebe472a4..e8748698 100644 --- a/docs/versioned_docs/version-3.0.0/licenses/create.md +++ b/docs/versioned_docs/version-3.0.0/licenses/create.md @@ -38,4 +38,4 @@ A String array of the grantee Ids you wish to check against ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.0.0/licenses/get-all.md b/docs/versioned_docs/version-3.0.0/licenses/get-all.md index 9518e1b3..cebdce75 100644 --- a/docs/versioned_docs/version-3.0.0/licenses/get-all.md +++ b/docs/versioned_docs/version-3.0.0/licenses/get-all.md @@ -18,4 +18,4 @@ const licenses = await salable.licenses.getAll(); ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.0.0/licenses/update-many.md b/docs/versioned_docs/version-3.0.0/licenses/update-many.md index 320c41b6..b7e9c865 100644 --- a/docs/versioned_docs/version-3.0.0/licenses/update-many.md +++ b/docs/versioned_docs/version-3.0.0/licenses/update-many.md @@ -41,4 +41,4 @@ The value of the new granteeId. To un-assign a license set the `granteeId` to `n ## Return Type -For more information about this request see our API documentation on [licenses object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [licenses object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.0.0/licenses/update.md b/docs/versioned_docs/version-3.0.0/licenses/update.md index ea6fc93c..e1c33291 100644 --- a/docs/versioned_docs/version-3.0.0/licenses/update.md +++ b/docs/versioned_docs/version-3.0.0/licenses/update.md @@ -37,4 +37,4 @@ The value of the new granteeId. To un-assign the license set the `granteeId` to ## Return Type -For more information about this request see our API documentation on [license object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [license object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.0.0/plans/get-capabilities.md b/docs/versioned_docs/version-3.0.0/plans/get-capabilities.md index d8ee187b..e6b3dae3 100644 --- a/docs/versioned_docs/version-3.0.0/plans/get-capabilities.md +++ b/docs/versioned_docs/version-3.0.0/plans/get-capabilities.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Features from ## Return Type -For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCapabilities) +For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCapabilities) diff --git a/docs/versioned_docs/version-3.0.0/plans/get-checkout-link.md b/docs/versioned_docs/version-3.0.0/plans/get-checkout-link.md index 77f9c774..2e39450e 100644 --- a/docs/versioned_docs/version-3.0.0/plans/get-checkout-link.md +++ b/docs/versioned_docs/version-3.0.0/plans/get-checkout-link.md @@ -64,4 +64,4 @@ Query parameters to be passed in to the checkout config ## Return Type -For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api#tag/Plans/operation/getPlanCheckoutLink) +For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCheckoutLink) diff --git a/docs/versioned_docs/version-3.0.0/plans/get-currencies.md b/docs/versioned_docs/version-3.0.0/plans/get-currencies.md index 8b69b722..9cb918a8 100644 --- a/docs/versioned_docs/version-3.0.0/plans/get-currencies.md +++ b/docs/versioned_docs/version-3.0.0/plans/get-currencies.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Currencies from ## Return Type -For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCurrencies) +For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCurrencies) diff --git a/docs/versioned_docs/version-3.0.0/plans/get-features.md b/docs/versioned_docs/version-3.0.0/plans/get-features.md index 920182f6..aeae44cd 100644 --- a/docs/versioned_docs/version-3.0.0/plans/get-features.md +++ b/docs/versioned_docs/version-3.0.0/plans/get-features.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Features from ## Return Type -For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api#tag/Plans/operation/getPlanFeatures) +For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanFeatures) diff --git a/docs/versioned_docs/version-3.0.0/plans/get-one.md b/docs/versioned_docs/version-3.0.0/plans/get-one.md index c8f8a5c6..fc61bef6 100644 --- a/docs/versioned_docs/version-3.0.0/plans/get-one.md +++ b/docs/versioned_docs/version-3.0.0/plans/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to be returned ## Return Type -For more information about this request see our API documentation on [plan object](https://docs.salable.app/api#tag/Plans/operation/getPlanByUuid) +For more information about this request see our API documentation on [plan object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanByUuid) diff --git a/docs/versioned_docs/version-3.0.0/pricing-tables/get-one.md b/docs/versioned_docs/version-3.0.0/pricing-tables/get-one.md index 79163af5..6a6b22af 100644 --- a/docs/versioned_docs/version-3.0.0/pricing-tables/get-one.md +++ b/docs/versioned_docs/version-3.0.0/pricing-tables/get-one.md @@ -103,4 +103,4 @@ const pricingTable = await salable.pricingTables.getOne('{{PRICING_TABLE_UUID}}' ## Return Type -For more information about this request see our API documentation on [Pricing Table](https://docs.salable.app/api#tag/Pricing-Tables/operation/getPricingTableByUuid) +For more information about this request see our API documentation on [Pricing Table](https://docs.salable.app/api/v2#tag/Pricing-Tables/operation/getPricingTableByUuid) diff --git a/docs/versioned_docs/version-3.0.0/products/get-all.md b/docs/versioned_docs/version-3.0.0/products/get-all.md index a2f62cf0..55dd1567 100644 --- a/docs/versioned_docs/version-3.0.0/products/get-all.md +++ b/docs/versioned_docs/version-3.0.0/products/get-all.md @@ -18,4 +18,4 @@ const products = await salable.products.getAll(); ## Return Type -For more information about this request see our API documentation on [Product Object](https://docs.salable.app/api#tag/Products/operation/getProductByUuid) +For more information about this request see our API documentation on [Product Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductByUuid) diff --git a/docs/versioned_docs/version-3.0.0/products/get-capabilities.md b/docs/versioned_docs/version-3.0.0/products/get-capabilities.md index 669c5cc2..fd77c04d 100644 --- a/docs/versioned_docs/version-3.0.0/products/get-capabilities.md +++ b/docs/versioned_docs/version-3.0.0/products/get-capabilities.md @@ -18,4 +18,4 @@ const currencies = await salable.products.getCapabilities(); ## Return Type -For more information about this request see our API documentation on [Capability Object](https://docs.salable.app/api#tag/Products/operation/getProductCapabilities) +For more information about this request see our API documentation on [Capability Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductCapabilities) diff --git a/docs/versioned_docs/version-3.0.0/products/get-currencies.md b/docs/versioned_docs/version-3.0.0/products/get-currencies.md index 588e09d2..ca1fadfd 100644 --- a/docs/versioned_docs/version-3.0.0/products/get-currencies.md +++ b/docs/versioned_docs/version-3.0.0/products/get-currencies.md @@ -18,4 +18,4 @@ const currencies = await salable.products.getCurrencies(); ## Return Type -For more information about this request see our API documentation on [Product Currency Object](https://docs.salable.app/api#tag/Products/operation/getProductCurrencies) +For more information about this request see our API documentation on [Product Currency Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductCurrencies) diff --git a/docs/versioned_docs/version-3.0.0/products/get-features.md b/docs/versioned_docs/version-3.0.0/products/get-features.md index ac40368e..b222b67e 100644 --- a/docs/versioned_docs/version-3.0.0/products/get-features.md +++ b/docs/versioned_docs/version-3.0.0/products/get-features.md @@ -18,4 +18,4 @@ const features = await salable.products.getFeatures(); ## Return Type -For more information about this request see our API documentation on [Feature Object](https://docs.salable.app/api#tag/Products/operation/getProductFeatures) +For more information about this request see our API documentation on [Feature Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductFeatures) diff --git a/docs/versioned_docs/version-3.0.0/products/get-one.md b/docs/versioned_docs/version-3.0.0/products/get-one.md index 84cfd0ec..86b9f698 100644 --- a/docs/versioned_docs/version-3.0.0/products/get-one.md +++ b/docs/versioned_docs/version-3.0.0/products/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Product to be returned ## Return Type -For more information about this request see our API documentation on [product object](https://docs.salable.app/api#tag/Products/operation/getProductByUuid) +For more information about this request see our API documentation on [product object](https://docs.salable.app/api/v2#tag/Products/operation/getProductByUuid) diff --git a/docs/versioned_docs/version-3.0.0/products/get-plans.md b/docs/versioned_docs/version-3.0.0/products/get-plans.md index df3016af..f1e1acb7 100644 --- a/docs/versioned_docs/version-3.0.0/products/get-plans.md +++ b/docs/versioned_docs/version-3.0.0/products/get-plans.md @@ -18,4 +18,4 @@ const plans = await salable.products.getPlans(); ## Return Type -For more information about this request see our API documentation on [Plan Object](https://docs.salable.app/api#tag/Plans/operation/getPlanByUuid) +For more information about this request see our API documentation on [Plan Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanByUuid) diff --git a/docs/versioned_docs/version-3.0.0/products/get-pricing-table.md b/docs/versioned_docs/version-3.0.0/products/get-pricing-table.md index 21e75b11..472bac25 100644 --- a/docs/versioned_docs/version-3.0.0/products/get-pricing-table.md +++ b/docs/versioned_docs/version-3.0.0/products/get-pricing-table.md @@ -103,8 +103,8 @@ const pricingTable = await salable.products.getPricingTable('{{PRODUCT_UUID}}', ## Return Type -For more information about this request see our API documentation on [Pricing Table](https://docs.salable.app/api#tag/Pricing-Tables/operation/getPricingTableByUuid) +For more information about this request see our API documentation on [Pricing Table](https://docs.salable.app/api/v2#tag/Pricing-Tables/operation/getPricingTableByUuid) ## Return Type -For more information about this request see our API documentation on [Product Pricing Table](https://docs.salable.app/api#tag/Products/operation/getProductPricingTable) +For more information about this request see our API documentation on [Product Pricing Table](https://docs.salable.app/api/v2#tag/Products/operation/getProductPricingTable) diff --git a/docs/versioned_docs/version-3.0.0/subscriptions/change-plan.md b/docs/versioned_docs/version-3.0.0/subscriptions/change-plan.md index 099b4f83..eaf80bb8 100644 --- a/docs/versioned_docs/version-3.0.0/subscriptions/change-plan.md +++ b/docs/versioned_docs/version-3.0.0/subscriptions/change-plan.md @@ -37,4 +37,4 @@ _Type:_ `SubscriptionsChangePlanBody` ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-3.0.0/subscriptions/get-one.md b/docs/versioned_docs/version-3.0.0/subscriptions/get-one.md index 7dfadcd9..87ee8e98 100644 --- a/docs/versioned_docs/version-3.0.0/subscriptions/get-one.md +++ b/docs/versioned_docs/version-3.0.0/subscriptions/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Subscription to be returned ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-3.0.0/subscriptions/update-plan.md b/docs/versioned_docs/version-3.0.0/subscriptions/update-plan.md index 3fcf26f4..642060d5 100644 --- a/docs/versioned_docs/version-3.0.0/subscriptions/update-plan.md +++ b/docs/versioned_docs/version-3.0.0/subscriptions/update-plan.md @@ -35,4 +35,4 @@ The `uuid` of the Subscription that is being moved ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-3.1.0/licenses/cancel-many.md b/docs/versioned_docs/version-3.1.0/licenses/cancel-many.md index ed666eb9..a1cf0998 100644 --- a/docs/versioned_docs/version-3.1.0/licenses/cancel-many.md +++ b/docs/versioned_docs/version-3.1.0/licenses/cancel-many.md @@ -26,4 +26,4 @@ _Type:_ `string[]` ## Return Type -For more information about this request see our API documentation on [cancel many Licenses](https://docs.salable.app/api#tag/Licenses/operation/cancelLicenses) +For more information about this request see our API documentation on [cancel many Licenses](https://docs.salable.app/api/v2#tag/Licenses/operation/cancelLicenses) diff --git a/docs/versioned_docs/version-3.1.0/licenses/cancel.md b/docs/versioned_docs/version-3.1.0/licenses/cancel.md index 27a16b68..36c647d6 100644 --- a/docs/versioned_docs/version-3.1.0/licenses/cancel.md +++ b/docs/versioned_docs/version-3.1.0/licenses/cancel.md @@ -26,4 +26,4 @@ _Type:_ `string` ## Return Type -For more information about this request see our API documentation on [cancel License](https://docs.salable.app/api#tag/Licenses/operation/cancelLicense) +For more information about this request see our API documentation on [cancel License](https://docs.salable.app/api/v2#tag/Licenses/operation/cancelLicense) diff --git a/docs/versioned_docs/version-3.1.0/licenses/check.md b/docs/versioned_docs/version-3.1.0/licenses/check.md index 98561d63..88f78086 100644 --- a/docs/versioned_docs/version-3.1.0/licenses/check.md +++ b/docs/versioned_docs/version-3.1.0/licenses/check.md @@ -42,4 +42,4 @@ The number of days to extend the end dates of capabilities ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) diff --git a/docs/versioned_docs/version-3.1.0/licenses/create.md b/docs/versioned_docs/version-3.1.0/licenses/create.md index 1e06d847..da40cf22 100644 --- a/docs/versioned_docs/version-3.1.0/licenses/create.md +++ b/docs/versioned_docs/version-3.1.0/licenses/create.md @@ -69,4 +69,4 @@ The grantee ID for the license ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.1.0/licenses/get-all.md b/docs/versioned_docs/version-3.1.0/licenses/get-all.md index 9518e1b3..cebdce75 100644 --- a/docs/versioned_docs/version-3.1.0/licenses/get-all.md +++ b/docs/versioned_docs/version-3.1.0/licenses/get-all.md @@ -18,4 +18,4 @@ const licenses = await salable.licenses.getAll(); ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.1.0/licenses/get-count.md b/docs/versioned_docs/version-3.1.0/licenses/get-count.md index ab9f54a0..b6a6cd4d 100644 --- a/docs/versioned_docs/version-3.1.0/licenses/get-count.md +++ b/docs/versioned_docs/version-3.1.0/licenses/get-count.md @@ -32,4 +32,4 @@ The `status` of the license to filter by ## Return Type -For more information about this request see our API documentation on [License count](https://docs.salable.app/api#tag/Licenses/operation/getLicensesCount) +For more information about this request see our API documentation on [License count](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicensesCount) diff --git a/docs/versioned_docs/version-3.1.0/licenses/get-for-granteeId.md b/docs/versioned_docs/version-3.1.0/licenses/get-for-granteeId.md index 33ee51d2..8197647d 100644 --- a/docs/versioned_docs/version-3.1.0/licenses/get-for-granteeId.md +++ b/docs/versioned_docs/version-3.1.0/licenses/get-for-granteeId.md @@ -26,4 +26,4 @@ The grantee ID of the licenses ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.1.0/licenses/get-for-purchaser.md b/docs/versioned_docs/version-3.1.0/licenses/get-for-purchaser.md index 74d618d0..21eee05d 100644 --- a/docs/versioned_docs/version-3.1.0/licenses/get-for-purchaser.md +++ b/docs/versioned_docs/version-3.1.0/licenses/get-for-purchaser.md @@ -40,4 +40,4 @@ _Type:_ `LicenseGetByPurchaserOptions` ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.1.0/licenses/get-one.md b/docs/versioned_docs/version-3.1.0/licenses/get-one.md index ae31006c..804b3030 100644 --- a/docs/versioned_docs/version-3.1.0/licenses/get-one.md +++ b/docs/versioned_docs/version-3.1.0/licenses/get-one.md @@ -18,4 +18,4 @@ const license = await salable.licenses.getOne('{{LICENSE_UUID}}'); ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.1.0/licenses/get-usage-on-license.md b/docs/versioned_docs/version-3.1.0/licenses/get-usage-on-license.md index 753a076e..9ad9cbb8 100644 --- a/docs/versioned_docs/version-3.1.0/licenses/get-usage-on-license.md +++ b/docs/versioned_docs/version-3.1.0/licenses/get-usage-on-license.md @@ -26,4 +26,4 @@ The `uuid` of the license ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.1.0/licenses/update-many.md b/docs/versioned_docs/version-3.1.0/licenses/update-many.md index 72d07d2e..f97836b6 100644 --- a/docs/versioned_docs/version-3.1.0/licenses/update-many.md +++ b/docs/versioned_docs/version-3.1.0/licenses/update-many.md @@ -41,4 +41,4 @@ The value of the new granteeId. To un-assign a license set the `granteeId` to `n ## Return Type -For more information about this request see our API documentation on [licenses object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [licenses object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.1.0/licenses/update.md b/docs/versioned_docs/version-3.1.0/licenses/update.md index d71868f6..6cd60836 100644 --- a/docs/versioned_docs/version-3.1.0/licenses/update.md +++ b/docs/versioned_docs/version-3.1.0/licenses/update.md @@ -37,4 +37,4 @@ The value of the new granteeId. To un-assign the license set the `granteeId` to ## Return Type -For more information about this request see our API documentation on [license object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [license object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.1.0/plans/get-capabilities.md b/docs/versioned_docs/version-3.1.0/plans/get-capabilities.md index 92fa53c2..edabfd6d 100644 --- a/docs/versioned_docs/version-3.1.0/plans/get-capabilities.md +++ b/docs/versioned_docs/version-3.1.0/plans/get-capabilities.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Features from ## Return Type -For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCapabilities) +For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCapabilities) diff --git a/docs/versioned_docs/version-3.1.0/plans/get-checkout-link.md b/docs/versioned_docs/version-3.1.0/plans/get-checkout-link.md index 77f9c774..2e39450e 100644 --- a/docs/versioned_docs/version-3.1.0/plans/get-checkout-link.md +++ b/docs/versioned_docs/version-3.1.0/plans/get-checkout-link.md @@ -64,4 +64,4 @@ Query parameters to be passed in to the checkout config ## Return Type -For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api#tag/Plans/operation/getPlanCheckoutLink) +For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCheckoutLink) diff --git a/docs/versioned_docs/version-3.1.0/plans/get-currencies.md b/docs/versioned_docs/version-3.1.0/plans/get-currencies.md index 6fd90d15..9b4845da 100644 --- a/docs/versioned_docs/version-3.1.0/plans/get-currencies.md +++ b/docs/versioned_docs/version-3.1.0/plans/get-currencies.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Currencies from ## Return Type -For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCurrencies) +For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCurrencies) diff --git a/docs/versioned_docs/version-3.1.0/plans/get-features.md b/docs/versioned_docs/version-3.1.0/plans/get-features.md index b8db983f..ed65a49d 100644 --- a/docs/versioned_docs/version-3.1.0/plans/get-features.md +++ b/docs/versioned_docs/version-3.1.0/plans/get-features.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Currencies from ## Return Type -For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api#tag/Plans/operation/getPlanFeatures) +For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanFeatures) diff --git a/docs/versioned_docs/version-3.1.0/plans/get-one.md b/docs/versioned_docs/version-3.1.0/plans/get-one.md index c8f8a5c6..fc61bef6 100644 --- a/docs/versioned_docs/version-3.1.0/plans/get-one.md +++ b/docs/versioned_docs/version-3.1.0/plans/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to be returned ## Return Type -For more information about this request see our API documentation on [plan object](https://docs.salable.app/api#tag/Plans/operation/getPlanByUuid) +For more information about this request see our API documentation on [plan object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanByUuid) diff --git a/docs/versioned_docs/version-3.1.0/pricing-tables/get-one.md b/docs/versioned_docs/version-3.1.0/pricing-tables/get-one.md index 79163af5..6a6b22af 100644 --- a/docs/versioned_docs/version-3.1.0/pricing-tables/get-one.md +++ b/docs/versioned_docs/version-3.1.0/pricing-tables/get-one.md @@ -103,4 +103,4 @@ const pricingTable = await salable.pricingTables.getOne('{{PRICING_TABLE_UUID}}' ## Return Type -For more information about this request see our API documentation on [Pricing Table](https://docs.salable.app/api#tag/Pricing-Tables/operation/getPricingTableByUuid) +For more information about this request see our API documentation on [Pricing Table](https://docs.salable.app/api/v2#tag/Pricing-Tables/operation/getPricingTableByUuid) diff --git a/docs/versioned_docs/version-3.1.0/products/get-all.md b/docs/versioned_docs/version-3.1.0/products/get-all.md index a2f62cf0..55dd1567 100644 --- a/docs/versioned_docs/version-3.1.0/products/get-all.md +++ b/docs/versioned_docs/version-3.1.0/products/get-all.md @@ -18,4 +18,4 @@ const products = await salable.products.getAll(); ## Return Type -For more information about this request see our API documentation on [Product Object](https://docs.salable.app/api#tag/Products/operation/getProductByUuid) +For more information about this request see our API documentation on [Product Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductByUuid) diff --git a/docs/versioned_docs/version-3.1.0/products/get-capabilities.md b/docs/versioned_docs/version-3.1.0/products/get-capabilities.md index 669c5cc2..fd77c04d 100644 --- a/docs/versioned_docs/version-3.1.0/products/get-capabilities.md +++ b/docs/versioned_docs/version-3.1.0/products/get-capabilities.md @@ -18,4 +18,4 @@ const currencies = await salable.products.getCapabilities(); ## Return Type -For more information about this request see our API documentation on [Capability Object](https://docs.salable.app/api#tag/Products/operation/getProductCapabilities) +For more information about this request see our API documentation on [Capability Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductCapabilities) diff --git a/docs/versioned_docs/version-3.1.0/products/get-currencies.md b/docs/versioned_docs/version-3.1.0/products/get-currencies.md index 588e09d2..ca1fadfd 100644 --- a/docs/versioned_docs/version-3.1.0/products/get-currencies.md +++ b/docs/versioned_docs/version-3.1.0/products/get-currencies.md @@ -18,4 +18,4 @@ const currencies = await salable.products.getCurrencies(); ## Return Type -For more information about this request see our API documentation on [Product Currency Object](https://docs.salable.app/api#tag/Products/operation/getProductCurrencies) +For more information about this request see our API documentation on [Product Currency Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductCurrencies) diff --git a/docs/versioned_docs/version-3.1.0/products/get-features.md b/docs/versioned_docs/version-3.1.0/products/get-features.md index ac40368e..b222b67e 100644 --- a/docs/versioned_docs/version-3.1.0/products/get-features.md +++ b/docs/versioned_docs/version-3.1.0/products/get-features.md @@ -18,4 +18,4 @@ const features = await salable.products.getFeatures(); ## Return Type -For more information about this request see our API documentation on [Feature Object](https://docs.salable.app/api#tag/Products/operation/getProductFeatures) +For more information about this request see our API documentation on [Feature Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductFeatures) diff --git a/docs/versioned_docs/version-3.1.0/products/get-one.md b/docs/versioned_docs/version-3.1.0/products/get-one.md index 84cfd0ec..86b9f698 100644 --- a/docs/versioned_docs/version-3.1.0/products/get-one.md +++ b/docs/versioned_docs/version-3.1.0/products/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Product to be returned ## Return Type -For more information about this request see our API documentation on [product object](https://docs.salable.app/api#tag/Products/operation/getProductByUuid) +For more information about this request see our API documentation on [product object](https://docs.salable.app/api/v2#tag/Products/operation/getProductByUuid) diff --git a/docs/versioned_docs/version-3.1.0/products/get-plans.md b/docs/versioned_docs/version-3.1.0/products/get-plans.md index df3016af..f1e1acb7 100644 --- a/docs/versioned_docs/version-3.1.0/products/get-plans.md +++ b/docs/versioned_docs/version-3.1.0/products/get-plans.md @@ -18,4 +18,4 @@ const plans = await salable.products.getPlans(); ## Return Type -For more information about this request see our API documentation on [Plan Object](https://docs.salable.app/api#tag/Plans/operation/getPlanByUuid) +For more information about this request see our API documentation on [Plan Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanByUuid) diff --git a/docs/versioned_docs/version-3.1.0/products/get-pricing-table.md b/docs/versioned_docs/version-3.1.0/products/get-pricing-table.md index 21e75b11..472bac25 100644 --- a/docs/versioned_docs/version-3.1.0/products/get-pricing-table.md +++ b/docs/versioned_docs/version-3.1.0/products/get-pricing-table.md @@ -103,8 +103,8 @@ const pricingTable = await salable.products.getPricingTable('{{PRODUCT_UUID}}', ## Return Type -For more information about this request see our API documentation on [Pricing Table](https://docs.salable.app/api#tag/Pricing-Tables/operation/getPricingTableByUuid) +For more information about this request see our API documentation on [Pricing Table](https://docs.salable.app/api/v2#tag/Pricing-Tables/operation/getPricingTableByUuid) ## Return Type -For more information about this request see our API documentation on [Product Pricing Table](https://docs.salable.app/api#tag/Products/operation/getProductPricingTable) +For more information about this request see our API documentation on [Product Pricing Table](https://docs.salable.app/api/v2#tag/Products/operation/getProductPricingTable) diff --git a/docs/versioned_docs/version-3.1.0/subscriptions/change-plan.md b/docs/versioned_docs/version-3.1.0/subscriptions/change-plan.md index 099b4f83..eaf80bb8 100644 --- a/docs/versioned_docs/version-3.1.0/subscriptions/change-plan.md +++ b/docs/versioned_docs/version-3.1.0/subscriptions/change-plan.md @@ -37,4 +37,4 @@ _Type:_ `SubscriptionsChangePlanBody` ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-3.1.0/subscriptions/get-one.md b/docs/versioned_docs/version-3.1.0/subscriptions/get-one.md index 7dfadcd9..87ee8e98 100644 --- a/docs/versioned_docs/version-3.1.0/subscriptions/get-one.md +++ b/docs/versioned_docs/version-3.1.0/subscriptions/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Subscription to be returned ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-3.1.0/subscriptions/update-plan.md b/docs/versioned_docs/version-3.1.0/subscriptions/update-plan.md index 3fcf26f4..642060d5 100644 --- a/docs/versioned_docs/version-3.1.0/subscriptions/update-plan.md +++ b/docs/versioned_docs/version-3.1.0/subscriptions/update-plan.md @@ -35,4 +35,4 @@ The `uuid` of the Subscription that is being moved ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-3.2.0/licenses/cancel-many.md b/docs/versioned_docs/version-3.2.0/licenses/cancel-many.md index ed666eb9..a1cf0998 100644 --- a/docs/versioned_docs/version-3.2.0/licenses/cancel-many.md +++ b/docs/versioned_docs/version-3.2.0/licenses/cancel-many.md @@ -26,4 +26,4 @@ _Type:_ `string[]` ## Return Type -For more information about this request see our API documentation on [cancel many Licenses](https://docs.salable.app/api#tag/Licenses/operation/cancelLicenses) +For more information about this request see our API documentation on [cancel many Licenses](https://docs.salable.app/api/v2#tag/Licenses/operation/cancelLicenses) diff --git a/docs/versioned_docs/version-3.2.0/licenses/cancel.md b/docs/versioned_docs/version-3.2.0/licenses/cancel.md index 27a16b68..36c647d6 100644 --- a/docs/versioned_docs/version-3.2.0/licenses/cancel.md +++ b/docs/versioned_docs/version-3.2.0/licenses/cancel.md @@ -26,4 +26,4 @@ _Type:_ `string` ## Return Type -For more information about this request see our API documentation on [cancel License](https://docs.salable.app/api#tag/Licenses/operation/cancelLicense) +For more information about this request see our API documentation on [cancel License](https://docs.salable.app/api/v2#tag/Licenses/operation/cancelLicense) diff --git a/docs/versioned_docs/version-3.2.0/licenses/check.md b/docs/versioned_docs/version-3.2.0/licenses/check.md index 98561d63..88f78086 100644 --- a/docs/versioned_docs/version-3.2.0/licenses/check.md +++ b/docs/versioned_docs/version-3.2.0/licenses/check.md @@ -42,4 +42,4 @@ The number of days to extend the end dates of capabilities ## Return Type -For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseCheck) +For more information about this request see our API documentation on [License Check Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseCheck) diff --git a/docs/versioned_docs/version-3.2.0/licenses/create.md b/docs/versioned_docs/version-3.2.0/licenses/create.md index 1e06d847..da40cf22 100644 --- a/docs/versioned_docs/version-3.2.0/licenses/create.md +++ b/docs/versioned_docs/version-3.2.0/licenses/create.md @@ -69,4 +69,4 @@ The grantee ID for the license ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.2.0/licenses/get-all.md b/docs/versioned_docs/version-3.2.0/licenses/get-all.md index 9518e1b3..cebdce75 100644 --- a/docs/versioned_docs/version-3.2.0/licenses/get-all.md +++ b/docs/versioned_docs/version-3.2.0/licenses/get-all.md @@ -18,4 +18,4 @@ const licenses = await salable.licenses.getAll(); ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.2.0/licenses/get-count.md b/docs/versioned_docs/version-3.2.0/licenses/get-count.md index ab9f54a0..b6a6cd4d 100644 --- a/docs/versioned_docs/version-3.2.0/licenses/get-count.md +++ b/docs/versioned_docs/version-3.2.0/licenses/get-count.md @@ -32,4 +32,4 @@ The `status` of the license to filter by ## Return Type -For more information about this request see our API documentation on [License count](https://docs.salable.app/api#tag/Licenses/operation/getLicensesCount) +For more information about this request see our API documentation on [License count](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicensesCount) diff --git a/docs/versioned_docs/version-3.2.0/licenses/get-for-granteeId.md b/docs/versioned_docs/version-3.2.0/licenses/get-for-granteeId.md index 33ee51d2..8197647d 100644 --- a/docs/versioned_docs/version-3.2.0/licenses/get-for-granteeId.md +++ b/docs/versioned_docs/version-3.2.0/licenses/get-for-granteeId.md @@ -26,4 +26,4 @@ The grantee ID of the licenses ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.2.0/licenses/get-for-purchaser.md b/docs/versioned_docs/version-3.2.0/licenses/get-for-purchaser.md index 74d618d0..21eee05d 100644 --- a/docs/versioned_docs/version-3.2.0/licenses/get-for-purchaser.md +++ b/docs/versioned_docs/version-3.2.0/licenses/get-for-purchaser.md @@ -40,4 +40,4 @@ _Type:_ `LicenseGetByPurchaserOptions` ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.2.0/licenses/get-one.md b/docs/versioned_docs/version-3.2.0/licenses/get-one.md index ae31006c..804b3030 100644 --- a/docs/versioned_docs/version-3.2.0/licenses/get-one.md +++ b/docs/versioned_docs/version-3.2.0/licenses/get-one.md @@ -18,4 +18,4 @@ const license = await salable.licenses.getOne('{{LICENSE_UUID}}'); ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.2.0/licenses/get-usage-on-license.md b/docs/versioned_docs/version-3.2.0/licenses/get-usage-on-license.md index 753a076e..9ad9cbb8 100644 --- a/docs/versioned_docs/version-3.2.0/licenses/get-usage-on-license.md +++ b/docs/versioned_docs/version-3.2.0/licenses/get-usage-on-license.md @@ -26,4 +26,4 @@ The `uuid` of the license ## Return Type -For more information about this request see our API documentation on [License Object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [License Object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.2.0/licenses/update-many.md b/docs/versioned_docs/version-3.2.0/licenses/update-many.md index 72d07d2e..f97836b6 100644 --- a/docs/versioned_docs/version-3.2.0/licenses/update-many.md +++ b/docs/versioned_docs/version-3.2.0/licenses/update-many.md @@ -41,4 +41,4 @@ The value of the new granteeId. To un-assign a license set the `granteeId` to `n ## Return Type -For more information about this request see our API documentation on [licenses object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [licenses object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.2.0/licenses/update.md b/docs/versioned_docs/version-3.2.0/licenses/update.md index d71868f6..6cd60836 100644 --- a/docs/versioned_docs/version-3.2.0/licenses/update.md +++ b/docs/versioned_docs/version-3.2.0/licenses/update.md @@ -37,4 +37,4 @@ The value of the new granteeId. To un-assign the license set the `granteeId` to ## Return Type -For more information about this request see our API documentation on [license object](https://docs.salable.app/api#tag/Licenses/operation/getLicenseByUuid) +For more information about this request see our API documentation on [license object](https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid) diff --git a/docs/versioned_docs/version-3.2.0/plans/get-capabilities.md b/docs/versioned_docs/version-3.2.0/plans/get-capabilities.md index 92fa53c2..edabfd6d 100644 --- a/docs/versioned_docs/version-3.2.0/plans/get-capabilities.md +++ b/docs/versioned_docs/version-3.2.0/plans/get-capabilities.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Features from ## Return Type -For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCapabilities) +For more information about this request see our API documentation on [Plan Capability Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCapabilities) diff --git a/docs/versioned_docs/version-3.2.0/plans/get-checkout-link.md b/docs/versioned_docs/version-3.2.0/plans/get-checkout-link.md index aceba507..7947b9dc 100644 --- a/docs/versioned_docs/version-3.2.0/plans/get-checkout-link.md +++ b/docs/versioned_docs/version-3.2.0/plans/get-checkout-link.md @@ -112,4 +112,4 @@ See [code example](#vat-paddle-only) with VAT parameters ## Return Type -For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api#tag/Plans/operation/getPlanCheckoutLink) +For more information about this request see our API documentation on [Plan checkout link](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCheckoutLink) diff --git a/docs/versioned_docs/version-3.2.0/plans/get-currencies.md b/docs/versioned_docs/version-3.2.0/plans/get-currencies.md index 6fd90d15..9b4845da 100644 --- a/docs/versioned_docs/version-3.2.0/plans/get-currencies.md +++ b/docs/versioned_docs/version-3.2.0/plans/get-currencies.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Currencies from ## Return Type -For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api#tag/Plans/operation/getPlanCurrencies) +For more information about this request see our API documentation on [Plan Currency Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCurrencies) diff --git a/docs/versioned_docs/version-3.2.0/plans/get-features.md b/docs/versioned_docs/version-3.2.0/plans/get-features.md index b8db983f..ed65a49d 100644 --- a/docs/versioned_docs/version-3.2.0/plans/get-features.md +++ b/docs/versioned_docs/version-3.2.0/plans/get-features.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Currencies from ## Return Type -For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api#tag/Plans/operation/getPlanFeatures) +For more information about this request see our API documentation on [Plan Feature Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanFeatures) diff --git a/docs/versioned_docs/version-3.2.0/plans/get-one.md b/docs/versioned_docs/version-3.2.0/plans/get-one.md index 1b4f1fce..85864fec 100644 --- a/docs/versioned_docs/version-3.2.0/plans/get-one.md +++ b/docs/versioned_docs/version-3.2.0/plans/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Plan to return the Currencies from ## Return Type -For more information about this request see our API documentation on [plan object](https://docs.salable.app/api#tag/Plans/operation/getPlanByUuid) +For more information about this request see our API documentation on [plan object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanByUuid) diff --git a/docs/versioned_docs/version-3.2.0/pricing-tables/get-one.md b/docs/versioned_docs/version-3.2.0/pricing-tables/get-one.md index dfed20ec..15eba44c 100644 --- a/docs/versioned_docs/version-3.2.0/pricing-tables/get-one.md +++ b/docs/versioned_docs/version-3.2.0/pricing-tables/get-one.md @@ -179,4 +179,4 @@ See [code example](#individual-plans) for individual plans ## Return Type -For more information about this request see our API documentation on [Pricing Table](https://docs.salable.app/api#tag/Pricing-Tables/operation/getPricingTableByUuid) +For more information about this request see our API documentation on [Pricing Table](https://docs.salable.app/api/v2#tag/Pricing-Tables/operation/getPricingTableByUuid) diff --git a/docs/versioned_docs/version-3.2.0/products/get-all.md b/docs/versioned_docs/version-3.2.0/products/get-all.md index a2f62cf0..55dd1567 100644 --- a/docs/versioned_docs/version-3.2.0/products/get-all.md +++ b/docs/versioned_docs/version-3.2.0/products/get-all.md @@ -18,4 +18,4 @@ const products = await salable.products.getAll(); ## Return Type -For more information about this request see our API documentation on [Product Object](https://docs.salable.app/api#tag/Products/operation/getProductByUuid) +For more information about this request see our API documentation on [Product Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductByUuid) diff --git a/docs/versioned_docs/version-3.2.0/products/get-capabilities.md b/docs/versioned_docs/version-3.2.0/products/get-capabilities.md index 669c5cc2..fd77c04d 100644 --- a/docs/versioned_docs/version-3.2.0/products/get-capabilities.md +++ b/docs/versioned_docs/version-3.2.0/products/get-capabilities.md @@ -18,4 +18,4 @@ const currencies = await salable.products.getCapabilities(); ## Return Type -For more information about this request see our API documentation on [Capability Object](https://docs.salable.app/api#tag/Products/operation/getProductCapabilities) +For more information about this request see our API documentation on [Capability Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductCapabilities) diff --git a/docs/versioned_docs/version-3.2.0/products/get-currencies.md b/docs/versioned_docs/version-3.2.0/products/get-currencies.md index 588e09d2..ca1fadfd 100644 --- a/docs/versioned_docs/version-3.2.0/products/get-currencies.md +++ b/docs/versioned_docs/version-3.2.0/products/get-currencies.md @@ -18,4 +18,4 @@ const currencies = await salable.products.getCurrencies(); ## Return Type -For more information about this request see our API documentation on [Product Currency Object](https://docs.salable.app/api#tag/Products/operation/getProductCurrencies) +For more information about this request see our API documentation on [Product Currency Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductCurrencies) diff --git a/docs/versioned_docs/version-3.2.0/products/get-features.md b/docs/versioned_docs/version-3.2.0/products/get-features.md index ac40368e..b222b67e 100644 --- a/docs/versioned_docs/version-3.2.0/products/get-features.md +++ b/docs/versioned_docs/version-3.2.0/products/get-features.md @@ -18,4 +18,4 @@ const features = await salable.products.getFeatures(); ## Return Type -For more information about this request see our API documentation on [Feature Object](https://docs.salable.app/api#tag/Products/operation/getProductFeatures) +For more information about this request see our API documentation on [Feature Object](https://docs.salable.app/api/v2#tag/Products/operation/getProductFeatures) diff --git a/docs/versioned_docs/version-3.2.0/products/get-one.md b/docs/versioned_docs/version-3.2.0/products/get-one.md index 84cfd0ec..86b9f698 100644 --- a/docs/versioned_docs/version-3.2.0/products/get-one.md +++ b/docs/versioned_docs/version-3.2.0/products/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Product to be returned ## Return Type -For more information about this request see our API documentation on [product object](https://docs.salable.app/api#tag/Products/operation/getProductByUuid) +For more information about this request see our API documentation on [product object](https://docs.salable.app/api/v2#tag/Products/operation/getProductByUuid) diff --git a/docs/versioned_docs/version-3.2.0/products/get-plans.md b/docs/versioned_docs/version-3.2.0/products/get-plans.md index df3016af..f1e1acb7 100644 --- a/docs/versioned_docs/version-3.2.0/products/get-plans.md +++ b/docs/versioned_docs/version-3.2.0/products/get-plans.md @@ -18,4 +18,4 @@ const plans = await salable.products.getPlans(); ## Return Type -For more information about this request see our API documentation on [Plan Object](https://docs.salable.app/api#tag/Plans/operation/getPlanByUuid) +For more information about this request see our API documentation on [Plan Object](https://docs.salable.app/api/v2#tag/Plans/operation/getPlanByUuid) diff --git a/docs/versioned_docs/version-3.2.0/products/get-pricing-table.md b/docs/versioned_docs/version-3.2.0/products/get-pricing-table.md index 43d27863..0cf5f489 100644 --- a/docs/versioned_docs/version-3.2.0/products/get-pricing-table.md +++ b/docs/versioned_docs/version-3.2.0/products/get-pricing-table.md @@ -179,4 +179,4 @@ See [code example](#individual-plans) for individual plans ## Return Type -For more information about this request see our API documentation on [Product Pricing Table](https://docs.salable.app/api#tag/Products/operation/getProductPricingTable) +For more information about this request see our API documentation on [Product Pricing Table](https://docs.salable.app/api/v2#tag/Products/operation/getProductPricingTable) diff --git a/docs/versioned_docs/version-3.2.0/subscriptions/change-plan.md b/docs/versioned_docs/version-3.2.0/subscriptions/change-plan.md index 099b4f83..eaf80bb8 100644 --- a/docs/versioned_docs/version-3.2.0/subscriptions/change-plan.md +++ b/docs/versioned_docs/version-3.2.0/subscriptions/change-plan.md @@ -37,4 +37,4 @@ _Type:_ `SubscriptionsChangePlanBody` ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-3.2.0/subscriptions/get-one.md b/docs/versioned_docs/version-3.2.0/subscriptions/get-one.md index 7dfadcd9..87ee8e98 100644 --- a/docs/versioned_docs/version-3.2.0/subscriptions/get-one.md +++ b/docs/versioned_docs/version-3.2.0/subscriptions/get-one.md @@ -26,4 +26,4 @@ The `uuid` of the Subscription to be returned ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/docs/versioned_docs/version-3.2.0/subscriptions/update-plan.md b/docs/versioned_docs/version-3.2.0/subscriptions/update-plan.md index d96102bc..7dfffdfa 100644 --- a/docs/versioned_docs/version-3.2.0/subscriptions/update-plan.md +++ b/docs/versioned_docs/version-3.2.0/subscriptions/update-plan.md @@ -37,4 +37,4 @@ The `uuid` of the Subscription that is being moved ## Return Type -For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api#tag/Subscriptions/operation/getSubscriptionByUuid) +For more information about this request see our API documentation on [Subscription Object](https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid) diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..de8ecf0e --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,22 @@ +import globals from 'globals'; +import pluginJs from '@eslint/js'; +import tseslint from 'typescript-eslint'; + +export default [ + { files: ['**/*.{js,mjs,cjs,ts}'] }, + { + ignores: [ + 'dist/*', + '.docusaurus/*', + 'build/*', + 'docs/*', + 'rollup.config.mjs', + 'jest.config.js', + 'commitlint.config.js', + "coverage" + ] + }, + { languageOptions: { globals: globals.browser } }, + pluginJs.configs.recommended, + ...tseslint.configs.recommended +]; \ No newline at end of file diff --git a/global.d.ts b/global.d.ts index fbe5bf50..389f041f 100644 --- a/global.d.ts +++ b/global.d.ts @@ -1 +1,2 @@ import 'jest-fetch-mock'; +import 'jest-extended'; diff --git a/jest.config.js b/jest.config.js index 2754aed8..a7229f8b 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,25 +1,7 @@ module.exports = { - preset: 'ts-jest', - moduleNameMapper: { - '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': - '/__mocks__/fileMock.js', - '\\.(css|less|scss)$': 'identity-obj-proxy', - '^@/(.*)$': '/$1', - }, - testMatch: ['**/*.(spec|test).{ts,tsx}'], - transform: { - '^.+\\.tsx?$': 'ts-jest', - }, - collectCoverageFrom: [ - '**/*.{ts,tsx}', - '!**/*stories.{ts,tsx}', - '!**/node_modules/**', - '!**/dist/**', - '!**/.storybook/**', - '!**/index.{ts,tsx}', - '!**/styled.ts', - '!**/assets/**', - ], + testTimeout: 30000, + testEnvironment: 'node', + collectCoverageFrom: ['/src/**/*.ts'], coverageThreshold: { global: { branches: 0, @@ -28,8 +10,23 @@ module.exports = { statements: 0, }, }, - modulePathIgnorePatterns: ['./dist'], - globals: { - diagnostics: false, + testMatch: ['/src/**/*.test.ts'], + transform: { + '^.+\\.ts$': [ + 'ts-jest', + { + useESM: true, + isolatedModules: true, + }, + ], + }, + extensionsToTreatAsEsm: ['.ts'], + moduleFileExtensions: ['node', 'js', 'ts'], + transformIgnorePatterns: ['/node_modules/'], + moduleDirectories: ['node_modules', ''], + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', }, + globalSetup: '/__tests__/_setup/setup-test-envs.ts', + setupFilesAfterEnv: ['/__tests__/_setup/test-setup.ts'], }; diff --git a/package-lock.json b/package-lock.json index ca5f1bcd..ff61808f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,387 +1,927 @@ { "name": "@salable/node-sdk", - "version": "3.3.0", - "lockfileVersion": 2, + "version": "3.4.1", + "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@salable/node-sdk", - "version": "3.3.0", + "version": "3.4.1", "license": "MIT", - "dependencies": { - "@sentry/node": "^7.81.1", - "uuid": "^9.0.0" - }, "devDependencies": { + "@aws-sdk/client-kms": "^3.682.0", "@commitlint/cli": "^17.1.2", "@commitlint/config-conventional": "^17.1.0", - "@rollup/plugin-commonjs": "^23.0.2", + "@eslint/js": "^9.13.0", + "@prisma/client": "^5.21.1", + "@rollup/plugin-commonjs": "^28.0.0", + "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.1", "@semantic-release/changelog": "^6.0.1", "@semantic-release/git": "^10.0.1", - "@types/isomorphic-fetch": "^0.0.36", - "@types/jest": "^28.1.8", - "@types/jsrsasign": "^10.5.14", - "@types/node": "^18.11.9", - "@types/uuid": "^9.0.1", - "@typescript-eslint/eslint-plugin": "^5.37.0", + "@sentry/node": "^7.81.1", + "@types/jest": "^29.5.13", + "@types/node": "^22.7.0", + "@types/uuid": "^10.0.0", + "@typescript-eslint/eslint-plugin": "^8.7.0", + "date-fns": "^4.1.0", "dotenv": "^16.3.1", - "eslint": "8.23.1", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.5.3", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jest": "^26.9.0", - "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-unused-imports": "^2.0.0", - "husky": "^8.0.1", - "isomorphic-fetch": "^3.0.0", - "jest": "^28.1.3", + "eslint": "^9.13.0", + "eslint-plugin-jest": "^28.8.3", + "globals": "^15.11.0", + "husky": "^9.1.6", + "jest": "^29.7.0", + "jest-extended": "^4.0.2", "jest-fetch-mock": "^3.0.3", - "jsrsasign": "^11.1.0", - "lint-staged": "^13.0.3", - "prettier": "^2.7.1", - "rollup": "^3.2.5", + "lint-staged": "^15.2.10", + "prettier": "^3.3.3", + "prisma": "^5.21.1", + "rollup": "4.22.4", "rollup-plugin-cleaner": "^1.0.0", - "rollup-plugin-json": "^4.0.0", "rollup-plugin-peer-deps-external": "^2.2.4", - "rollup-plugin-typescript2": "^0.34.1", - "semantic-release": "^19.0.5", - "ts-jest": "^28.0.8", - "typescript": "^4.8.3" + "rollup-plugin-typescript2": "^0.36.0", + "semantic-release": "^24.1.1", + "stripe": "^14.18.0", + "ts-jest": "^29.2.5", + "typescript": "^5.6.2", + "typescript-eslint": "^8.10.0", + "uuid": "^9.0.1" + }, + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "4.22.4" } }, "node_modules/@ampproject/remapping": { - "version": "2.2.0", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/highlight": "^7.18.6" + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/compat-data": { - "version": "7.20.1", + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dev": true, - "license": "MIT", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/core": { - "version": "7.19.6", + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dev": true, - "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helpers": "^7.19.4", - "@babel/parser": "^7.19.6", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "dev": true, + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "dev": true, - "bin": { - "json5": "lib/cli.js" + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "dependencies": { + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">=14.0.0" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@babel/generator": { - "version": "7.20.1", + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.20.0", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=14.0.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", + "node_modules/@aws-sdk/client-kms": { + "version": "3.699.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.699.0.tgz", + "integrity": "sha512-YrUMb0JX0XBfBxUaeSu7TTTvVOpbaSmAHhvC0nYF9haagaJJpCoUXgCCeRJF6ZVjesda+mDN3OktRsfIIsCmeA==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.699.0", + "@aws-sdk/client-sts": "3.699.0", + "@aws-sdk/core": "3.696.0", + "@aws-sdk/credential-provider-node": "3.699.0", + "@aws-sdk/middleware-host-header": "3.696.0", + "@aws-sdk/middleware-logger": "3.696.0", + "@aws-sdk/middleware-recursion-detection": "3.696.0", + "@aws-sdk/middleware-user-agent": "3.696.0", + "@aws-sdk/region-config-resolver": "3.696.0", + "@aws-sdk/types": "3.696.0", + "@aws-sdk/util-endpoints": "3.696.0", + "@aws-sdk/util-user-agent-browser": "3.696.0", + "@aws-sdk/util-user-agent-node": "3.696.0", + "@smithy/config-resolver": "^3.0.12", + "@smithy/core": "^2.5.3", + "@smithy/fetch-http-handler": "^4.1.1", + "@smithy/hash-node": "^3.0.10", + "@smithy/invalid-dependency": "^3.0.10", + "@smithy/middleware-content-length": "^3.0.12", + "@smithy/middleware-endpoint": "^3.2.3", + "@smithy/middleware-retry": "^3.0.27", + "@smithy/middleware-serde": "^3.0.10", + "@smithy/middleware-stack": "^3.0.10", + "@smithy/node-config-provider": "^3.1.11", + "@smithy/node-http-handler": "^3.3.1", + "@smithy/protocol-http": "^4.1.7", + "@smithy/smithy-client": "^3.4.4", + "@smithy/types": "^3.7.1", + "@smithy/url-parser": "^3.0.10", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.27", + "@smithy/util-defaults-mode-node": "^3.0.27", + "@smithy/util-endpoints": "^2.1.6", + "@smithy/util-middleware": "^3.0.10", + "@smithy/util-retry": "^3.0.10", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.696.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.696.0.tgz", + "integrity": "sha512-q5TTkd08JS0DOkHfUL853tuArf7NrPeqoS5UOvqJho8ibV9Ak/a/HO4kNvy9Nj3cib/toHYHsQIEtecUPSUUrQ==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.696.0", + "@aws-sdk/middleware-host-header": "3.696.0", + "@aws-sdk/middleware-logger": "3.696.0", + "@aws-sdk/middleware-recursion-detection": "3.696.0", + "@aws-sdk/middleware-user-agent": "3.696.0", + "@aws-sdk/region-config-resolver": "3.696.0", + "@aws-sdk/types": "3.696.0", + "@aws-sdk/util-endpoints": "3.696.0", + "@aws-sdk/util-user-agent-browser": "3.696.0", + "@aws-sdk/util-user-agent-node": "3.696.0", + "@smithy/config-resolver": "^3.0.12", + "@smithy/core": "^2.5.3", + "@smithy/fetch-http-handler": "^4.1.1", + "@smithy/hash-node": "^3.0.10", + "@smithy/invalid-dependency": "^3.0.10", + "@smithy/middleware-content-length": "^3.0.12", + "@smithy/middleware-endpoint": "^3.2.3", + "@smithy/middleware-retry": "^3.0.27", + "@smithy/middleware-serde": "^3.0.10", + "@smithy/middleware-stack": "^3.0.10", + "@smithy/node-config-provider": "^3.1.11", + "@smithy/node-http-handler": "^3.3.1", + "@smithy/protocol-http": "^4.1.7", + "@smithy/smithy-client": "^3.4.4", + "@smithy/types": "^3.7.1", + "@smithy/url-parser": "^3.0.10", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.27", + "@smithy/util-defaults-mode-node": "^3.0.27", + "@smithy/util-endpoints": "^2.1.6", + "@smithy/util-middleware": "^3.0.10", + "@smithy/util-retry": "^3.0.10", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.699.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.699.0.tgz", + "integrity": "sha512-u8a1GorY5D1l+4FQAf4XBUC1T10/t7neuwT21r0ymrtMFSK2a9QqVHKMoLkvavAwyhJnARSBM9/UQC797PFOFw==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.696.0", + "@aws-sdk/credential-provider-node": "3.699.0", + "@aws-sdk/middleware-host-header": "3.696.0", + "@aws-sdk/middleware-logger": "3.696.0", + "@aws-sdk/middleware-recursion-detection": "3.696.0", + "@aws-sdk/middleware-user-agent": "3.696.0", + "@aws-sdk/region-config-resolver": "3.696.0", + "@aws-sdk/types": "3.696.0", + "@aws-sdk/util-endpoints": "3.696.0", + "@aws-sdk/util-user-agent-browser": "3.696.0", + "@aws-sdk/util-user-agent-node": "3.696.0", + "@smithy/config-resolver": "^3.0.12", + "@smithy/core": "^2.5.3", + "@smithy/fetch-http-handler": "^4.1.1", + "@smithy/hash-node": "^3.0.10", + "@smithy/invalid-dependency": "^3.0.10", + "@smithy/middleware-content-length": "^3.0.12", + "@smithy/middleware-endpoint": "^3.2.3", + "@smithy/middleware-retry": "^3.0.27", + "@smithy/middleware-serde": "^3.0.10", + "@smithy/middleware-stack": "^3.0.10", + "@smithy/node-config-provider": "^3.1.11", + "@smithy/node-http-handler": "^3.3.1", + "@smithy/protocol-http": "^4.1.7", + "@smithy/smithy-client": "^3.4.4", + "@smithy/types": "^3.7.1", + "@smithy/url-parser": "^3.0.10", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.27", + "@smithy/util-defaults-mode-node": "^3.0.27", + "@smithy/util-endpoints": "^2.1.6", + "@smithy/util-middleware": "^3.0.10", + "@smithy/util-retry": "^3.0.10", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.699.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.699.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.699.0.tgz", + "integrity": "sha512-++lsn4x2YXsZPIzFVwv3fSUVM55ZT0WRFmPeNilYIhZClxHLmVAWKH4I55cY9ry60/aTKYjzOXkWwyBKGsGvQg==", + "dev": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.699.0", + "@aws-sdk/core": "3.696.0", + "@aws-sdk/credential-provider-node": "3.699.0", + "@aws-sdk/middleware-host-header": "3.696.0", + "@aws-sdk/middleware-logger": "3.696.0", + "@aws-sdk/middleware-recursion-detection": "3.696.0", + "@aws-sdk/middleware-user-agent": "3.696.0", + "@aws-sdk/region-config-resolver": "3.696.0", + "@aws-sdk/types": "3.696.0", + "@aws-sdk/util-endpoints": "3.696.0", + "@aws-sdk/util-user-agent-browser": "3.696.0", + "@aws-sdk/util-user-agent-node": "3.696.0", + "@smithy/config-resolver": "^3.0.12", + "@smithy/core": "^2.5.3", + "@smithy/fetch-http-handler": "^4.1.1", + "@smithy/hash-node": "^3.0.10", + "@smithy/invalid-dependency": "^3.0.10", + "@smithy/middleware-content-length": "^3.0.12", + "@smithy/middleware-endpoint": "^3.2.3", + "@smithy/middleware-retry": "^3.0.27", + "@smithy/middleware-serde": "^3.0.10", + "@smithy/middleware-stack": "^3.0.10", + "@smithy/node-config-provider": "^3.1.11", + "@smithy/node-http-handler": "^3.3.1", + "@smithy/protocol-http": "^4.1.7", + "@smithy/smithy-client": "^3.4.4", + "@smithy/types": "^3.7.1", + "@smithy/url-parser": "^3.0.10", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.27", + "@smithy/util-defaults-mode-node": "^3.0.27", + "@smithy/util-endpoints": "^2.1.6", + "@smithy/util-middleware": "^3.0.10", + "@smithy/util-retry": "^3.0.10", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.696.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.696.0.tgz", + "integrity": "sha512-3c9III1k03DgvRZWg8vhVmfIXPG6hAciN9MzQTzqGngzWAELZF/WONRTRQuDFixVtarQatmLHYVw/atGeA2Byw==", + "dev": true, + "dependencies": { + "@aws-sdk/types": "3.696.0", + "@smithy/core": "^2.5.3", + "@smithy/node-config-provider": "^3.1.11", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.7", + "@smithy/signature-v4": "^4.2.2", + "@smithy/smithy-client": "^3.4.4", + "@smithy/types": "^3.7.1", + "@smithy/util-middleware": "^3.0.10", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.696.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.696.0.tgz", + "integrity": "sha512-T9iMFnJL7YTlESLpVFT3fg1Lkb1lD+oiaIC8KMpepb01gDUBIpj9+Y+pA/cgRWW0yRxmkDXNazAE2qQTVFGJzA==", + "dev": true, + "dependencies": { + "@aws-sdk/core": "3.696.0", + "@aws-sdk/types": "3.696.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.696.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.696.0.tgz", + "integrity": "sha512-GV6EbvPi2eq1+WgY/o2RFA3P7HGmnkIzCNmhwtALFlqMroLYWKE7PSeHw66Uh1dFQeVESn0/+hiUNhu1mB0emA==", + "dev": true, + "dependencies": { + "@aws-sdk/core": "3.696.0", + "@aws-sdk/types": "3.696.0", + "@smithy/fetch-http-handler": "^4.1.1", + "@smithy/node-http-handler": "^3.3.1", + "@smithy/property-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.7", + "@smithy/smithy-client": "^3.4.4", + "@smithy/types": "^3.7.1", + "@smithy/util-stream": "^3.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.699.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.699.0.tgz", + "integrity": "sha512-dXmCqjJnKmG37Q+nLjPVu22mNkrGHY8hYoOt3Jo9R2zr5MYV7s/NHsCHr+7E+BZ+tfZYLRPeB1wkpTeHiEcdRw==", + "dev": true, + "dependencies": { + "@aws-sdk/core": "3.696.0", + "@aws-sdk/credential-provider-env": "3.696.0", + "@aws-sdk/credential-provider-http": "3.696.0", + "@aws-sdk/credential-provider-process": "3.696.0", + "@aws-sdk/credential-provider-sso": "3.699.0", + "@aws-sdk/credential-provider-web-identity": "3.696.0", + "@aws-sdk/types": "3.696.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.699.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.699.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.699.0.tgz", + "integrity": "sha512-MmEmNDo1bBtTgRmdNfdQksXu4uXe66s0p1hi1YPrn1h59Q605eq/xiWbGL6/3KdkViH6eGUuABeV2ODld86ylg==", "dev": true, - "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@aws-sdk/credential-provider-env": "3.696.0", + "@aws-sdk/credential-provider-http": "3.696.0", + "@aws-sdk/credential-provider-ini": "3.699.0", + "@aws-sdk/credential-provider-process": "3.696.0", + "@aws-sdk/credential-provider-sso": "3.699.0", + "@aws-sdk/credential-provider-web-identity": "3.696.0", + "@aws-sdk/types": "3.696.0", + "@smithy/credential-provider-imds": "^3.2.6", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.696.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.696.0.tgz", + "integrity": "sha512-mL1RcFDe9sfmyU5K1nuFkO8UiJXXxLX4JO1gVaDIOvPqwStpUAwi3A1BoeZhWZZNQsiKI810RnYGo0E0WB/hUA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" + "@aws-sdk/core": "3.696.0", + "@aws-sdk/types": "3.696.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.699.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.699.0.tgz", + "integrity": "sha512-Ekp2cZG4pl9D8+uKWm4qO1xcm8/MeiI8f+dnlZm8aQzizeC+aXYy9GyoclSf6daK8KfRPiRfM7ZHBBL5dAfdMA==", + "dev": true, + "dependencies": { + "@aws-sdk/client-sso": "3.696.0", + "@aws-sdk/core": "3.696.0", + "@aws-sdk/token-providers": "3.699.0", + "@aws-sdk/types": "3.696.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.696.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.696.0.tgz", + "integrity": "sha512-XJ/CVlWChM0VCoc259vWguFUjJDn/QwDqHwbx+K9cg3v6yrqXfK5ai+p/6lx0nQpnk4JzPVeYYxWRpaTsGC9rg==", + "dev": true, + "dependencies": { + "@aws-sdk/core": "3.696.0", + "@aws-sdk/types": "3.696.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@aws-sdk/client-sts": "^3.696.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.696.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.696.0.tgz", + "integrity": "sha512-zELJp9Ta2zkX7ELggMN9qMCgekqZhFC5V2rOr4hJDEb/Tte7gpfKSObAnw/3AYiVqt36sjHKfdkoTsuwGdEoDg==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "@aws-sdk/types": "3.696.0", + "@smithy/protocol-http": "^4.1.7", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.696.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.696.0.tgz", + "integrity": "sha512-KhkHt+8AjCxcR/5Zp3++YPJPpFQzxpr+jmONiT/Jw2yqnSngZ0Yspm5wGoRx2hS1HJbyZNuaOWEGuJoxLeBKfA==", "dev": true, - "license": "MIT", + "dependencies": { + "@aws-sdk/types": "3.696.0", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.19.0", + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.696.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.696.0.tgz", + "integrity": "sha512-si/maV3Z0hH7qa99f9ru2xpS5HlfSVcasRlNUXKSDm611i7jFMWwGNLUOXFAOLhXotPX5G3Z6BLwL34oDeBMug==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@aws-sdk/types": "3.696.0", + "@smithy/protocol-http": "^4.1.7", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.696.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.696.0.tgz", + "integrity": "sha512-Lvyj8CTyxrHI6GHd2YVZKIRI5Fmnugt3cpJo0VrKKEgK5zMySwEZ1n4dqPK6czYRWKd5+WnYHYAuU+Wdk6Jsjw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.18.6" + "@aws-sdk/core": "3.696.0", + "@aws-sdk/types": "3.696.0", + "@aws-sdk/util-endpoints": "3.696.0", + "@smithy/core": "^2.5.3", + "@smithy/protocol-http": "^4.1.7", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.696.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.696.0.tgz", + "integrity": "sha512-7EuH142lBXjI8yH6dVS/CZeiK/WZsmb/8zP6bQbVYpMrppSTgB3MzZZdxVZGzL5r8zPQOU10wLC4kIMy0qdBVQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.18.6" + "@aws-sdk/types": "3.696.0", + "@smithy/node-config-provider": "^3.1.11", + "@smithy/types": "^3.7.1", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.10", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.19.6", + "node_modules/@aws-sdk/token-providers": { + "version": "3.699.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.699.0.tgz", + "integrity": "sha512-kuiEW9DWs7fNos/SM+y58HCPhcIzm1nEZLhe2/7/6+TvAYLuEWURYsbK48gzsxXlaJ2k/jGY3nIsA7RptbMOwA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.19.4", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4" + "@aws-sdk/types": "3.696.0", + "@smithy/property-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.10", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.699.0" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.19.0", + "node_modules/@aws-sdk/types": { + "version": "3.696.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.696.0.tgz", + "integrity": "sha512-9rTvUJIAj5d3//U5FDPWGJ1nFJLuWb30vugGOrWk7aNZ6y9tuA3PI7Cc9dP8WEXKVyK1vuuk8rSFP2iqXnlgrw==", "dev": true, - "license": "MIT", + "dependencies": { + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.19.4", + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.696.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.696.0.tgz", + "integrity": "sha512-T5s0IlBVX+gkb9g/I6CLt4yAZVzMSiGnbUqWihWsHvQR1WOoIcndQy/Oz/IJXT9T2ipoy7a80gzV6a5mglrioA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.19.4" + "@aws-sdk/types": "3.696.0", + "@smithy/types": "^3.7.1", + "@smithy/util-endpoints": "^2.1.6", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.693.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.693.0.tgz", + "integrity": "sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.18.6" + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.696.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.696.0.tgz", + "integrity": "sha512-Z5rVNDdmPOe6ELoM5AhF/ja5tSjbe6ctSctDPb0JdDf4dT0v2MfwhJKzXju2RzX8Es/77Glh7MlaXLE0kCB9+Q==", "dev": true, - "license": "MIT", + "dependencies": { + "@aws-sdk/types": "3.696.0", + "@smithy/types": "^3.7.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.696.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.696.0.tgz", + "integrity": "sha512-KhKqcfyXIB0SCCt+qsu4eJjsfiOrNzK5dCV7RAW2YIpp+msxGUUX0NdRE9rkzjiv+3EMktgJm3eEIS+yxtlVdQ==", + "dev": true, + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.696.0", + "@aws-sdk/types": "3.696.0", + "@smithy/node-config-provider": "^3.1.11", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, - "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", + "node_modules/@babel/compat-data": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz", + "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helpers": { - "version": "7.20.1", + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", + "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" + "@babel/parser": "^7.26.3", + "@babel/types": "^7.26.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.18.6", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "dev": true, - "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.20.1", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", "dev": true, - "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.3" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -391,8 +931,9 @@ }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -402,8 +943,9 @@ }, "node_modules/@babel/plugin-syntax-bigint": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -413,8 +955,9 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -422,21 +965,53 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-json-strings": { + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -444,10 +1019,26 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -457,8 +1048,9 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -468,8 +1060,9 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -479,8 +1072,9 @@ }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -490,8 +1084,9 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -501,8 +1096,9 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -510,10 +1106,26 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -525,11 +1137,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.20.0", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -539,32 +1152,31 @@ } }, "node_modules/@babel/template": { - "version": "7.18.10", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.1", + "version": "7.26.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", + "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.3", + "@babel/parser": "^7.26.3", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.3", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -573,20 +1185,21 @@ }, "node_modules/@babel/traverse/node_modules/globals": { "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/types": { - "version": "7.20.0", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -594,30 +1207,33 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true }, "node_modules/@colors/colors": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">=0.1.90" } }, "node_modules/@commitlint/cli": { - "version": "17.2.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.8.1.tgz", + "integrity": "sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==", "dev": true, - "license": "MIT", "dependencies": { - "@commitlint/format": "^17.0.0", - "@commitlint/lint": "^17.2.0", - "@commitlint/load": "^17.2.0", - "@commitlint/read": "^17.2.0", - "@commitlint/types": "^17.0.0", + "@commitlint/format": "^17.8.1", + "@commitlint/lint": "^17.8.1", + "@commitlint/load": "^17.8.1", + "@commitlint/read": "^17.8.1", + "@commitlint/types": "^17.8.1", "execa": "^5.0.0", - "lodash": "^4.17.19", + "lodash.isfunction": "^3.0.9", "resolve-from": "5.0.0", "resolve-global": "1.0.0", "yargs": "^17.0.0" @@ -629,61 +1245,25 @@ "node": ">=v14" } }, - "node_modules/@commitlint/cli/node_modules/cliui": { - "version": "8.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@commitlint/cli/node_modules/yargs": { - "version": "17.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@commitlint/cli/node_modules/yargs-parser": { - "version": "21.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, "node_modules/@commitlint/config-conventional": { - "version": "17.2.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.8.1.tgz", + "integrity": "sha512-NxCOHx1kgneig3VLauWJcDWS40DVjg7nKOpBEEK9E5fjJpQqLCilcnKkIIjdBH98kEO1q3NpE5NSrZ2kl/QGJg==", "dev": true, - "license": "MIT", "dependencies": { - "conventional-changelog-conventionalcommits": "^5.0.0" + "conventional-changelog-conventionalcommits": "^6.1.0" }, "engines": { "node": ">=v14" } }, "node_modules/@commitlint/config-validator": { - "version": "17.1.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.8.1.tgz", + "integrity": "sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==", "dev": true, - "license": "MIT", "dependencies": { - "@commitlint/types": "^17.0.0", + "@commitlint/types": "^17.8.1", "ajv": "^8.11.0" }, "engines": { @@ -691,164 +1271,136 @@ } }, "node_modules/@commitlint/ensure": { - "version": "17.0.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.8.1.tgz", + "integrity": "sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow==", "dev": true, - "license": "MIT", "dependencies": { - "@commitlint/types": "^17.0.0", - "lodash": "^4.17.19" + "@commitlint/types": "^17.8.1", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" }, "engines": { "node": ">=v14" } }, "node_modules/@commitlint/execute-rule": { - "version": "17.0.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.8.1.tgz", + "integrity": "sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=v14" } }, "node_modules/@commitlint/format": { - "version": "17.0.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.8.1.tgz", + "integrity": "sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg==", "dev": true, - "license": "MIT", "dependencies": { - "@commitlint/types": "^17.0.0", + "@commitlint/types": "^17.8.1", "chalk": "^4.1.0" }, "engines": { "node": ">=v14" } }, - "node_modules/@commitlint/format/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/@commitlint/is-ignored": { - "version": "17.2.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.8.1.tgz", + "integrity": "sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g==", "dev": true, - "license": "MIT", "dependencies": { - "@commitlint/types": "^17.0.0", - "semver": "7.3.7" + "@commitlint/types": "^17.8.1", + "semver": "7.5.4" }, "engines": { "node": ">=v14" } }, - "node_modules/@commitlint/is-ignored/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@commitlint/lint": { - "version": "17.2.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.8.1.tgz", + "integrity": "sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA==", "dev": true, - "license": "MIT", "dependencies": { - "@commitlint/is-ignored": "^17.2.0", - "@commitlint/parse": "^17.2.0", - "@commitlint/rules": "^17.2.0", - "@commitlint/types": "^17.0.0" + "@commitlint/is-ignored": "^17.8.1", + "@commitlint/parse": "^17.8.1", + "@commitlint/rules": "^17.8.1", + "@commitlint/types": "^17.8.1" }, "engines": { "node": ">=v14" } }, "node_modules/@commitlint/load": { - "version": "17.2.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.8.1.tgz", + "integrity": "sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==", "dev": true, - "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^17.1.0", - "@commitlint/execute-rule": "^17.0.0", - "@commitlint/resolve-extends": "^17.1.0", - "@commitlint/types": "^17.0.0", - "@types/node": "^14.0.0", + "@commitlint/config-validator": "^17.8.1", + "@commitlint/execute-rule": "^17.8.1", + "@commitlint/resolve-extends": "^17.8.1", + "@commitlint/types": "^17.8.1", + "@types/node": "20.5.1", "chalk": "^4.1.0", - "cosmiconfig": "^7.0.0", + "cosmiconfig": "^8.0.0", "cosmiconfig-typescript-loader": "^4.0.0", - "lodash": "^4.17.19", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0", "resolve-from": "^5.0.0", "ts-node": "^10.8.1", - "typescript": "^4.6.4" + "typescript": "^4.6.4 || ^5.2.2" }, "engines": { "node": ">=v14" } }, "node_modules/@commitlint/load/node_modules/@types/node": { - "version": "14.18.33", - "dev": true, - "license": "MIT" - }, - "node_modules/@commitlint/load/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } + "version": "20.5.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.1.tgz", + "integrity": "sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==", + "dev": true }, "node_modules/@commitlint/message": { - "version": "17.2.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.8.1.tgz", + "integrity": "sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA==", "dev": true, - "license": "MIT", "engines": { "node": ">=v14" } }, "node_modules/@commitlint/parse": { - "version": "17.2.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.8.1.tgz", + "integrity": "sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw==", "dev": true, - "license": "MIT", "dependencies": { - "@commitlint/types": "^17.0.0", - "conventional-changelog-angular": "^5.0.11", - "conventional-commits-parser": "^3.2.2" + "@commitlint/types": "^17.8.1", + "conventional-changelog-angular": "^6.0.0", + "conventional-commits-parser": "^4.0.0" }, "engines": { "node": ">=v14" } }, "node_modules/@commitlint/read": { - "version": "17.2.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.8.1.tgz", + "integrity": "sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w==", "dev": true, - "license": "MIT", "dependencies": { - "@commitlint/top-level": "^17.0.0", - "@commitlint/types": "^17.0.0", - "fs-extra": "^10.0.0", - "git-raw-commits": "^2.0.0", + "@commitlint/top-level": "^17.8.1", + "@commitlint/types": "^17.8.1", + "fs-extra": "^11.0.0", + "git-raw-commits": "^2.0.11", "minimist": "^1.2.6" }, "engines": { @@ -856,14 +1408,15 @@ } }, "node_modules/@commitlint/resolve-extends": { - "version": "17.1.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.8.1.tgz", + "integrity": "sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==", "dev": true, - "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^17.1.0", - "@commitlint/types": "^17.0.0", + "@commitlint/config-validator": "^17.8.1", + "@commitlint/types": "^17.8.1", "import-fresh": "^3.0.0", - "lodash": "^4.17.19", + "lodash.mergewith": "^4.6.2", "resolve-from": "^5.0.0", "resolve-global": "^1.0.0" }, @@ -872,14 +1425,15 @@ } }, "node_modules/@commitlint/rules": { - "version": "17.2.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.8.1.tgz", + "integrity": "sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA==", "dev": true, - "license": "MIT", "dependencies": { - "@commitlint/ensure": "^17.0.0", - "@commitlint/message": "^17.2.0", - "@commitlint/to-lines": "^17.0.0", - "@commitlint/types": "^17.0.0", + "@commitlint/ensure": "^17.8.1", + "@commitlint/message": "^17.8.1", + "@commitlint/to-lines": "^17.8.1", + "@commitlint/types": "^17.8.1", "execa": "^5.0.0" }, "engines": { @@ -887,17 +1441,19 @@ } }, "node_modules/@commitlint/to-lines": { - "version": "17.0.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.8.1.tgz", + "integrity": "sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA==", "dev": true, - "license": "MIT", "engines": { "node": ">=v14" } }, "node_modules/@commitlint/top-level": { - "version": "17.0.0", + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.8.1.tgz", + "integrity": "sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^5.0.0" }, @@ -905,109 +1461,125 @@ "node": ">=v14" } }, - "node_modules/@commitlint/top-level/node_modules/find-up": { - "version": "5.0.0", + "node_modules/@commitlint/types": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", + "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", "dev": true, - "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "chalk": "^4.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=v14" } }, - "node_modules/@commitlint/top-level/node_modules/locate-path": { - "version": "6.0.0", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, - "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/@commitlint/top-level/node_modules/p-limit": { - "version": "3.1.0", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, - "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@commitlint/top-level/node_modules/p-locate": { - "version": "5.0.0", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, - "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@commitlint/types": { - "version": "17.0.0", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", "dev": true, - "license": "MIT", "dependencies": { - "chalk": "^4.1.0" + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" }, "engines": { - "node": ">=v14" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@commitlint/types/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "*" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", + "node_modules/@eslint/core": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz", + "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==", "dev": true, - "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "@types/json-schema": "^7.0.15" }, "engines": { - "node": ">=12" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/eslintrc": { - "version": "1.3.3", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -1015,7 +1587,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -1023,8 +1595,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1036,39 +1609,106 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { - "version": "3.1.1", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.10.7", + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10.10.0" + "node": "*" } }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", + "node_modules/@eslint/js": { + "version": "9.16.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.16.0.tgz", + "integrity": "sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==", "dev": true, - "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz", + "integrity": "sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==", + "dev": true, + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "engines": { + "node": ">=18.18" + }, "funding": { "type": "github", "url": "https://github.com/sponsors/nzakas" @@ -1076,8 +1716,9 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -1086,15 +1727,24 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", "dev": true, - "license": "BSD-3-Clause" + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, - "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -1108,16 +1758,31 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -1126,82 +1791,108 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, "engines": { "node": ">=8" } }, - "node_modules/@jest/console": { - "version": "28.1.3", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/core": { - "version": "28.1.3", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/console": "^28.1.3", - "@jest/reporters": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^28.1.3", - "jest-config": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-resolve-dependencies": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "jest-watcher": "^28.1.3", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "rimraf": "^3.0.0", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -1212,123 +1903,90 @@ } } }, - "node_modules/@jest/core/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@jest/environment": { - "version": "28.1.3", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^28.1.3" + "jest-mock": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "28.1.3", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, - "license": "MIT", "dependencies": { - "expect": "^28.1.3", - "jest-snapshot": "^28.1.3" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "28.1.3", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, - "license": "MIT", "dependencies": { - "jest-get-type": "^28.0.2" + "jest-get-type": "^29.6.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "28.1.3", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^28.1.3", - "@sinonjs/fake-timers": "^9.1.2", + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "28.1.3", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/types": "^28.1.3" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "28.1.3", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, - "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", @@ -1336,21 +1994,20 @@ "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -1361,146 +2018,95 @@ } } }, - "node_modules/@jest/reporters/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/@jest/schemas": { - "version": "28.1.3", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, - "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.24.1" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/source-map": { - "version": "28.1.2", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, - "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.13", + "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", "graceful-fs": "^4.2.9" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/source-map/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-result": { - "version": "28.1.3", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-sequencer": { - "version": "28.1.3", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/test-result": "^28.1.3", + "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", + "jest-haste-map": "^29.7.0", "slash": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/transform": { - "version": "28.1.3", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/transform/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "write-file-atomic": "^4.0.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/types": { - "version": "28.1.3", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/schemas": "^28.1.3", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -1508,70 +2114,62 @@ "chalk": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, - "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true, - "license": "MIT" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "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==", "dev": true, - "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1582,16 +2180,18 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1601,247 +2201,308 @@ } }, "node_modules/@octokit/auth-token": { - "version": "3.0.2", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.1.tgz", + "integrity": "sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==", "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^8.0.0" - }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@octokit/core": { - "version": "4.1.0", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.2.tgz", + "integrity": "sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==", "dev": true, - "license": "MIT", "dependencies": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" + "@octokit/auth-token": "^5.0.0", + "@octokit/graphql": "^8.0.0", + "@octokit/request": "^9.0.0", + "@octokit/request-error": "^6.0.1", + "@octokit/types": "^13.0.0", + "before-after-hook": "^3.0.2", + "universal-user-agent": "^7.0.0" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@octokit/endpoint": { - "version": "7.0.3", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.1.tgz", + "integrity": "sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==", "dev": true, - "license": "MIT", "dependencies": { - "@octokit/types": "^8.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.2" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@octokit/graphql": { - "version": "5.0.4", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.1.1.tgz", + "integrity": "sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==", "dev": true, - "license": "MIT", "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "universal-user-agent": "^6.0.0" + "@octokit/request": "^9.0.0", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.0" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@octokit/openapi-types": { - "version": "14.0.0", - "dev": true, - "license": "MIT" + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", + "dev": true }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "5.0.1", + "version": "11.3.6", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.6.tgz", + "integrity": "sha512-zcvqqf/+TicbTCa/Z+3w4eBJcAxCFymtc0UAIsR3dEVoNilWld4oXdscQ3laXamTszUZdusw97K8+DrbFiOwjw==", "dev": true, - "license": "MIT", "dependencies": { - "@octokit/types": "^8.0.0" + "@octokit/types": "^13.6.2" }, "engines": { - "node": ">= 14" + "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=4" + "@octokit/core": ">=6" } }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", + "node_modules/@octokit/plugin-retry": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-7.1.2.tgz", + "integrity": "sha512-XOWnPpH2kJ5VTwozsxGurw+svB2e61aWlmk5EVIYZPwFK5F9h4cyPyj9CIKRyMXMHSwpIsI3mPOdpMmrRhe7UQ==", "dev": true, - "license": "MIT", + "dependencies": { + "@octokit/request-error": "^6.0.0", + "@octokit/types": "^13.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 18" + }, "peerDependencies": { - "@octokit/core": ">=3" + "@octokit/core": ">=6" } }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "6.7.0", + "node_modules/@octokit/plugin-throttling": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.3.2.tgz", + "integrity": "sha512-FqpvcTpIWFpMMwIeSoypoJXysSAQ3R+ALJhXXSG1HTP3YZOIeLmcNcimKaXxTcws+Sh6yoRl13SJ5r8sXc1Fhw==", "dev": true, - "license": "MIT", "dependencies": { - "@octokit/types": "^8.0.0", - "deprecation": "^2.3.1" + "@octokit/types": "^13.0.0", + "bottleneck": "^2.15.3" }, "engines": { - "node": ">= 14" + "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=3" + "@octokit/core": "^6.0.0" } }, "node_modules/@octokit/request": { - "version": "6.2.2", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.3.tgz", + "integrity": "sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==", "dev": true, - "license": "MIT", "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" + "@octokit/endpoint": "^10.0.0", + "@octokit/request-error": "^6.0.1", + "@octokit/types": "^13.1.0", + "universal-user-agent": "^7.0.2" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@octokit/request-error": { - "version": "3.0.2", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.5.tgz", + "integrity": "sha512-IlBTfGX8Yn/oFPMwSfvugfncK2EwRLjzbrpifNaMY8o/HTEAFqCA1FZxjD9cWvSKBHgrIhc4CSBIzMxiLsbzFQ==", "dev": true, - "license": "MIT", "dependencies": { - "@octokit/types": "^8.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" + "@octokit/types": "^13.0.0" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, - "node_modules/@octokit/rest": { - "version": "19.0.5", + "node_modules/@octokit/types": { + "version": "13.6.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.6.2.tgz", + "integrity": "sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==", "dev": true, - "license": "MIT", "dependencies": { - "@octokit/core": "^4.1.0", - "@octokit/plugin-paginate-rest": "^5.0.0", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^6.7.0" - }, + "@octokit/openapi-types": "^22.2.0" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "dev": true, "engines": { - "node": ">= 14" + "node": ">=12.22.0" } }, - "node_modules/@octokit/types": { - "version": "8.0.0", + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", "dev": true, - "license": "MIT", "dependencies": { - "@octokit/openapi-types": "^14.0.0" + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" } }, - "node_modules/@pkgr/utils": { + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/@pnpm/npm-conf": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", - "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "is-glob": "^4.0.3", - "open": "^8.4.0", - "picocolors": "^1.0.0", - "tiny-glob": "^0.2.9", - "tslib": "^2.4.0" + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" + "node": ">=12" } }, - "node_modules/@rollup/plugin-commonjs": { - "version": "23.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-23.0.2.tgz", - "integrity": "sha512-e9ThuiRf93YlVxc4qNIurvv+Hp9dnD+4PjOqQs5vAYfcZ3+AXSrcdzXnVjWxcGQOa6KGJFcRZyUI3ktWLavFjg==", + "node_modules/@prisma/client": { + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.22.0.tgz", + "integrity": "sha512-M0SVXfyHnQREBKxCgyo7sffrKttwE6R8PMq330MIUF0pTwjUhLbW84pFDlf06B27XyCR++VtjugEnIHdr07SVA==", "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "glob": "^8.0.3", - "is-reference": "1.2.1", - "magic-string": "^0.26.4" - }, + "hasInstallScript": true, "engines": { - "node": ">=14.0.0" + "node": ">=16.13" }, "peerDependencies": { - "rollup": "^2.68.0||^3.0.0" + "prisma": "*" }, "peerDependenciesMeta": { - "rollup": { + "prisma": { "optional": true } } }, - "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@prisma/debug": { + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.22.0.tgz", + "integrity": "sha512-AUt44v3YJeggO2ZU5BkXI7M4hu9BF2zzH2iF2V5pyXT/lRTyWiElZ7It+bRH1EshoMRxHgpYg4VB6rCM+mG5jQ==", + "dev": true + }, + "node_modules/@prisma/engines": { + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.22.0.tgz", + "integrity": "sha512-UNjfslWhAt06kVL3CjkuYpHAWSO6L4kDCVPegV6itt7nD1kSJavd3vhgAEhjglLJJKEdJ7oIqDJ+yHk6qO8gPA==", "dev": true, + "hasInstallScript": true, "dependencies": { - "balanced-match": "^1.0.0" + "@prisma/debug": "5.22.0", + "@prisma/engines-version": "5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2", + "@prisma/fetch-engine": "5.22.0", + "@prisma/get-platform": "5.22.0" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "node_modules/@prisma/engines-version": { + "version": "5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2.tgz", + "integrity": "sha512-2PTmxFR2yHW/eB3uqWtcgRcgAbG1rwG9ZriSvQw+nnb7c4uCr3RAcGMb6/zfE88SKlC1Nj2ziUvc96Z379mHgQ==", + "dev": true + }, + "node_modules/@prisma/fetch-engine": { + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.22.0.tgz", + "integrity": "sha512-bkrD/Mc2fSvkQBV5EpoFcZ87AvOgDxbG99488a5cexp5Ccny+UM6MAe/UFkUC0wLYD9+9befNOqGiIJhhq+HbA==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "@prisma/debug": "5.22.0", + "@prisma/engines-version": "5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2", + "@prisma/get-platform": "5.22.0" + } + }, + "node_modules/@prisma/get-platform": { + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.22.0.tgz", + "integrity": "sha512-pHhpQdr1UPFpt+zFfnPazhulaZYCUqeIcPpJViYoq9R+D/yw4fjE+CtnsnKzPYm0ddUbeXUzjGVGIRVgPDCk4Q==", + "dev": true, + "dependencies": { + "@prisma/debug": "5.22.0" + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "28.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.1.tgz", + "integrity": "sha512-+tNWdlWKbpB3WgBN7ijjYkq9X5uhjmcvyjEght4NmH5fAU++zfQzAJ6wumLS+dNcvwEZhKx2Z+skY8m7v0wGSA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "fdir": "^6.2.0", + "is-reference": "1.2.1", + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" }, "engines": { - "node": ">=12" + "node": ">=16.0.0 || 14 >= 14.17" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "@rollup/pluginutils": "^5.1.0" }, "engines": { - "node": ">=10" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", - "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.0.tgz", + "integrity": "sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.0", "is-module": "^1.0.0", "resolve": "^1.22.1" }, @@ -1849,7 +2510,7 @@ "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^2.78.0||^3.0.0" + "rollup": "^2.78.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { @@ -1858,19 +2519,19 @@ } }, "node_modules/@rollup/plugin-replace": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.1.tgz", - "integrity": "sha512-Z3MfsJ4CK17BfGrZgvrcp/l6WXoKb0kokULO+zt/7bmcyayokDaQ2K3eDJcRLCTAlp5FPI4/gz9MHAsosz4Rag==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.7.tgz", + "integrity": "sha512-PqxSfuorkHz/SPpyngLyg5GCEkOcee9M1bkxiVDr41Pd61mqP1PLOoDPbpl44SB2mQGKwV/In74gqQmGITOhEQ==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.1", - "magic-string": "^0.26.4" + "magic-string": "^0.30.3" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { @@ -1879,20 +2540,20 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.3.tgz", + "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==", "dev": true, "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "picomatch": "^4.0.2" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { @@ -1900,14 +2561,46 @@ } } }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true + }, "node_modules/@semantic-release/changelog": { - "version": "6.0.1", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", + "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", "dev": true, - "license": "MIT", "dependencies": { "@semantic-release/error": "^3.0.0", "aggregate-error": "^3.0.0", - "fs-extra": "^9.0.0", + "fs-extra": "^11.0.0", "lodash": "^4.17.4" }, "engines": { @@ -1917,52 +2610,81 @@ "semantic-release": ">=18.0.0" } }, - "node_modules/@semantic-release/changelog/node_modules/fs-extra": { - "version": "9.1.0", + "node_modules/@semantic-release/commit-analyzer": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-13.0.0.tgz", + "integrity": "sha512-KtXWczvTAB1ZFZ6B4O+w8HkfYm/OgQb1dUGNFZtDgQ0csggrmkq8sTxhd+lwGF8kMb59/RnG9o4Tn7M/I8dQ9Q==", "dev": true, - "license": "MIT", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "conventional-changelog-angular": "^8.0.0", + "conventional-changelog-writer": "^8.0.0", + "conventional-commits-filter": "^5.0.0", + "conventional-commits-parser": "^6.0.0", + "debug": "^4.0.0", + "import-from-esm": "^1.0.3", + "lodash-es": "^4.17.21", + "micromatch": "^4.0.2" }, "engines": { - "node": ">=10" + "node": ">=20.8.1" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" } }, - "node_modules/@semantic-release/commit-analyzer": { - "version": "9.0.2", + "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-changelog-angular": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.0.0.tgz", + "integrity": "sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==", "dev": true, - "license": "MIT", "dependencies": { - "conventional-changelog-angular": "^5.0.0", - "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.2.3", - "debug": "^4.0.0", - "import-from": "^4.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.2" + "compare-func": "^2.0.0" }, "engines": { - "node": ">=14.17" + "node": ">=18" + } + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-commits-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.0.0.tgz", + "integrity": "sha512-TbsINLp48XeMXR8EvGjTnKGsZqBemisPoyWESlpRyR8lif0lcwzqz+NMtYSj1ooF/WYjSuu7wX0CtdeeMEQAmA==", + "dev": true, + "dependencies": { + "meow": "^13.0.0" }, - "peerDependencies": { - "semantic-release": ">=18.0.0-beta.1" + "bin": { + "conventional-commits-parser": "dist/cli/index.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@semantic-release/error": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.17" } }, "node_modules/@semantic-release/git": { "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", + "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", "dev": true, - "license": "MIT", "dependencies": { "@semantic-release/error": "^3.0.0", "aggregate-error": "^3.0.0", @@ -1981,1689 +2703,1986 @@ } }, "node_modules/@semantic-release/github": { - "version": "8.0.6", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-11.0.1.tgz", + "integrity": "sha512-Z9cr0LgU/zgucbT9cksH0/pX9zmVda9hkDPcgIE0uvjMQ8w/mElDivGjx1w1pEQ+MuQJ5CBq3VCF16S6G4VH3A==", "dev": true, - "license": "MIT", "dependencies": { - "@octokit/rest": "^19.0.0", - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "bottleneck": "^2.18.1", - "debug": "^4.0.0", - "dir-glob": "^3.0.0", - "fs-extra": "^10.0.0", - "globby": "^11.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "issue-parser": "^6.0.0", - "lodash": "^4.17.4", - "mime": "^3.0.0", - "p-filter": "^2.0.0", - "p-retry": "^4.0.0", - "url-join": "^4.0.0" + "@octokit/core": "^6.0.0", + "@octokit/plugin-paginate-rest": "^11.0.0", + "@octokit/plugin-retry": "^7.0.0", + "@octokit/plugin-throttling": "^9.0.0", + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^5.0.0", + "debug": "^4.3.4", + "dir-glob": "^3.0.1", + "globby": "^14.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "issue-parser": "^7.0.0", + "lodash-es": "^4.17.21", + "mime": "^4.0.0", + "p-filter": "^4.0.0", + "url-join": "^5.0.0" }, "engines": { - "node": ">=14.17" + "node": ">=20.8.1" }, "peerDependencies": { - "semantic-release": ">=18.0.0-beta.1" + "semantic-release": ">=24.1.0" } }, - "node_modules/@semantic-release/npm": { - "version": "9.0.1", + "node_modules/@semantic-release/github/node_modules/@semantic-release/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@semantic-release/github/node_modules/aggregate-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", + "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, - "license": "MIT", "dependencies": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "execa": "^5.0.0", - "fs-extra": "^10.0.0", - "lodash": "^4.17.15", - "nerf-dart": "^1.0.0", - "normalize-url": "^6.0.0", - "npm": "^8.3.0", - "rc": "^1.2.8", - "read-pkg": "^5.0.0", - "registry-auth-token": "^4.0.0", - "semver": "^7.1.2", - "tempy": "^1.0.0" + "clean-stack": "^5.2.0", + "indent-string": "^5.0.0" }, "engines": { - "node": ">=16 || ^14.17" + "node": ">=18" }, - "peerDependencies": { - "semantic-release": ">=19.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/release-notes-generator": { - "version": "10.0.3", + "node_modules/@semantic-release/github/node_modules/clean-stack": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.2.0.tgz", + "integrity": "sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==", "dev": true, - "license": "MIT", "dependencies": { - "conventional-changelog-angular": "^5.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.2.3", - "debug": "^4.0.0", - "get-stream": "^6.0.0", - "import-from": "^4.0.0", - "into-stream": "^6.0.0", - "lodash": "^4.17.4", - "read-pkg-up": "^7.0.0" + "escape-string-regexp": "5.0.0" }, "engines": { - "node": ">=14.17" + "node": ">=14.16" }, - "peerDependencies": { - "semantic-release": ">=18.0.0-beta.1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@sentry-internal/tracing": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.81.1.tgz", - "integrity": "sha512-E5xm27xrLXL10knH2EWDQsQYh5nb4SxxZzJ3sJwDGG9XGKzBdlp20UUhKqx00wixooVX9uCj3e4Jg8SvNB1hKg==", - "dependencies": { - "@sentry/core": "7.81.1", - "@sentry/types": "7.81.1", - "@sentry/utils": "7.81.1" + "node_modules/@semantic-release/github/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/github/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@sentry/core": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.81.1.tgz", - "integrity": "sha512-tU37yAmckOGCw/moWKSwekSCWWJP15O6luIq+u7wal22hE88F3Vc5Avo8SeF3upnPR+4ejaOFH+BJTr6bgrs6Q==", + "node_modules/@semantic-release/npm": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-12.0.1.tgz", + "integrity": "sha512-/6nntGSUGK2aTOI0rHPwY3ZjgY9FkXmEHbW9Kr+62NVOsyqpKKeP0lrCH+tphv+EsNdJNmqqwijTEnVWUMQ2Nw==", + "dev": true, "dependencies": { - "@sentry/types": "7.81.1", - "@sentry/utils": "7.81.1" + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^5.0.0", + "execa": "^9.0.0", + "fs-extra": "^11.0.0", + "lodash-es": "^4.17.21", + "nerf-dart": "^1.0.0", + "normalize-url": "^8.0.0", + "npm": "^10.5.0", + "rc": "^1.2.8", + "read-pkg": "^9.0.0", + "registry-auth-token": "^5.0.0", + "semver": "^7.1.2", + "tempy": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=20.8.1" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" } }, - "node_modules/@sentry/node": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.81.1.tgz", - "integrity": "sha512-bKS3Mb95bar8AUEZSLKQ/RTSfFXo5sCSPNiBr5dDFuVljDFdkLq6NE3svG5bisrbENqfi0bqWsB4GZ7NHRTPbA==", - "dependencies": { - "@sentry-internal/tracing": "7.81.1", - "@sentry/core": "7.81.1", - "@sentry/types": "7.81.1", - "@sentry/utils": "7.81.1", - "https-proxy-agent": "^5.0.0" - }, + "node_modules/@semantic-release/npm/node_modules/@semantic-release/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/@sentry/types": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.81.1.tgz", - "integrity": "sha512-dvJvGyctiaPMIQqa46k56Re5IODWMDxiHJ1UjBs/WYDLrmWFPGrEbyJ8w8CYLhYA+7qqrCyIZmHbWSTRIxstHw==", + "node_modules/@semantic-release/npm/node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@sentry/utils": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.81.1.tgz", - "integrity": "sha512-gq+MDXIirHKxNZ+c9/lVvCXd6y2zaZANujwlFggRH2u9SRiPaIXVilLpvMm4uJqmqBMEcY81ArujExtHvkbCqg==", + "node_modules/@semantic-release/npm/node_modules/aggregate-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", + "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", + "dev": true, "dependencies": { - "@sentry/types": "7.81.1" + "clean-stack": "^5.2.0", + "indent-string": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@sinclair/typebox": { - "version": "0.24.51", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", + "node_modules/@semantic-release/npm/node_modules/clean-stack": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.2.0.tgz", + "integrity": "sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "type-detect": "4.0.8" + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "9.1.2", + "node_modules/@semantic-release/npm/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.7.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", + "node_modules/@semantic-release/npm/node_modules/execa": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.2.tgz", + "integrity": "sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==", "dev": true, - "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.3", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.0", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.0.0" + }, "engines": { - "node": ">= 10" + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/babel__core": { - "version": "7.1.19", + "node_modules/@semantic-release/npm/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", + "node_modules/@semantic-release/npm/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.0.0" + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@types/babel__template": { - "version": "7.4.1", + "node_modules/@semantic-release/npm/node_modules/human-signals": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.0.tgz", + "integrity": "sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "engines": { + "node": ">=18.18.0" } }, - "node_modules/@types/babel__traverse": { - "version": "7.18.2", + "node_modules/@semantic-release/npm/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.3.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true + "node_modules/@semantic-release/npm/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", + "node_modules/@semantic-release/npm/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/isomorphic-fetch": { - "version": "0.0.36", - "resolved": "https://registry.npmjs.org/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.36.tgz", - "integrity": "sha512-ulw4d+vW1HKn4oErSmNN2HYEcHGq0N1C5exlrMM0CRqX1UUpFhGb5lwiom5j9KN3LBJJDLRmYIZz1ghm7FIzZw==", + "node_modules/@semantic-release/npm/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", + "node_modules/@semantic-release/npm/node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dev": true, - "license": "MIT", "dependencies": { - "@types/istanbul-lib-coverage": "*" + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", + "node_modules/@semantic-release/npm/node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", "dev": true, - "license": "MIT", "dependencies": { - "@types/istanbul-lib-report": "*" + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/jest": { - "version": "28.1.8", + "node_modules/@semantic-release/npm/node_modules/npm-run-path/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^28.0.0", - "pretty-format": "^28.0.0" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/jsrsasign": { - "version": "10.5.14", - "resolved": "https://registry.npmjs.org/@types/jsrsasign/-/jsrsasign-10.5.14.tgz", - "integrity": "sha512-lppSlfK6etu+cuKs40K4rg8As79PH6hzIB+v55zSqImbSH3SE6Fm8MBHCiI91cWlAP3Z4igtJK1VL3fSN09blQ==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", + "node_modules/@semantic-release/npm/node_modules/parse-json": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz", + "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", "dev": true, - "license": "MIT" + "dependencies": { + "@babel/code-frame": "^7.22.13", + "index-to-position": "^0.1.2", + "type-fest": "^4.7.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@types/parse-json": { + "node_modules/@semantic-release/npm/node_modules/path-key": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/prettier": { - "version": "2.7.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/semver": { - "version": "7.3.13", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "dev": true, - "license": "MIT" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@types/uuid": { + "node_modules/@semantic-release/npm/node_modules/read-pkg": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.13", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", + "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", "dev": true, - "license": "MIT", "dependencies": { - "@types/yargs-parser": "*" + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", + "node_modules/@semantic-release/npm/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.42.0", + "node_modules/@semantic-release/npm/node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "5.42.0", - "@typescript-eslint/type-utils": "5.42.0", - "@typescript-eslint/utils": "5.42.0", - "debug": "^4.3.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/type-fest": { + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.0.tgz", + "integrity": "sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==", + "dev": true, + "engines": { + "node": ">=16" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.42.0", + "node_modules/@semantic-release/release-notes-generator": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-14.0.1.tgz", + "integrity": "sha512-K0w+5220TM4HZTthE5dDpIuFrnkN1NfTGPidJFm04ULT1DEZ9WG89VNXN7F0c+6nMEpWgqmPvb7vY7JkB2jyyA==", "dev": true, - "license": "BSD-2-Clause", - "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.42.0", - "@typescript-eslint/types": "5.42.0", - "@typescript-eslint/typescript-estree": "5.42.0", - "debug": "^4.3.4" + "conventional-changelog-angular": "^8.0.0", + "conventional-changelog-writer": "^8.0.0", + "conventional-commits-filter": "^5.0.0", + "conventional-commits-parser": "^6.0.0", + "debug": "^4.0.0", + "get-stream": "^7.0.0", + "import-from-esm": "^1.0.3", + "into-stream": "^7.0.0", + "lodash-es": "^4.17.21", + "read-package-up": "^11.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=20.8.1" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "semantic-release": ">=20.1.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.42.0", + "node_modules/@semantic-release/release-notes-generator/node_modules/conventional-changelog-angular": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.0.0.tgz", + "integrity": "sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.42.0", - "@typescript-eslint/visitor-keys": "5.42.0" + "compare-func": "^2.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=18" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.42.0", + "node_modules/@semantic-release/release-notes-generator/node_modules/conventional-commits-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.0.0.tgz", + "integrity": "sha512-TbsINLp48XeMXR8EvGjTnKGsZqBemisPoyWESlpRyR8lif0lcwzqz+NMtYSj1ooF/WYjSuu7wX0CtdeeMEQAmA==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "5.42.0", - "@typescript-eslint/utils": "5.42.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "meow": "^13.0.0" + }, + "bin": { + "conventional-commits-parser": "dist/cli/index.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/get-stream": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", + "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", + "dev": true, + "engines": { + "node": ">=16" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/types": { - "version": "5.42.0", + "node_modules/@semantic-release/release-notes-generator/node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, - "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.42.0", + "node_modules/@sentry-internal/tracing": { + "version": "7.120.1", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.120.1.tgz", + "integrity": "sha512-MwZlhQY27oM4V05m2Q46WB2F7jqFu8fewg14yRcjCuK3tdxvQoLsXOEPMZxLxpoXPTqPCm3Ig7mA4GwdlCL41w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "5.42.0", - "@typescript-eslint/visitor-keys": "5.42.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@sentry/core": "7.120.1", + "@sentry/types": "7.120.1", + "@sentry/utils": "7.120.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=8" } }, - "node_modules/@typescript-eslint/utils": { - "version": "5.42.0", + "node_modules/@sentry/core": { + "version": "7.120.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.120.1.tgz", + "integrity": "sha512-tXpJlf/8ngsSCpcRD+4DDvh4TqUbY0MlvE9Mpc/jO5GgYl/goAH2H1COw6W/UNfkr/l80P2jejS0HLPk0moi0A==", "dev": true, - "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.42.0", - "@typescript-eslint/types": "5.42.0", - "@typescript-eslint/typescript-estree": "5.42.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" + "@sentry/types": "7.120.1", + "@sentry/utils": "7.120.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" + } + }, + "node_modules/@sentry/integrations": { + "version": "7.120.1", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.120.1.tgz", + "integrity": "sha512-dshhLZUN+pYpyZiS5QRYKaYSqvWYtmsbwmBlH4SCGOnN9sbY4nZn0h8njr+xKT8UFnPxoTlbZmkcrVY3qPVMfg==", + "dev": true, + "dependencies": { + "@sentry/core": "7.120.1", + "@sentry/types": "7.120.1", + "@sentry/utils": "7.120.1", + "localforage": "^1.8.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/node": { + "version": "7.120.1", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.120.1.tgz", + "integrity": "sha512-YF/TDUCtUOQeUMwL4vcUWGNv/8Qz9624xBnaL8nXW888xNBoSRr2vH/zMrmTup5zfmWAh9lVbp98BZFF6F0WJg==", + "dev": true, + "dependencies": { + "@sentry-internal/tracing": "7.120.1", + "@sentry/core": "7.120.1", + "@sentry/integrations": "7.120.1", + "@sentry/types": "7.120.1", + "@sentry/utils": "7.120.1" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.42.0", + "node_modules/@sentry/types": { + "version": "7.120.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.120.1.tgz", + "integrity": "sha512-f/WT7YUH8SA2Jhez/hYz/dA351AJqr1Eht/URUdYsqMFecXr/blAcNKRVFccSsvQeTqWVV9HVQ9BXUSjPJOvFA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils": { + "version": "7.120.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.120.1.tgz", + "integrity": "sha512-4boeo5Y3zw3gFrWZmPHsYOIlTh//eBaGBgWL25FqLbLObO23gFE86G6O6knP1Gamm1DGX2IWH7w4MChYuBm6tA==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.42.0", - "eslint-visitor-keys": "^3.3.0" + "@sentry/types": "7.120.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/acorn": { - "version": "8.8.1", + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "dependencies": { + "type-detect": "4.0.8" } }, - "node_modules/acorn-walk": { - "version": "8.2.0", + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" + "dependencies": { + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "license": "MIT", + "node_modules/@smithy/abort-controller": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.8.tgz", + "integrity": "sha512-+3DOBcUn5/rVjlxGvUPKc416SExarAQ+Qe0bqk30YSUjbepwpS7QN0cyKUSifvLJhdMZ0WPzPP5ymut0oonrpQ==", + "dev": true, "dependencies": { - "debug": "4" + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 6.0.0" + "node": ">=16.0.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", + "node_modules/@smithy/config-resolver": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.12.tgz", + "integrity": "sha512-YAJP9UJFZRZ8N+UruTeq78zkdjUHmzsY62J4qKWZ4SXB4QXJ/+680EfXXgkYA2xj77ooMqtUY9m406zGNqwivQ==", "dev": true, - "license": "MIT", "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "@smithy/node-config-provider": "^3.1.11", + "@smithy/types": "^3.7.1", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.10", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/ajv": { - "version": "8.11.0", + "node_modules/@smithy/core": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.5.4.tgz", + "integrity": "sha512-iFh2Ymn2sCziBRLPuOOxRPkuCx/2gBdXtBGuCUFLUe6bWYjKnhHyIPqGeNkLZ5Aco/5GjebRTBFiWID3sDbrKw==", "dev": true, - "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "@smithy/middleware-serde": "^3.0.10", + "@smithy/protocol-http": "^4.1.7", + "@smithy/types": "^3.7.1", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.10", + "@smithy/util-stream": "^3.3.1", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/ansi-escapes": { - "version": "5.0.0", + "node_modules/@smithy/credential-provider-imds": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.7.tgz", + "integrity": "sha512-cEfbau+rrWF8ylkmmVAObOmjbTIzKyUC5TkBL58SbLywD0RCBC4JAUKbmtSm2w5KUJNRPGgpGFMvE2FKnuNlWQ==", "dev": true, - "license": "MIT", "dependencies": { - "type-fest": "^1.0.2" + "@smithy/node-config-provider": "^3.1.11", + "@smithy/property-provider": "^3.1.10", + "@smithy/types": "^3.7.1", + "@smithy/url-parser": "^3.0.10", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16.0.0" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/@smithy/fetch-http-handler": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.1.tgz", + "integrity": "sha512-bH7QW0+JdX0bPBadXt8GwMof/jz0H28I84hU1Uet9ISpzUqXqRQ3fEZJ+ANPOhzSEczYvANNl3uDQDYArSFDtA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@smithy/protocol-http": "^4.1.7", + "@smithy/querystring-builder": "^3.0.10", + "@smithy/types": "^3.7.1", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@smithy/hash-node": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.10.tgz", + "integrity": "sha512-3zWGWCHI+FlJ5WJwx73Mw2llYR8aflVyZN5JhoqLxbdPZi6UyKSdCeXAWJw9ja22m6S6Tzz1KZ+kAaSwvydi0g==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@smithy/types": "^3.7.1", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/ansicolors": { - "version": "0.3.2", + "node_modules/@smithy/invalid-dependency": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.10.tgz", + "integrity": "sha512-Lp2L65vFi+cj0vFMu2obpPW69DU+6O5g3086lmI4XcnRCG8PxvpWC7XyaVwJCxsZFzueHjXnrOH/E0pl0zikfA==", "dev": true, - "license": "MIT" + "dependencies": { + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" + } }, - "node_modules/anymatch": { - "version": "3.1.2", + "node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "dev": true, - "license": "ISC", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "tslib": "^2.6.2" }, "engines": { - "node": ">= 8" + "node": ">=16.0.0" } }, - "node_modules/arg": { - "version": "4.1.3", + "node_modules/@smithy/middleware-content-length": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.12.tgz", + "integrity": "sha512-1mDEXqzM20yywaMDuf5o9ue8OkJ373lSPbaSjyEvkWdqELhFMyNNgKGWL/rCSf4KME8B+HlHKuR8u9kRj8HzEQ==", "dev": true, - "license": "MIT" + "dependencies": { + "@smithy/protocol-http": "^4.1.7", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } }, - "node_modules/argparse": { - "version": "2.0.1", + "node_modules/@smithy/middleware-endpoint": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.4.tgz", + "integrity": "sha512-TybiW2LA3kYVd3e+lWhINVu1o26KJbBwOpADnf0L4x/35vLVica77XVR5hvV9+kWeTGeSJ3IHTcYxbRxlbwhsg==", "dev": true, - "license": "Python-2.0" + "dependencies": { + "@smithy/core": "^2.5.4", + "@smithy/middleware-serde": "^3.0.10", + "@smithy/node-config-provider": "^3.1.11", + "@smithy/shared-ini-file-loader": "^3.1.11", + "@smithy/types": "^3.7.1", + "@smithy/url-parser": "^3.0.10", + "@smithy/util-middleware": "^3.0.10", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } }, - "node_modules/argv-formatter": { - "version": "1.0.0", + "node_modules/@smithy/middleware-retry": { + "version": "3.0.28", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.28.tgz", + "integrity": "sha512-vK2eDfvIXG1U64FEUhYxoZ1JSj4XFbYWkK36iz02i3pFwWiDz1Q7jKhGTBCwx/7KqJNk4VS7d7cDLXFOvP7M+g==", "dev": true, - "license": "MIT" + "dependencies": { + "@smithy/node-config-provider": "^3.1.11", + "@smithy/protocol-http": "^4.1.7", + "@smithy/service-error-classification": "^3.0.10", + "@smithy/smithy-client": "^3.4.5", + "@smithy/types": "^3.7.1", + "@smithy/util-middleware": "^3.0.10", + "@smithy/util-retry": "^3.0.10", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } }, - "node_modules/array-ify": { - "version": "1.0.0", + "node_modules/@smithy/middleware-serde": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.10.tgz", + "integrity": "sha512-MnAuhh+dD14F428ubSJuRnmRsfOpxSzvRhaGVTvd/lrUDE3kxzCCmH8lnVTvoNQnV2BbJ4c15QwZ3UdQBtFNZA==", "dev": true, - "license": "MIT" + "dependencies": { + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } }, - "node_modules/array-includes": { - "version": "3.1.5", + "node_modules/@smithy/middleware-stack": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.10.tgz", + "integrity": "sha512-grCHyoiARDBBGPyw2BeicpjgpsDFWZZxptbVKb3CRd/ZA15F/T6rZjCCuBUjJwdck1nwUuIxYtsS4H9DDpbP5w==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=16.0.0" } }, - "node_modules/array-union": { - "version": "2.1.0", + "node_modules/@smithy/node-config-provider": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.11.tgz", + "integrity": "sha512-URq3gT3RpDikh/8MBJUB+QGZzfS7Bm6TQTqoh4CqE8NBuyPkWa5eUXj0XFcFfeZVgg3WMh1u19iaXn8FvvXxZw==", "dev": true, - "license": "MIT", + "dependencies": { + "@smithy/property-provider": "^3.1.10", + "@smithy/shared-ini-file-loader": "^3.1.11", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.0", + "node_modules/@smithy/node-http-handler": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.1.tgz", + "integrity": "sha512-fr+UAOMGWh6bn4YSEezBCpJn9Ukp9oR4D32sCjCo7U81evE11YePOQ58ogzyfgmjIO79YeOdfXXqr0jyhPQeMg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" + "@smithy/abort-controller": "^3.1.8", + "@smithy/protocol-http": "^4.1.7", + "@smithy/querystring-builder": "^3.0.10", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=16.0.0" } }, - "node_modules/arrify": { - "version": "1.0.1", + "node_modules/@smithy/property-provider": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.10.tgz", + "integrity": "sha512-n1MJZGTorTH2DvyTVj+3wXnd4CzjJxyXeOgnTlgNVFxaaMeT4OteEp4QrzF8p9ee2yg42nvyVK6R/awLCakjeQ==", "dev": true, - "license": "MIT", + "dependencies": { + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">=16.0.0" } }, - "node_modules/astral-regex": { - "version": "2.0.0", + "node_modules/@smithy/protocol-http": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.7.tgz", + "integrity": "sha512-FP2LepWD0eJeOTm0SjssPcgqAlDFzOmRXqXmGhfIM52G7Lrox/pcpQf6RP4F21k0+O12zaqQt5fCDOeBtqY6Cg==", "dev": true, - "license": "MIT", + "dependencies": { + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/at-least-node": { - "version": "1.0.0", + "node_modules/@smithy/querystring-builder": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.10.tgz", + "integrity": "sha512-nT9CQF3EIJtIUepXQuBFb8dxJi3WVZS3XfuDksxSCSn+/CzZowRLdhDn+2acbBv8R6eaJqPupoI/aRFIImNVPQ==", "dev": true, - "license": "ISC", + "dependencies": { + "@smithy/types": "^3.7.1", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=16.0.0" } }, - "node_modules/babel-jest": { - "version": "28.1.3", + "node_modules/@smithy/querystring-parser": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.10.tgz", + "integrity": "sha512-Oa0XDcpo9SmjhiDD9ua2UyM3uU01ZTuIrNdZvzwUTykW1PM8o2yJvMh1Do1rY5sUQg4NDV70dMi0JhDx4GyxuQ==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/transform": "^28.1.3", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.1.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" + "node": ">=16.0.0" } }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@smithy/service-error-classification": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.10.tgz", + "integrity": "sha512-zHe642KCqDxXLuhs6xmHVgRwy078RfqxP2wRDpIyiF8EmsWXptMwnMwbVa50lw+WOGNrYm9zbaEg0oDe3PTtvQ==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@smithy/types": "^3.7.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", + "node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.11.tgz", + "integrity": "sha512-AUdrIZHFtUgmfSN4Gq9nHu3IkHMa1YDcN+s061Nfm+6pQ0mJy85YQDB0tZBCmls0Vuj22pLwDPmL92+Hvfwwlg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "28.1.3", + "node_modules/@smithy/signature-v4": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.3.tgz", + "integrity": "sha512-pPSQQ2v2vu9vc8iew7sszLd0O09I5TRc5zhY71KA+Ao0xYazIG+uLeHbTJfIWGO3BGVLiXjUr3EEeCcEQLjpWQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.7", + "@smithy/types": "^3.7.1", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.10", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=16.0.0" } }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", + "node_modules/@smithy/smithy-client": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.4.5.tgz", + "integrity": "sha512-k0sybYT9zlP79sIKd1XGm4TmK0AS1nA2bzDHXx7m0nGi3RQ8dxxQUs4CPkSmQTKAo+KF9aINU3KzpGIpV7UoMw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@smithy/core": "^2.5.4", + "@smithy/middleware-endpoint": "^3.2.4", + "@smithy/middleware-stack": "^3.0.10", + "@smithy/protocol-http": "^4.1.7", + "@smithy/types": "^3.7.1", + "@smithy/util-stream": "^3.3.1", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/babel-preset-jest": { - "version": "28.1.3", + "node_modules/@smithy/types": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.1.tgz", + "integrity": "sha512-XKLcLXZY7sUQgvvWyeaL/qwNPp6V3dWcUjqrQKjSb+tzYiCy340R/c64LV5j+Tnb2GhmunEX0eou+L+m2hJNYA==", "dev": true, - "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "^28.1.3", - "babel-preset-current-node-syntax": "^1.0.0" + "tslib": "^2.6.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=16.0.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", + "node_modules/@smithy/url-parser": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.10.tgz", + "integrity": "sha512-j90NUalTSBR2NaZTuruEgavSdh8MLirf58LoGSk4AtQfyIymogIhgnGUU2Mga2bkMkpSoC9gxb74xBXL5afKAQ==", "dev": true, - "license": "MIT" - }, - "node_modules/before-after-hook": { - "version": "2.2.3", - "dev": true, - "license": "Apache-2.0" + "dependencies": { + "@smithy/querystring-parser": "^3.0.10", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" + } }, - "node_modules/bottleneck": { - "version": "2.19.5", + "node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", "dev": true, - "license": "MIT" + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } }, - "node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/@smithy/util-body-length-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", "dev": true, - "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "tslib": "^2.6.2" } }, - "node_modules/braces": { - "version": "3.0.2", + "node_modules/@smithy/util-body-length-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", "dev": true, - "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/browserslist": { - "version": "4.21.4", + "node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - }, - "bin": { - "browserslist": "cli.js" + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=16.0.0" } }, - "node_modules/bs-logger": { - "version": "0.2.6", + "node_modules/@smithy/util-config-provider": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", "dev": true, - "license": "MIT", "dependencies": { - "fast-json-stable-stringify": "2.x" + "tslib": "^2.6.2" }, "engines": { - "node": ">= 6" + "node": ">=16.0.0" } }, - "node_modules/bser": { - "version": "2.1.1", + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "3.0.28", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.28.tgz", + "integrity": "sha512-6bzwAbZpHRFVJsOztmov5PGDmJYsbNSoIEfHSJJyFLzfBGCCChiO3od9k7E/TLgrCsIifdAbB9nqbVbyE7wRUw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "node-int64": "^0.4.0" + "@smithy/property-provider": "^3.1.10", + "@smithy/smithy-client": "^3.4.5", + "@smithy/types": "^3.7.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "node_modules/@smithy/util-defaults-mode-node": { + "version": "3.0.28", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.28.tgz", + "integrity": "sha512-78ENJDorV1CjOQselGmm3+z7Yqjj5HWCbjzh0Ixuq736dh1oEnD9sAttSBNSLlpZsX8VQnmERqA2fEFlmqWn8w==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "@smithy/config-resolver": "^3.0.12", + "@smithy/credential-provider-imds": "^3.2.7", + "@smithy/node-config-provider": "^3.1.11", + "@smithy/property-provider": "^3.1.10", + "@smithy/smithy-client": "^3.4.5", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/call-bind": { - "version": "1.0.2", + "node_modules/@smithy/util-endpoints": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.6.tgz", + "integrity": "sha512-mFV1t3ndBh0yZOJgWxO9J/4cHZVn5UG1D8DeCc6/echfNkeEJWu9LD7mgGH5fHrEdR7LDoWw7PQO6QiGpHXhgA==", "dev": true, - "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "@smithy/node-config-provider": "^3.1.11", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/callsites": { - "version": "3.1.0", + "node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "dev": true, - "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6" + "node": ">=16.0.0" } }, - "node_modules/camelcase": { - "version": "5.3.1", + "node_modules/@smithy/util-middleware": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.10.tgz", + "integrity": "sha512-eJO+/+RsrG2RpmY68jZdwQtnfsxjmPxzMlQpnHKjFPwrYqvlcT+fHdT+ZVwcjlWSrByOhGr9Ff2GG17efc192A==", "dev": true, - "license": "MIT", + "dependencies": { + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6" + "node": ">=16.0.0" } }, - "node_modules/camelcase-keys": { - "version": "6.2.2", + "node_modules/@smithy/util-retry": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.10.tgz", + "integrity": "sha512-1l4qatFp4PiU6j7UsbasUHL2VU023NRB/gfaa1M0rDqVrRN4g3mCArLRyH3OuktApA4ye+yjWQHjdziunw2eWA==", "dev": true, - "license": "MIT", "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "@smithy/service-error-classification": "^3.0.10", + "@smithy/types": "^3.7.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16.0.0" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001429", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/cardinal": { - "version": "2.1.1", + "node_modules/@smithy/util-stream": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.3.1.tgz", + "integrity": "sha512-Ff68R5lJh2zj+AUTvbAU/4yx+6QPRzg7+pI7M1FbtQHcRIp7xvguxVsQBKyB3fwiOwhAKu0lnNyYBaQfSW6TNw==", "dev": true, - "license": "MIT", "dependencies": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" + "@smithy/fetch-http-handler": "^4.1.1", + "@smithy/node-http-handler": "^3.3.1", + "@smithy/types": "^3.7.1", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, - "bin": { - "cdl": "bin/cdl.js" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/chalk": { - "version": "5.1.2", + "node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "dependencies": { + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/char-regex": { - "version": "1.0.2", + "node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "dev": true, - "license": "MIT", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=10" + "node": ">=16.0.0" } }, - "node_modules/ci-info": { - "version": "3.5.0", - "dev": true, - "license": "MIT" + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "dev": true, - "license": "MIT" + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true }, - "node_modules/clean-stack": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true }, - "node_modules/cli-cursor": { - "version": "3.1.0", + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, - "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/cli-table3": { - "version": "0.6.3", + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, - "license": "MIT", "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "@babel/types": "^7.0.0" } }, - "node_modules/cli-truncate": { - "version": "3.1.0", + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, - "license": "MIT", "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.0.1", + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "dependencies": { + "@babel/types": "^7.20.7" } }, - "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "license": "MIT" + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "5.1.2", + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, - "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@types/node": "*" } }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.0.1", + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/cliui": { - "version": "7.0.4", + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, - "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "@types/istanbul-lib-report": "*" } }, - "node_modules/co": { - "version": "4.6.0", + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "dev": true, - "license": "MIT" + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true }, - "node_modules/color-convert": { - "version": "2.0.1", + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", + "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", "dev": true, - "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "undici-types": "~6.20.0" } }, - "node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true }, - "node_modules/colorette": { - "version": "2.0.19", - "dev": true, - "license": "MIT" + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true }, - "node_modules/commander": { - "version": "9.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || >=14" - } + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, - "node_modules/compare-func": { - "version": "2.0.0", + "node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, - "license": "MIT", "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" + "@types/yargs-parser": "*" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true }, - "node_modules/conventional-changelog-angular": { - "version": "5.0.13", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.17.0.tgz", + "integrity": "sha512-HU1KAdW3Tt8zQkdvNoIijfWDMvdSweFYm4hWh+KwhPstv+sCmWb89hCIP8msFm9N1R/ooh9honpSuvqKWlYy3w==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.17.0", + "@typescript-eslint/type-utils": "8.17.0", + "@typescript-eslint/utils": "8.17.0", + "@typescript-eslint/visitor-keys": "8.17.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.17.0.tgz", + "integrity": "sha512-Drp39TXuUlD49F7ilHHCG7TTg8IkA+hxCuULdmzWYICxGXvDXmDmWEjJYZQYgf6l/TFfYNE167m7isnc3xlIEg==", "dev": true, - "license": "ISC", "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" + "@typescript-eslint/scope-manager": "8.17.0", + "@typescript-eslint/types": "8.17.0", + "@typescript-eslint/typescript-estree": "8.17.0", + "@typescript-eslint/visitor-keys": "8.17.0", + "debug": "^4.3.4" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/conventional-changelog-conventionalcommits": { - "version": "5.0.0", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.17.0.tgz", + "integrity": "sha512-/ewp4XjvnxaREtqsZjF4Mfn078RD/9GmiEAtTeLQ7yFdKnqwTOgRMSvFz4et9U5RiJQ15WTGXPLj89zGusvxBg==", "dev": true, - "license": "ISC", "dependencies": { - "compare-func": "^2.0.0", - "lodash": "^4.17.15", - "q": "^1.5.1" + "@typescript-eslint/types": "8.17.0", + "@typescript-eslint/visitor-keys": "8.17.0" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/conventional-changelog-writer": { - "version": "5.0.1", + "node_modules/@typescript-eslint/type-utils": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.17.0.tgz", + "integrity": "sha512-q38llWJYPd63rRnJ6wY/ZQqIzPrBCkPdpIsaCfkR3Q4t3p6sb422zougfad4TFW9+ElIFLVDzWGiGAfbb/v2qw==", "dev": true, - "license": "MIT", "dependencies": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-changelog-writer": "cli.js" + "@typescript-eslint/typescript-estree": "8.17.0", + "@typescript-eslint/utils": "8.17.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "6.3.0", + "node_modules/@typescript-eslint/types": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.17.0.tgz", + "integrity": "sha512-gY2TVzeve3z6crqh2Ic7Cr+CAv6pfb0Egee7J5UAVWCpVvDI/F71wNfolIim4FE6hT15EbpZFVUj9j5i38jYXA==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/conventional-commits-filter": { - "version": "2.0.7", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.17.0.tgz", + "integrity": "sha512-JqkOopc1nRKZpX+opvKqnM3XUlM7LpFMD0lYxTqOTKQfCWAmxw45e3qlOCsEqEB2yuacujivudOFpCnqkBDNMw==", "dev": true, - "license": "MIT", "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" + "@typescript-eslint/types": "8.17.0", + "@typescript-eslint/visitor-keys": "8.17.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/conventional-commits-parser": { - "version": "3.2.4", + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "license": "MIT", - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, "bin": { - "conventional-commits-parser": "cli.js" + "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/core-util-is": { - "version": "1.0.3", + "node_modules/@typescript-eslint/utils": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.17.0.tgz", + "integrity": "sha512-bQC8BnEkxqG8HBGKwG9wXlZqg37RKSMY7v/X8VEWD8JG2JuTHuNK0VFvMPMUKQcbk6B+tf05k+4AShAEtCtJ/w==", "dev": true, - "license": "MIT" + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.17.0", + "@typescript-eslint/types": "8.17.0", + "@typescript-eslint/typescript-estree": "8.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } }, - "node_modules/cosmiconfig": { - "version": "7.0.1", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.17.0.tgz", + "integrity": "sha512-1Hm7THLpO6ww5QU6H/Qp+AusUUl+z/CAm3cNZZ0jQvon9yicgO7Rwd+/WWRpMKLYV6p2UvdbR27c86rzCPpreg==", "dev": true, - "license": "MIT", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "@typescript-eslint/types": "8.17.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/cosmiconfig-typescript-loader": { + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, - "license": "MIT", "engines": { - "node": ">=12", - "npm": ">=6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=7", - "ts-node": ">=10", - "typescript": ">=3" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/create-require": { - "version": "1.1.1", + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, - "license": "MIT" + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "dependencies": { - "node-fetch": "2.6.7" + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, - "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "acorn": "^8.11.0" }, "engines": { - "node": ">= 8" + "node": ">=0.4.0" } }, - "node_modules/crypto-random-string": { - "version": "2.0.0", + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/dargs": { - "version": "7.0.0", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/dateformat": { - "version": "3.0.3", + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "license": "MIT", "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/decamelize-keys": { - "version": "1.1.1", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, - "license": "MIT", "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "type-fest": "^0.21.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/dedent": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-extend": { - "version": "0.6.0", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=4.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true }, - "node_modules/deepmerge": { - "version": "4.2.2", + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "license": "MIT", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/define-properties": { - "version": "1.1.4", + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/argv-formatter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", + "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==", + "dev": true + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, - "license": "MIT", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/del": { - "version": "6.1.1", + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, - "license": "MIT", "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", + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.8.0" } }, - "node_modules/del/node_modules/p-map": { - "version": "4.0.0", + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, - "license": "MIT", "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "dev": true, - "license": "ISC" - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/diff": { - "version": "4.0.2", + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, - "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, "engines": { - "node": ">=0.3.1" + "node": ">=8" } }, - "node_modules/diff-sequences": { - "version": "28.1.1", + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/dir-glob": { - "version": "3.0.1", + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, - "license": "MIT", "dependencies": { - "path-type": "^4.0.0" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/doctrine": { - "version": "3.0.0", + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "esutils": "^2.0.2" + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, - "engines": { - "node": ">=6.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/dot-prop": { - "version": "5.3.0", + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, - "license": "MIT", "dependencies": { - "is-obj": "^2.0.0" + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", - "dev": true, - "engines": { - "node": ">=12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/duplexer2": { - "version": "0.1.4", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "readable-stream": "^2.0.2" - } + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "dev": true, - "license": "MIT" + "node_modules/before-after-hook": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz", + "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", + "dev": true }, - "node_modules/electron-to-chromium": { - "version": "1.4.284", - "dev": true, - "license": "ISC" + "node_modules/bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", + "dev": true }, - "node_modules/emittery": { - "version": "0.10.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "dev": true }, - "node_modules/emoji-regex": { - "version": "8.0.0", + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT" + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "fill-range": "^7.1.1" }, "engines": { - "node": ">=10.13.0" + "node": ">=8" } }, - "node_modules/env-ci": { - "version": "5.5.0", + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "execa": "^5.0.0", - "fromentries": "^1.3.2", - "java-properties": "^1.0.0" + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" }, "engines": { - "node": ">=10.17" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/error-ex": { - "version": "1.3.2", + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, - "license": "MIT", "dependencies": { - "is-arrayish": "^0.2.1" + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/es-abstract": { - "version": "1.20.4", + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" }, "engines": { "node": ">= 0.4" @@ -3672,1066 +4691,1130 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", "dev": true, - "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/escalade": { - "version": "3.1.1", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=6" } }, - "node_modules/eslint": { - "version": "8.23.1", + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, - "license": "MIT", "dependencies": { - "@eslint/eslintrc": "^1.3.2", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", - "@humanwhocodes/module-importer": "^1.0.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-config-prettier": { - "version": "8.5.0", + "node_modules/caniuse-lite": { + "version": "1.0.30001687", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz", + "integrity": "sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==", "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">=10" } }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz", - "integrity": "sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==", + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, - "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.10.0", - "get-tsconfig": "^4.2.0", - "globby": "^13.1.2", - "is-core-module": "^2.10.0", - "is-glob": "^4.0.3", - "synckit": "^0.8.4" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" + "node": ">=8" } }, - "node_modules/eslint-import-resolver-typescript/node_modules/globby": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", - "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "node_modules/cjs-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", + "dev": true + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/eslint-import-resolver-typescript/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, + "dependencies": { + "restore-cursor": "^5.0.0" + }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-module-utils": { - "version": "2.7.4", + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", "dev": true, - "license": "MIT", "dependencies": { - "debug": "^3.2.7" + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" }, - "engines": { - "node": ">=4" + "bin": { + "highlight": "bin/highlight" }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", + "node_modules/cli-highlight/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } + "node_modules/cli-highlight/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", + "node_modules/cli-highlight/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", + "node_modules/cli-highlight/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "esutils": "^2.0.2" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-jest": { - "version": "26.9.0", + "node_modules/cli-highlight/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^5.10.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", + "node_modules/cli-highlight/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } + "node": ">=10" } }, - "node_modules/eslint-plugin-unused-imports": { - "version": "2.0.0", + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, - "license": "MIT", "dependencies": { - "eslint-rule-composer": "^0.3.0" + "string-width": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0", - "eslint": "^8.0.0" + "node": "10.* || >= 12.*" }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - } + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/eslint-rule-composer": { - "version": "0.3.0", + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT", "engines": { - "node": ">=4.0.0" + "node": ">=8" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, - "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "Apache-2.0", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "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" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=8" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=7.0.0" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, - "license": "BSD-2-Clause", "engines": { - "node": ">=4.0" + "node": ">=18" } }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, - "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, - "license": "ISC", "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/locate-path": { + "node_modules/conventional-changelog-angular": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", + "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", "dev": true, - "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "compare-func": "^2.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14" } }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", + "node_modules/conventional-changelog-conventionalcommits": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-6.1.0.tgz", + "integrity": "sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==", "dev": true, - "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "compare-func": "^2.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14" } }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", + "node_modules/conventional-changelog-writer": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-8.0.0.tgz", + "integrity": "sha512-TQcoYGRatlAnT2qEWDON/XSfnVG38JzA7E0wcGScu7RElQBkg9WWgZd1peCWFcWDh1xfb2CfsrcvOn1bbSzztA==", "dev": true, - "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "@types/semver": "^7.5.5", + "conventional-commits-filter": "^5.0.0", + "handlebars": "^4.7.7", + "meow": "^13.0.0", + "semver": "^7.5.2" }, - "engines": { - "node": ">=10" + "bin": { + "conventional-changelog-writer": "dist/cli/index.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=18" } }, - "node_modules/eslint/node_modules/strip-json-comments": { - "version": "3.1.1", + "node_modules/conventional-changelog-writer/node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/espree": { - "version": "9.4.0", + "node_modules/conventional-commits-filter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-5.0.0.tgz", + "integrity": "sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=18" } }, - "node_modules/esprima": { - "version": "4.0.1", + "node_modules/conventional-commits-parser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", + "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", "dev": true, - "license": "BSD-2-Clause", + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.3.5", + "meow": "^8.1.2", + "split2": "^3.2.2" + }, "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "conventional-commits-parser": "cli.js" }, "engines": { - "node": ">=4" + "node": ">=14" } }, - "node_modules/esquery": { - "version": "1.4.0", + "node_modules/convert-hrtime": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-5.0.0.tgz", + "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, "engines": { - "node": ">=0.10" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, - "node_modules/esrecurse": { - "version": "4.3.0", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "estraverse": "^5.2.0" + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" }, "engines": { - "node": ">=4.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", + "node_modules/cosmiconfig-typescript-loader": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz", + "integrity": "sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==", "dev": true, - "license": "BSD-2-Clause", "engines": { - "node": ">=4.0" + "node": ">=v14.21.3" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "ts-node": ">=10", + "typescript": ">=4" } }, - "node_modules/estraverse": { - "version": "4.3.0", + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, - "license": "BSD-2-Clause", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, "engines": { - "node": ">=4.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, - "node_modules/esutils": { - "version": "2.0.3", + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "dev": true, - "license": "BSD-2-Clause", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/execa": { - "version": "5.1.1", + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", "dev": true, - "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/exit": { - "version": "0.1.2", + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/expect": { - "version": "28.1.3", + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" + "ms": "^2.1.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-diff": { + "node_modules/decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, - "license": "Apache-2.0" + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/fast-glob": { - "version": "3.2.12", + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, - "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, "engines": { - "node": ">=8.6.0" + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", "dev": true, - "license": "MIT" + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } }, - "node_modules/fastq": { - "version": "1.13.0", + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" + "engines": { + "node": ">=4.0.0" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/figures": { - "version": "3.2.0", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, - "license": "MIT", "dependencies": { - "escape-string-regexp": "^1.0.5" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=8" } }, - "node_modules/fill-range": { - "version": "7.0.1", + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=0.3.1" } }, - "node_modules/find-cache-dir": { - "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==", + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "path-type": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/find-up": { - "version": "4.1.0", + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, - "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "is-obj": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/find-versions": { - "version": "4.0.0", + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", "dev": true, - "license": "MIT", - "dependencies": { - "semver-regex": "^3.1.2" - }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://dotenvx.com" } }, - "node_modules/flat-cache": { - "version": "3.0.4", + "node_modules/dunder-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", + "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", "dev": true, - "license": "MIT", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "call-bind-apply-helpers": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.4" } }, - "node_modules/flatted": { - "version": "3.2.7", - "dev": true, - "license": "ISC" - }, - "node_modules/from2": { - "version": "2.3.0", + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, - "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "readable-stream": "^2.0.2" } }, - "node_modules/fromentries": { - "version": "1.3.2", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "10.1.0", + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, - "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" }, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" + "node_modules/electron-to-chromium": { + "version": "1.5.71", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.71.tgz", + "integrity": "sha512-dB68l59BI75W1BUGVTAEJy45CEVuEGy9qPVVQ8pnHyHMn36PLPPoE1mjLH+lo9rKulO3HC2OhbACI/8tCqJBcA==", + "dev": true }, - "node_modules/fsevents": { - "version": "2.3.2", + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" + "node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true + }, + "node_modules/emojilib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", + "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", + "dev": true }, - "node_modules/function.prototype.name": { - "version": "1.1.5", + "node_modules/env-ci": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-11.1.0.tgz", + "integrity": "sha512-Z8dnwSDbV1XYM9SBF2J0GcNVvmfmfh3a49qddGIROhBoVro6MZVTji15z/sJbQ2ko2ei8n988EU1wzoLU/tF+g==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "execa": "^8.0.0", + "java-properties": "^1.0.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^18.17 || >=20.6.1" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", + "node_modules/env-ci/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, - "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", + "node_modules/env-ci/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", + "node_modules/env-ci/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "license": "ISC", "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=16.17.0" } }, - "node_modules/get-intrinsic": { - "version": "1.1.3", + "node_modules/env-ci/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-package-type": { - "version": "0.1.0", + "node_modules/env-ci/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-stream": { - "version": "6.0.1", + "node_modules/env-ci/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, - "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", + "node_modules/env-ci/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-tsconfig": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.4.0.tgz", - "integrity": "sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==", + "node_modules/env-ci/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, + "engines": { + "node": ">=12" + }, "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/git-log-parser": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "argv-formatter": "~1.0.0", - "spawn-error-forwarder": "~1.0.0", - "split2": "~1.0.0", - "stream-combiner2": "~1.1.1", - "through2": "~2.0.0", - "traverse": "~0.6.6" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-log-parser/node_modules/split2": { - "version": "1.0.0", + "node_modules/env-ci/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "ISC", - "dependencies": { - "through2": "~2.0.0" + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/git-log-parser/node_modules/through2": { - "version": "2.0.5", + "node_modules/env-ci/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-raw-commits": { - "version": "2.0.11", + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, - "license": "MIT", - "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" - }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/glob": { - "version": "7.2.3", + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, "engines": { - "node": "*" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-parent": { - "version": "5.1.2", + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" - }, + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, "engines": { - "node": ">= 6" + "node": ">= 0.4" } }, - "node_modules/global-dirs": { - "version": "0.1.1", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.4" - }, "engines": { - "node": ">=4" + "node": ">= 0.4" } }, - "node_modules/globals": { - "version": "13.17.0", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -4739,420 +5822,508 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "node_modules/globby": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", + "node_modules/eslint": { + "version": "9.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.16.0.tgz", + "integrity": "sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.16.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.5", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "dev": true, - "license": "ISC" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", + "node_modules/eslint-plugin-jest": { + "version": "28.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.9.0.tgz", + "integrity": "sha512-rLu1s1Wf96TgUUxSw6loVIkNtUjq1Re7A9QdCCHSohnvXEBAjuL420h0T/fMmkQlNsQP2GhQzEUpYHPfxBkvYQ==", "dev": true, - "license": "MIT" - }, - "node_modules/handlebars": { - "version": "4.7.7", - "dev": true, - "license": "MIT", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" + "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "engines": { - "node": ">=0.4.7" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0", + "jest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } } }, - "node_modules/has": { - "version": "1.0.3", + "node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, - "license": "MIT", "dependencies": { - "function-bind": "^1.1.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "dev": true, - "license": "MIT", + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/has-flag": { - "version": "4.0.0", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.1" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/has-symbols": { - "version": "1.0.3", + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/hook-std": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, - "node_modules/hosted-git-info": { - "version": "4.1.0", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { - "lru-cache": "^6.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10" + "node": "*" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, - "license": "MIT", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "engines": { - "node": ">= 6" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/human-signals": { - "version": "2.1.0", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, - "license": "Apache-2.0", "engines": { - "node": ">=10.17.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/husky": { - "version": "8.0.1", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "MIT", "bin": { - "husky": "lib/bin.js" + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" + "node": ">=4" } }, - "node_modules/ignore": { - "version": "5.2.0", + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "license": "MIT", + "dependencies": { + "estraverse": "^5.1.0" + }, "engines": { - "node": ">= 4" + "node": ">=0.10" } }, - "node_modules/import-fresh": { - "version": "3.3.0", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=4" + "node": ">=4.0" } }, - "node_modules/import-from": { - "version": "4.0.0", + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "MIT", "engines": { - "node": ">=12.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/import-local": { - "version": "3.1.0", + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, - "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.8.19" + "node": ">= 0.8.0" } }, - "node_modules/indent-string": { - "version": "4.0.0", + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, - "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/inflight": { - "version": "1.0.6", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "license": "ISC", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC" - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "is-glob": "^4.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 6" } }, - "node_modules/into-stream": { - "version": "6.0.0", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "dev": true + }, + "node_modules/fast-xml-parser": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], "dependencies": { - "from2": "^2.3.0", - "p-is-promise": "^3.0.0" - }, - "engines": { - "node": ">=10" + "strnum": "^1.0.5" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "fxparser": "src/cli/cli.js" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, - "license": "MIT" + "dependencies": { + "reusify": "^1.0.4" + } }, - "node_modules/is-bigint": { - "version": "1.0.4", + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, - "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "bser": "2.1.1" + } + }, + "node_modules/fdir": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", + "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", + "dev": true, + "peerDependencies": { + "picomatch": "^3 || ^4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "is-unicode-supported": "^2.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-builtin-module": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz", - "integrity": "sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==", + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "dependencies": { - "builtin-modules": "^3.3.0" + "flat-cache": "^4.0.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16.0.0" } }, - "node_modules/is-callable": { - "version": "1.2.7", + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/is-core-module": { - "version": "2.11.0", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, - "license": "MIT", "dependencies": { - "has": "^1.0.3" + "to-regex-range": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/is-date-object": { - "version": "1.0.5", + "node_modules/find-cache-dir": { + "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==", "dev": true, - "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, - "bin": { - "is-docker": "cli.js" + "dependencies": { + "semver": "^6.0.0" }, "engines": { "node": ">=8" @@ -5161,136 +6332,187 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extglob": { - "version": "2.1.1", + "node_modules/find-cache-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", + "node_modules/find-up-simple": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz", + "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==", "dev": true, - "license": "MIT", "engines": { - "node": ">=6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-glob": { - "version": "4.0.3", + "node_modules/find-versions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-6.0.0.tgz", + "integrity": "sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==", "dev": true, - "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "semver-regex": "^4.0.5", + "super-regex": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=16" } }, - "node_modules/is-number": { - "version": "7.0.0", + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, - "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=14.14" } }, - "node_modules/is-obj": { - "version": "2.0.0", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "license": "MIT", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", + "node_modules/function-timeout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-1.0.2.tgz", + "integrity": "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-plain-obj": { - "version": "1.1.0", + "node_modules/gensync": { + "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==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", "dev": true, - "dependencies": { - "@types/estree": "*" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-regex": { - "version": "1.1.4", + "node_modules/get-intrinsic": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.5.tgz", + "integrity": "sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bind-apply-helpers": "^1.0.0", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -5299,1942 +6521,2514 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/is-stream": { - "version": "2.0.1", + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-string": { - "version": "1.0.7", + "node_modules/git-log-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.1.tgz", + "integrity": "sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ==", "dev": true, - "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "argv-formatter": "~1.0.0", + "spawn-error-forwarder": "~1.0.0", + "split2": "~1.0.0", + "stream-combiner2": "~1.1.1", + "through2": "~2.0.0", + "traverse": "0.6.8" } }, - "node_modules/is-symbol": { - "version": "1.0.4", + "node_modules/git-log-parser/node_modules/split2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", + "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", "dev": true, - "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "through2": "~2.0.0" } }, - "node_modules/is-text-path": { - "version": "1.0.1", + "node_modules/git-log-parser/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "license": "MIT", "dependencies": { - "text-extensions": "^1.0.0" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "dev": true, + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/is-weakref": { - "version": "1.0.2", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "is-docker": "^2.0.0" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=8" + "node": ">=10.13.0" } }, - "node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/issue-parser": { - "version": "6.0.0", + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", "dependencies": { - "lodash.capitalize": "^4.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.uniqby": "^4.7.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10.13" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", + "node_modules/global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "ini": "^1.3.4" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", + "node_modules/globals": { + "version": "15.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.13.0.tgz", + "integrity": "sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", + "node_modules/globby": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", + "node_modules/globby/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, "engines": { - "node": ">=10" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-reports": { - "version": "3.1.5", + "node_modules/globby/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/java-properties": { - "version": "1.0.2", + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 0.6.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest": { - "version": "28.1.3", + "node_modules/graceful-fs": { + "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==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/core": "^28.1.3", - "@jest/types": "^28.1.3", - "import-local": "^3.0.2", - "jest-cli": "^28.1.3" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" }, "bin": { - "jest": "bin/jest.js" + "handlebars": "bin/handlebars" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node": ">=0.4.7" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/jest-changed-files": { - "version": "28.1.3", + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=6" } }, - "node_modules/jest-changed-files/node_modules/p-limit": { - "version": "3.1.0", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/jest-circus": { - "version": "28.1.3", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "p-limit": "^3.1.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "es-define-property": "^1.0.0" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-circus/node_modules/p-limit": { - "version": "3.1.0", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, - "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/jest-cli": { - "version": "28.1.3", + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": "*" } }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", + "node_modules/hook-std": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", + "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-cli/node_modules/cliui": { - "version": "8.0.1", + "node_modules/hosted-git-info": { + "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==", "dev": true, - "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/jest-cli/node_modules/yargs": { - "version": "17.6.0", + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/jest-cli/node_modules/yargs-parser": { - "version": "21.1.1", + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, - "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, "engines": { - "node": ">=12" + "node": ">= 14" } }, - "node_modules/jest-config": { - "version": "28.1.3", + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.3", - "@jest/types": "^28.1.3", - "babel-jest": "^28.1.3", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.3", - "jest-environment-node": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" + "agent-base": "^7.1.2", + "debug": "4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } + "node": ">= 14" } }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=10.17.0" } }, - "node_modules/jest-config/node_modules/strip-json-comments": { - "version": "3.1.1", + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, - "license": "MIT", + "bin": { + "husky": "bin.js" + }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/jest-diff": { - "version": "28.1.3", + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">= 4" } }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-docblock": { - "version": "28.1.1", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=4" } }, - "node_modules/jest-each": { - "version": "28.1.3", + "node_modules/import-from-esm": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/import-from-esm/-/import-from-esm-1.3.4.tgz", + "integrity": "sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.3", - "pretty-format": "^28.1.3" + "debug": "^4.3.4", + "import-meta-resolve": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=16.20" } }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-node": { - "version": "28.1.3", + "node_modules/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/jest-fetch-mock": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz", - "integrity": "sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "dependencies": { - "cross-fetch": "^3.0.4", - "promise-polyfill": "^8.1.3" + "engines": { + "node": ">=0.8.19" } }, - "node_modules/jest-get-type": { - "version": "28.0.2", + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=8" } }, - "node_modules/jest-haste-map": { - "version": "28.1.3", + "node_modules/index-to-position": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-0.1.2.tgz", + "integrity": "sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^28.1.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=18" }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-leak-detector": { - "version": "28.1.3", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "license": "MIT", "dependencies": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/jest-matcher-utils": { - "version": "28.1.3", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/into-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", + "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", "dev": true, - "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "hasown": "^2.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util": { - "version": "28.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-fullwidth-code-point": { + "version": "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==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-mock": { - "version": "28.1.3", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*" + "is-extglob": "^2.1.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "MIT", "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "node": ">=0.12.0" } }, - "node_modules/jest-regex-util": { - "version": "28.0.2", + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, - "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=8" } }, - "node_modules/jest-resolve": { - "version": "28.1.3", + "node_modules/is-plain-obj": { + "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==", "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-resolve-dependencies": { - "version": "28.1.3", + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dev": true, - "license": "MIT", "dependencies": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "@types/estree": "*" } }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner": { - "version": "28.1.3", + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/console": "^28.1.3", - "@jest/environment": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "graceful-fs": "^4.2.9", - "jest-docblock": "^28.1.1", - "jest-environment-node": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-leak-detector": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-resolve": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-util": "^28.1.3", - "jest-watcher": "^28.1.3", - "jest-worker": "^28.1.3", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" + "text-extensions": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner/node_modules/p-limit": { - "version": "3.1.0", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/issue-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz", + "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==", "dev": true, - "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "lodash.capitalize": "^4.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.uniqby": "^4.7.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.17 || >=20.6.1" } }, - "node_modules/jest-runtime": { - "version": "28.1.3", + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/globals": "^28.1.3", - "@jest/source-map": "^28.1.2", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=8" } }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/strip-bom": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" } }, - "node_modules/jest-snapshot": { - "version": "28.1.3", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "natural-compare": "^1.4.0", - "pretty-format": "^28.1.3", - "semver": "^7.3.5" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=10" } }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", + "node_modules/istanbul-lib-source-maps": { + "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==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-util": { - "version": "28.1.3", + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=8" } }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-validate": { - "version": "28.1.3", + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^28.1.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "leven": "^3.1.0", - "pretty-format": "^28.1.3" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "*" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", + "node_modules/java-properties": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", + "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6.0" } }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/jest-watcher": { - "version": "28.1.3", + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-watcher/node_modules/ansi-escapes": { - "version": "4.3.2", + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, - "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/jest-watcher/node_modules/type-fest": { - "version": "0.21.3", + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/jest-worker": { - "version": "28.1.3", + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, - "license": "MIT", "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, - "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "detect-newline": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/js-sdsl": { - "version": "4.1.5", - "dev": true, - "license": "MIT" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, - "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jsesc": { - "version": "2.5.2", + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", + "node_modules/jest-extended": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-4.0.2.tgz", + "integrity": "sha512-FH7aaPgtGYHc9mRjriS0ZEHYM5/W69tLrFTIdzm+yJgeoCmmrSB/luSfMSqWP9O29QWHPEmJ4qmU6EwsZideog==", "dev": true, - "license": "MIT" + "dependencies": { + "jest-diff": "^29.0.0", + "jest-get-type": "^29.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "jest": ">=27.2.5" + }, + "peerDependenciesMeta": { + "jest": { + "optional": true + } + } }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", + "node_modules/jest-fetch-mock": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz", + "integrity": "sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==", "dev": true, - "license": "MIT" + "dependencies": { + "cross-fetch": "^3.0.4", + "promise-polyfill": "^8.1.3" + } }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "license": "ISC" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "dependencies": { - "minimist": "^1.2.0" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/jsonfile": { - "version": "6.1.0", + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, - "license": "MIT", "dependencies": { - "universalify": "^2.0.0" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jsonparse": { - "version": "1.3.1", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/JSONStream": { - "version": "1.3.5", + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, - "license": "(MIT OR Apache-2.0)", "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jsrsasign": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-11.1.0.tgz", - "integrity": "sha512-Ov74K9GihaK9/9WncTe1mPmvrO7Py665TUfUKvraXBpu+xcTWitrtuOwcjf4KMU9maPaYn0OuaWy0HOzy/GBXg==", + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, - "funding": { - "url": "https://github.com/kjur/jsrsasign#donations" + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/kind-of": { - "version": "6.0.3", + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, - "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/kleur": { - "version": "3.0.3", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/leven": { - "version": "3.1.0", + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, - "license": "MIT", "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/levn": { - "version": "0.4.1", + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, - "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.0.5", - "dev": true, - "license": "MIT", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/lint-staged": { - "version": "13.0.3", + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, - "license": "MIT", "dependencies": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.17", - "commander": "^9.3.0", - "debug": "^4.3.4", - "execa": "^6.1.0", - "lilconfig": "2.0.5", - "listr2": "^4.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.1.1" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lint-staged/node_modules/execa": { - "version": "6.1.0", + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, - "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "3.0.1", - "dev": true, - "license": "Apache-2.0", + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, "engines": { - "node": ">=12.20.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/mimic-fn": { - "version": "4.0.0", - "dev": true, - "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.1.0", + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, - "license": "MIT", "dependencies": { - "path-key": "^4.0.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", + "node_modules/jest-util/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^4.0.0" - }, "engines": { - "node": ">=12" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "4.0.0", + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/yaml": { - "version": "2.1.3", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 14" - } - }, - "node_modules/listr2": { - "version": "4.0.5", + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, - "license": "MIT", "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" }, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "2.1.0", + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, - "license": "MIT", "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/listr2/node_modules/p-map": { - "version": "4.0.0", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { - "aggregate-error": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=8" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/load-json-file": { - "version": "4.0.0", + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "4.0.0", + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/locate-path": { - "version": "5.0.0", + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, - "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "universalify": "^2.0.0" }, - "engines": { - "node": ">=8" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/lodash": { - "version": "4.17.21", + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, - "license": "MIT" - }, - "node_modules/lodash.capitalize": { - "version": "4.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.escaperegexp": { - "version": "4.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.ismatch": { - "version": "4.4.0", - "dev": true, - "license": "MIT" + "engines": [ + "node >= 0.2.0" + ] }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, - "license": "MIT" + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } }, - "node_modules/lodash.isstring": { - "version": "4.0.1", + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "license": "MIT" + "dependencies": { + "json-buffer": "3.0.1" + } }, - "node_modules/lodash.memoize": { - "version": "4.1.2", + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/lodash.merge": { - "version": "4.6.2", + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=6" + } }, - "node_modules/lodash.uniqby": { - "version": "4.7.0", + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=6" + } }, - "node_modules/log-update": { - "version": "4.0.0", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8.0" } }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "4.3.2", + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", "dev": true, - "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" - }, + "immediate": "~3.0.5" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lint-staged": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", + "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", + "dev": true, + "dependencies": { + "chalk": "~5.3.0", + "commander": "~12.1.0", + "debug": "~4.3.6", + "execa": "~8.0.1", + "lilconfig": "~3.1.2", + "listr2": "~8.2.4", + "micromatch": "~4.0.8", + "pidtree": "~0.6.0", + "string-argv": "~0.3.2", + "yaml": "~2.5.0" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" }, "engines": { - "node": ">=10" + "node": ">=18.12.0" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "url": "https://opencollective.com/lint-staged" } }, - "node_modules/log-update/node_modules/type-fest": { - "version": "0.21.3", + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", + "node_modules/lint-staged/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ms": "^2.1.3" }, "engines": { - "node": ">=8" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "node": ">=6.0" }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/magic-string": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", - "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "node_modules/lint-staged/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "dependencies": { - "sourcemap-codec": "^1.4.8" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=12" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/make-dir": { - "version": "3.1.0", + "node_modules/lint-staged/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, "engines": { - "node": ">=8" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, - "node_modules/makeerror": { - "version": "1.0.12", + "node_modules/lint-staged/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" + "engines": { + "node": ">=16.17.0" } }, - "node_modules/map-obj": { - "version": "4.3.0", + "node_modules/lint-staged/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/marked": { - "version": "4.2.0", + "node_modules/lint-staged/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, "engines": { - "node": ">= 12" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/marked-terminal": { - "version": "5.1.1", + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-escapes": "^5.0.0", - "cardinal": "^2.1.1", - "chalk": "^5.0.0", - "cli-table3": "^0.6.1", - "node-emoji": "^1.11.0", - "supports-hyperlinks": "^2.2.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=14.13.1 || >=16.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "marked": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow": { - "version": "8.1.2", + "node_modules/lint-staged/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, - "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", + "node_modules/lint-staged/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge-stream": { - "version": "2.0.0", + "node_modules/lint-staged/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/merge2": { - "version": "1.4.1", + "node_modules/lint-staged/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/micromatch": { - "version": "4.0.5", + "node_modules/listr2": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", + "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", "dev": true, - "license": "MIT", "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=8.6" + "node": ">=18.0.0" } }, - "node_modules/mime": { - "version": "3.0.0", + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=4" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, - "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/min-indent": { - "version": "1.0.1", + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/minimatch": { - "version": "3.1.2", + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", "dev": true, - "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "lie": "3.1.1" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" }, "engines": { - "node": "*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minimist": { - "version": "1.2.7", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "dev": true + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, + "node_modules/lodash.capitalize": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", + "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", + "dev": true + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", + "dev": true + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true + }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", + "dev": true + }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "dev": true + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, - "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minimist-options": { - "version": "4.1.0", + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "dev": true, - "license": "MIT", "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" + "environment": "^1.0.0" }, "engines": { - "node": ">= 6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/modify-values": { - "version": "1.0.1", + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ms": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", "dev": true, - "license": "MIT" + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", "dev": true, - "license": "MIT" + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } }, - "node_modules/neo-async": { - "version": "2.6.2", + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT" + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } }, - "node_modules/nerf-dart": { - "version": "1.0.0", + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "license": "MIT" + "dependencies": { + "yallist": "^3.0.2" + } }, - "node_modules/node-emoji": { - "version": "1.11.0", + "node_modules/magic-string": { + "version": "0.30.14", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz", + "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==", "dev": true, - "license": "MIT", "dependencies": { - "lodash": "^4.17.21" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "dependencies": { - "whatwg-url": "^5.0.0" + "semver": "^7.5.3" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-int64": { - "version": "0.4.0", + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, - "license": "MIT" + "dependencies": { + "tmpl": "1.0.5" + } }, - "node_modules/node-releases": { - "version": "2.0.6", + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/normalize-package-data": { - "version": "3.0.3", + "node_modules/marked": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", + "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "bin": { + "marked": "bin/marked.js" }, "engines": { - "node": ">=10" + "node": ">= 18" } }, - "node_modules/normalize-path": { - "version": "3.0.0", + "node_modules/marked-terminal": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-7.2.1.tgz", + "integrity": "sha512-rQ1MoMFXZICWNsKMiiHwP/Z+92PLKskTPXj+e7uwXmuMPkNn7iTqC+IvDekVm1MPeC9wYQeLxeFaOvudRR/XbQ==", "dev": true, - "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "ansi-regex": "^6.1.0", + "chalk": "^5.3.0", + "cli-highlight": "^2.1.11", + "cli-table3": "^0.6.5", + "node-emoji": "^2.1.3", + "supports-hyperlinks": "^3.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "marked": ">=1 <15" } }, - "node_modules/normalize-url": { - "version": "6.1.0", + "node_modules/marked-terminal/node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "dev": true, - "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm": { - "version": "8.19.2", - "bundleDependencies": [ - "@isaacs/string-locale-compare", - "@npmcli/arborist", - "@npmcli/ci-detect", - "@npmcli/config", - "@npmcli/fs", - "@npmcli/map-workspaces", - "@npmcli/package-json", - "@npmcli/promise-spawn", - "@npmcli/run-script", - "abbrev", - "archy", - "cacache", - "chalk", - "chownr", - "cli-columns", - "cli-table3", - "columnify", - "fastest-levenshtein", - "fs-minipass", - "glob", - "graceful-fs", - "hosted-git-info", - "ini", - "init-package-json", + "node_modules/marked-terminal/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.4.tgz", + "integrity": "sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa" + ], + "bin": { + "mime": "bin/cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nerf-dart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", + "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", + "dev": true + }, + "node_modules/node-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", + "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.6.0", + "char-regex": "^1.0.2", + "emojilib": "^2.4.0", + "skin-tone": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/npm/-/npm-10.9.2.tgz", + "integrity": "sha512-iriPEPIkoMYUy3F6f3wwSZAU93E0Eg6cHwIR6jzzOXWSy+SD/rOODEs74cVONHKSx2obXtuUoyidVEhISrisgQ==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/redact", + "@npmcli/run-script", + "@sigstore/tuf", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "cli-columns", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", "is-cidr", "json-parse-even-better-errors", "libnpmaccess", @@ -7252,11 +9046,10 @@ "minimatch", "minipass", "minipass-pipeline", - "mkdirp", - "mkdirp-infer-owner", "ms", "node-gyp", "nopt", + "normalize-package-data", "npm-audit-report", "npm-install-checks", "npm-package-arg", @@ -7264,20 +9057,16 @@ "npm-profile", "npm-registry-fetch", "npm-user-validate", - "npmlog", - "opener", "p-map", "pacote", "parse-conflict-json", "proc-log", "qrcode-terminal", "read", - "read-package-json", - "read-package-json-fast", - "readdir-scoped-modules", - "rimraf", "semver", + "spdx-expression-parse", "ssri", + "supports-color", "tar", "text-table", "tiny-relative-date", @@ -7287,97 +9076,89 @@ "write-file-atomic" ], "dev": true, - "license": "Artistic-2.0", - "workspaces": [ - "docs", - "smoke-tests", - "workspaces/*" - ], "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^5.6.2", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/config": "^4.2.1", - "@npmcli/fs": "^2.1.0", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^4.2.1", - "abbrev": "~1.1.1", + "@npmcli/arborist": "^8.0.0", + "@npmcli/config": "^9.0.0", + "@npmcli/fs": "^4.0.0", + "@npmcli/map-workspaces": "^4.0.2", + "@npmcli/package-json": "^6.1.0", + "@npmcli/promise-spawn": "^8.0.2", + "@npmcli/redact": "^3.0.0", + "@npmcli/run-script": "^9.0.1", + "@sigstore/tuf": "^3.0.0", + "abbrev": "^3.0.0", "archy": "~1.0.0", - "cacache": "^16.1.3", - "chalk": "^4.1.2", - "chownr": "^2.0.0", + "cacache": "^19.0.1", + "chalk": "^5.3.0", + "ci-info": "^4.1.0", "cli-columns": "^4.0.0", - "cli-table3": "^0.6.2", - "columnify": "^1.6.0", - "fastest-levenshtein": "^1.0.12", - "glob": "^8.0.1", - "graceful-fs": "^4.2.10", - "hosted-git-info": "^5.1.0", - "ini": "^3.0.1", - "init-package-json": "^3.0.2", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^2.3.1", - "libnpmaccess": "^6.0.4", - "libnpmdiff": "^4.0.5", - "libnpmexec": "^4.0.13", - "libnpmfund": "^3.0.4", - "libnpmhook": "^8.0.4", - "libnpmorg": "^4.0.4", - "libnpmpack": "^4.1.3", - "libnpmpublish": "^6.0.5", - "libnpmsearch": "^5.0.4", - "libnpmteam": "^4.0.4", - "libnpmversion": "^3.0.7", - "make-fetch-happen": "^10.2.0", - "minipass": "^3.1.6", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.3", + "glob": "^10.4.5", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^8.0.2", + "ini": "^5.0.0", + "init-package-json": "^7.0.2", + "is-cidr": "^5.1.0", + "json-parse-even-better-errors": "^4.0.0", + "libnpmaccess": "^9.0.0", + "libnpmdiff": "^7.0.0", + "libnpmexec": "^9.0.0", + "libnpmfund": "^6.0.0", + "libnpmhook": "^11.0.0", + "libnpmorg": "^7.0.0", + "libnpmpack": "^8.0.0", + "libnpmpublish": "^10.0.1", + "libnpmsearch": "^8.0.0", + "libnpmteam": "^7.0.0", + "libnpmversion": "^7.0.0", + "make-fetch-happen": "^14.0.3", + "minimatch": "^9.0.5", + "minipass": "^7.1.1", "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", "ms": "^2.1.2", - "node-gyp": "^9.1.0", - "nopt": "^6.0.0", - "npm-audit-report": "^3.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.1.0", - "npm-pick-manifest": "^7.0.2", - "npm-profile": "^6.2.0", - "npm-registry-fetch": "^13.3.1", - "npm-user-validate": "^1.0.1", - "npmlog": "^6.0.2", - "opener": "^1.5.2", + "node-gyp": "^11.0.0", + "nopt": "^8.0.0", + "normalize-package-data": "^7.0.0", + "npm-audit-report": "^6.0.0", + "npm-install-checks": "^7.1.1", + "npm-package-arg": "^12.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-profile": "^11.0.1", + "npm-registry-fetch": "^18.0.2", + "npm-user-validate": "^3.0.0", "p-map": "^4.0.0", - "pacote": "^13.6.2", - "parse-conflict-json": "^2.0.2", - "proc-log": "^2.0.1", + "pacote": "^19.0.1", + "parse-conflict-json": "^4.0.0", + "proc-log": "^5.0.0", "qrcode-terminal": "^0.12.0", - "read": "~1.0.7", - "read-package-json": "^5.0.2", - "read-package-json-fast": "^2.0.3", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.1", - "tar": "^6.1.11", + "read": "^4.0.0", + "semver": "^7.6.3", + "spdx-expression-parse": "^4.0.0", + "ssri": "^12.0.0", + "supports-color": "^9.4.0", + "tar": "^6.2.1", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", - "treeverse": "^2.0.0", - "validate-npm-package-name": "^4.0.0", - "which": "^2.0.2", - "write-file-atomic": "^4.0.1" + "treeverse": "^3.0.0", + "validate-npm-package-name": "^6.0.0", + "which": "^5.0.0", + "write-file-atomic": "^6.0.0" }, "bin": { "npm": "bin/npm-cli.js", "npx": "bin/npx-cli.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm-run-path": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -7385,327 +9166,431 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/@colors/colors": { - "version": "1.5.0", + "node_modules/npm/node_modules/@isaacs/cliui": { + "version": "8.0.2", "dev": true, "inBundle": true, - "license": "MIT", - "optional": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, "engines": { - "node": ">=0.1.90" + "node": ">=12" } }, - "node_modules/npm/node_modules/@gar/promisify": { - "version": "1.1.3", + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", "dev": true, "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", "dev": true, "inBundle": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "5.6.2", + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/query": "^1.2.0", - "@npmcli/run-script": "^4.1.3", - "bin-links": "^3.0.3", - "cacache": "^16.1.3", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "minimatch": "^5.1.0", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^6.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.2", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", - "walk-up-path": "^1.0.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, - "bin": { - "arborist": "bin/index.js" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/npm/node_modules/@npmcli/ci-detect": { - "version": "2.0.0", + "node_modules/npm/node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", "dev": true, "inBundle": true, "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": ">=18.0.0" } }, - "node_modules/npm/node_modules/@npmcli/config": { - "version": "4.2.2", + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/@npmcli/agent": { + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/map-workspaces": "^2.0.2", - "ini": "^3.0.0", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^6.0.0", - "proc-log": "^2.0.0", - "read-package-json-fast": "^2.0.3", - "semver": "^7.3.5", - "walk-up-path": "^1.0.0" + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/@npmcli/disparity-colors": { - "version": "2.0.0", + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "8.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^4.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/map-workspaces": "^4.0.1", + "@npmcli/metavuln-calculator": "^8.0.0", + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.1", + "@npmcli/query": "^4.0.0", + "@npmcli/redact": "^3.0.0", + "@npmcli/run-script": "^9.0.1", + "bin-links": "^5.0.0", + "cacache": "^19.0.1", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^10.2.2", + "minimatch": "^9.0.4", + "nopt": "^8.0.0", + "npm-install-checks": "^7.1.0", + "npm-package-arg": "^12.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.1", + "pacote": "^19.0.0", + "parse-conflict-json": "^4.0.0", + "proc-log": "^5.0.0", + "proggy": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "read-package-json-fast": "^4.0.0", + "semver": "^7.3.7", + "ssri": "^12.0.0", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/config": { + "version": "9.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "ansi-styles": "^4.3.0" + "@npmcli/map-workspaces": "^4.0.1", + "@npmcli/package-json": "^6.0.1", + "ci-info": "^4.0.0", + "ini": "^5.0.0", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/fs": { - "version": "2.1.2", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@gar/promisify": "^1.1.3", "semver": "^7.3.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/git": { - "version": "3.0.2", + "version": "6.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", - "which": "^2.0.2" + "which": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" }, "bin": { - "installed-package-contents": "index.js" + "installed-package-contents": "bin/index.js" }, "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/@npmcli/installed-package-contents/node_modules/npm-bundled": { - "version": "1.1.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "2.0.4", + "version": "4.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "3.1.1", + "version": "8.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", + "cacache": "^19.0.0", + "json-parse-even-better-errors": "^4.0.0", + "pacote": "^20.0.0", + "proc-log": "^5.0.0", "semver": "^7.3.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/@npmcli/move-file": { - "version": "2.0.1", + "node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote": { + "version": "20.0.0", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^9.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "1.0.1", + "version": "3.0.0", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "2.0.0", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "2.0.0", + "version": "6.1.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "json-parse-even-better-errors": "^2.3.1" + "@npmcli/git": "^6.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "normalize-package-data": "^7.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "3.0.0", + "version": "8.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "infer-owner": "^1.0.4" + "which": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/query": { - "version": "1.2.0", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-package-arg": "^9.1.0", - "postcss-selector-parser": "^6.0.10", - "semver": "^7.3.7" + "postcss-selector-parser": "^6.1.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/redact": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "4.2.1", + "version": "9.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/@tootallnate/once": { - "version": "2.0.0", + "node_modules/npm/node_modules/@pkgjs/parseargs": { + "version": "0.11.0", "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "engines": { - "node": ">= 10" + "node": ">=14" } }, - "node_modules/npm/node_modules/abbrev": { - "version": "1.1.1", + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.3.2", "dev": true, "inBundle": true, - "license": "ISC" + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } }, - "node_modules/npm/node_modules/agent-base": { - "version": "6.0.2", + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "3.0.0", "dev": true, "inBundle": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "debug": "4" + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^3.0.1" }, "engines": { - "node": ">= 6.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/agentkeepalive": { - "version": "4.2.1", + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/abbrev": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/agent-base": { + "version": "7.1.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" + "debug": "^4.3.4" }, "engines": { - "node": ">= 8.0.0" + "node": ">= 14" } }, "node_modules/npm/node_modules/aggregate-error": { @@ -7731,15 +9616,12 @@ } }, "node_modules/npm/node_modules/ansi-styles": { - "version": "4.3.0", + "version": "6.2.1", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" @@ -7757,25 +9639,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/are-we-there-yet": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/asap": { - "version": "2.0.6", - "dev": true, - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", "dev": true, @@ -7783,38 +9646,31 @@ "license": "MIT" }, "node_modules/npm/node_modules/bin-links": { - "version": "3.0.3", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" + "cmd-shim": "^7.0.0", + "npm-normalize-package-bin": "^4.0.0", + "proc-log": "^5.0.0", + "read-cmd-shim": "^5.0.0", + "write-file-atomic": "^6.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/bin-links/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/binary-extensions": { - "version": "2.2.0", + "version": "2.3.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm/node_modules/brace-expansion": { @@ -7826,137 +9682,181 @@ "balanced-match": "^1.0.0" } }, - "node_modules/npm/node_modules/builtins": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "semver": "^7.0.0" - } - }, "node_modules/npm/node_modules/cacache": { - "version": "16.1.3", + "version": "19.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/chalk": { - "version": "4.1.2", + "node_modules/npm/node_modules/cacache/node_modules/chownr": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/minizlib": { + "version": "3.0.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "minipass": "^7.0.4", + "rimraf": "^5.0.5" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 18" } }, - "node_modules/npm/node_modules/chownr": { - "version": "2.0.0", + "node_modules/npm/node_modules/cacache/node_modules/mkdirp": { + "version": "3.0.1", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/cidr-regex": { - "version": "3.1.1", + "node_modules/npm/node_modules/cacache/node_modules/p-map": { + "version": "7.0.2", "dev": true, "inBundle": true, - "license": "BSD-2-Clause", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/tar": { + "version": "7.4.3", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "ip-regex": "^4.1.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/npm/node_modules/clean-stack": { - "version": "2.2.0", + "node_modules/npm/node_modules/cacache/node_modules/yallist": { + "version": "5.0.0", "dev": true, "inBundle": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/npm/node_modules/cli-columns": { - "version": "4.0.0", + "node_modules/npm/node_modules/chalk": { + "version": "5.3.0", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/npm/node_modules/chownr": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">= 10" + "node": ">=10" } }, - "node_modules/npm/node_modules/cli-table3": { - "version": "0.6.2", + "node_modules/npm/node_modules/ci-info": { + "version": "4.1.0", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "inBundle": true, "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/cidr-regex": { + "version": "4.1.1", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", "dependencies": { - "string-width": "^4.2.0" + "ip-regex": "^5.0.0" }, "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "node": ">=14" } }, - "node_modules/npm/node_modules/clone": { - "version": "1.0.4", + "node_modules/npm/node_modules/clean-stack": { + "version": "2.2.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": ">=0.8" + "node": ">=6" } }, - "node_modules/npm/node_modules/cmd-shim": { - "version": "5.0.0", + "node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "mkdirp-infer-owner": "^2.0.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/cmd-shim": { + "version": "7.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/color-convert": { @@ -7977,45 +9877,40 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/color-support": { - "version": "1.1.3", + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", "dev": true, "inBundle": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } + "license": "ISC" }, - "node_modules/npm/node_modules/columnify": { - "version": "1.6.0", + "node_modules/npm/node_modules/cross-spawn": { + "version": "7.0.6", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">= 8" } }, - "node_modules/npm/node_modules/common-ancestor-path": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/console-control-strings": { - "version": "1.1.0", + "node_modules/npm/node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } }, "node_modules/npm/node_modules/cssesc": { "version": "3.0.0", @@ -8030,12 +9925,12 @@ } }, "node_modules/npm/node_modules/debug": { - "version": "4.3.4", + "version": "4.3.7", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -8046,64 +9941,21 @@ } } }, - "node_modules/npm/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/debuglog": { - "version": "1.0.1", + "node_modules/npm/node_modules/diff": { + "version": "5.2.0", "dev": true, "inBundle": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/defaults": { - "version": "1.0.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" + "node": ">=0.3.1" } }, - "node_modules/npm/node_modules/delegates": { - "version": "1.0.0", + "node_modules/npm/node_modules/eastasianwidth": { + "version": "0.2.0", "dev": true, "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/depd": { - "version": "1.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm/node_modules/dezalgo": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/diff": { - "version": "5.1.0", - "dev": true, - "inBundle": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/npm/node_modules/emoji-regex": { "version": "8.0.0", "dev": true, @@ -8135,159 +9987,117 @@ "inBundle": true, "license": "MIT" }, + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0" + }, "node_modules/npm/node_modules/fastest-levenshtein": { - "version": "1.0.12", + "version": "1.0.16", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } }, - "node_modules/npm/node_modules/fs-minipass": { - "version": "2.1.0", + "node_modules/npm/node_modules/foreground-child": { + "version": "3.3.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">= 8" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/gauge": { - "version": "4.0.4", + "node_modules/npm/node_modules/fs-minipass": { + "version": "3.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" + "minipass": "^7.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/glob": { - "version": "8.0.3", + "version": "10.4.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "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" }, - "engines": { - "node": ">=12" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.10", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/has": { - "version": "1.0.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/npm/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/has-unicode": { - "version": "2.0.1", + "version": "4.2.11", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { - "version": "5.1.0", + "version": "8.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "lru-cache": "^7.5.1" + "lru-cache": "^10.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.1.0", + "version": "4.1.1", "dev": true, "inBundle": true, "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/http-proxy-agent": { - "version": "5.0.0", + "version": "7.0.2", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/npm/node_modules/https-proxy-agent": { - "version": "5.0.1", + "version": "7.0.5", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "agent-base": "6", + "agent-base": "^7.0.2", "debug": "4" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/humanize-ms": { - "version": "1.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" + "node": ">= 14" } }, "node_modules/npm/node_modules/iconv-lite": { @@ -8304,15 +10114,15 @@ } }, "node_modules/npm/node_modules/ignore-walk": { - "version": "5.0.1", + "version": "7.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "minimatch": "^5.0.1" + "minimatch": "^9.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/imurmurhash": { @@ -8333,92 +10143,68 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/infer-owner": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/ini": { - "version": "3.0.1", + "node_modules/npm/node_modules/ini": { + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/init-package-json": { - "version": "3.0.2", + "version": "7.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-package-arg": "^9.0.1", - "promzard": "^0.3.0", - "read": "^1.0.7", - "read-package-json": "^5.0.0", + "@npmcli/package-json": "^6.0.0", + "npm-package-arg": "^12.0.0", + "promzard": "^2.0.0", + "read": "^4.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0" + "validate-npm-package-name": "^6.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/ip": { - "version": "2.0.0", + "node_modules/npm/node_modules/ip-address": { + "version": "9.0.5", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } }, "node_modules/npm/node_modules/ip-regex": { - "version": "4.3.0", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm/node_modules/is-cidr": { - "version": "4.0.2", + "version": "5.1.0", "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { - "cidr-regex": "^3.1.1" + "cidr-regex": "^4.1.1" }, "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/is-core-module": { - "version": "2.10.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=14" } }, "node_modules/npm/node_modules/is-fullwidth-code-point": { @@ -8430,24 +10216,42 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/is-lambda": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", "dev": true, "inBundle": true, "license": "ISC" }, - "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", + "node_modules/npm/node_modules/jackspeak": { + "version": "3.4.3", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/npm/node_modules/jsbn": { + "version": "1.1.0", "dev": true, "inBundle": true, "license": "MIT" }, + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/npm/node_modules/json-stringify-nice": { "version": "1.1.4", "dev": true, @@ -8467,223 +10271,222 @@ "license": "MIT" }, "node_modules/npm/node_modules/just-diff": { - "version": "5.1.1", + "version": "6.0.2", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { - "version": "5.4.1", + "version": "5.5.0", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { - "version": "6.0.4", + "version": "9.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0" + "npm-package-arg": "^12.0.0", + "npm-registry-fetch": "^18.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "4.0.5", + "version": "7.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/disparity-colors": "^2.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "binary-extensions": "^2.2.0", + "@npmcli/arborist": "^8.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "binary-extensions": "^2.3.0", "diff": "^5.1.0", - "minimatch": "^5.0.1", - "npm-package-arg": "^9.0.1", - "pacote": "^13.6.1", - "tar": "^6.1.0" + "minimatch": "^9.0.4", + "npm-package-arg": "^12.0.0", + "pacote": "^19.0.0", + "tar": "^6.2.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "4.0.13", + "version": "9.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^5.6.2", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/fs": "^2.1.1", - "@npmcli/run-script": "^4.2.0", - "chalk": "^4.1.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-package-arg": "^9.0.1", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "proc-log": "^2.0.0", - "read": "^1.0.7", - "read-package-json-fast": "^2.0.2", + "@npmcli/arborist": "^8.0.0", + "@npmcli/run-script": "^9.0.1", + "ci-info": "^4.0.0", + "npm-package-arg": "^12.0.0", + "pacote": "^19.0.0", + "proc-log": "^5.0.0", + "read": "^4.0.0", + "read-package-json-fast": "^4.0.0", "semver": "^7.3.7", - "walk-up-path": "^1.0.0" + "walk-up-path": "^3.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "3.0.4", + "version": "6.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^5.6.2" + "@npmcli/arborist": "^8.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmhook": { - "version": "8.0.4", + "version": "11.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" + "npm-registry-fetch": "^18.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmorg": { - "version": "4.0.4", + "version": "7.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" + "npm-registry-fetch": "^18.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "4.1.3", + "version": "8.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/run-script": "^4.1.3", - "npm-package-arg": "^9.0.1", - "pacote": "^13.6.1" + "@npmcli/arborist": "^8.0.0", + "@npmcli/run-script": "^9.0.1", + "npm-package-arg": "^12.0.0", + "pacote": "^19.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmpublish": { - "version": "6.0.5", + "version": "10.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "normalize-package-data": "^4.0.0", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0", + "ci-info": "^4.0.0", + "normalize-package-data": "^7.0.0", + "npm-package-arg": "^12.0.0", + "npm-registry-fetch": "^18.0.1", + "proc-log": "^5.0.0", "semver": "^7.3.7", - "ssri": "^9.0.0" + "sigstore": "^3.0.0", + "ssri": "^12.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmsearch": { - "version": "5.0.4", + "version": "8.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^13.0.0" + "npm-registry-fetch": "^18.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmteam": { - "version": "4.0.4", + "version": "7.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" + "npm-registry-fetch": "^18.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmversion": { - "version": "3.0.7", + "version": "7.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/run-script": "^4.1.3", - "json-parse-even-better-errors": "^2.3.1", - "proc-log": "^2.0.0", + "@npmcli/git": "^6.0.1", + "@npmcli/run-script": "^9.0.1", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", "semver": "^7.3.7" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/lru-cache": { - "version": "7.13.2", + "version": "10.4.3", "dev": true, "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=12" - } + "license": "ISC" }, "node_modules/npm/node_modules/make-fetch-happen": { - "version": "10.2.1", + "version": "14.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" + "ssri": "^12.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, "node_modules/npm/node_modules/minimatch": { - "version": "5.1.0", + "version": "9.0.5", "dev": true, "inBundle": true, "license": "ISC", @@ -8691,50 +10494,63 @@ "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/npm/node_modules/minipass": { - "version": "3.3.4", + "version": "7.1.2", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/npm/node_modules/minipass-collect": { - "version": "1.0.2", + "version": "2.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/npm/node_modules/minipass-fetch": { - "version": "2.1.1", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "minipass": "^3.1.6", + "minipass": "^7.0.3", "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "minizlib": "^3.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" }, "optionalDependencies": { "encoding": "^0.1.13" } }, + "node_modules/npm/node_modules/minipass-fetch/node_modules/minizlib": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", "dev": true, @@ -8747,14 +10563,16 @@ "node": ">= 8" } }, - "node_modules/npm/node_modules/minipass-json-stream": { - "version": "1.0.1", + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/npm/node_modules/minipass-pipeline": { @@ -8769,6 +10587,18 @@ "node": ">=8" } }, + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/npm/node_modules/minipass-sized": { "version": "1.0.3", "dev": true, @@ -8781,6 +10611,18 @@ "node": ">=8" } }, + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/npm/node_modules/minizlib": { "version": "2.1.2", "dev": true, @@ -8794,27 +10636,25 @@ "node": ">= 8" } }, - "node_modules/npm/node_modules/mkdirp": { - "version": "1.0.4", + "node_modules/npm/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", "dev": true, "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/npm/node_modules/mkdirp-infer-owner": { - "version": "2.0.0", + "node_modules/npm/node_modules/mkdirp": { + "version": "1.0.4", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { "node": ">=10" @@ -8827,166 +10667,162 @@ "license": "MIT" }, "node_modules/npm/node_modules/mute-stream": { - "version": "0.0.8", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/negotiator": { - "version": "0.6.3", + "version": "2.0.0", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">= 0.6" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/node-gyp": { - "version": "9.1.0", + "version": "11.0.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.0", - "glob": "^7.1.4", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" + "tar": "^7.4.3", + "which": "^5.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": "^12.22 || ^14.13 || >=16" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/npm/node_modules/node-gyp/node_modules/chownr": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/minizlib": { + "version": "3.0.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", + "node_modules/npm/node_modules/node-gyp/node_modules/mkdirp": { + "version": "3.0.1", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/npm/node_modules/node-gyp/node_modules/tar": { + "version": "7.4.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" }, "engines": { - "node": "*" + "node": ">=18" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { + "node_modules/npm/node_modules/node-gyp/node_modules/yallist": { "version": "5.0.0", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=6" + "node": ">=18" } }, "node_modules/npm/node_modules/nopt": { - "version": "6.0.0", + "version": "8.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "abbrev": "^1.0.0" + "abbrev": "^2.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/nopt/node_modules/abbrev": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/normalize-package-data": { - "version": "4.0.1", + "version": "7.0.0", "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", + "hosted-git-info": "^8.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/npm-audit-report": { - "version": "3.0.0", + "version": "6.0.0", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "chalk": "^4.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/npm-bundled": { - "version": "2.0.1", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-normalize-package-bin": "^2.0.0" + "npm-normalize-package-bin": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-bundled/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/npm-install-checks": { - "version": "5.0.0", + "version": "7.1.1", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -8994,149 +10830,112 @@ "semver": "^7.1.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "1.0.1", + "version": "4.0.0", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, "node_modules/npm/node_modules/npm-package-arg": { - "version": "9.1.0", + "version": "12.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" + "validate-npm-package-name": "^6.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/npm-packlist": { - "version": "5.1.3", + "version": "9.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "bin": { - "npm-packlist": "bin/index.js" + "ignore-walk": "^7.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "7.0.2", + "version": "10.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^2.0.0", - "npm-package-arg": "^9.0.0", + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", "semver": "^7.3.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/npm-profile": { - "version": "6.2.1", + "version": "11.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0" + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "13.3.1", + "version": "18.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^14.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^12.0.0", + "proc-log": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/npm-user-validate": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause" - }, - "node_modules/npm/node_modules/npmlog": { - "version": "6.0.2", + "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minizlib": { + "version": "3.0.1", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" + "minipass": "^7.0.4", + "rimraf": "^5.0.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/once": { - "version": "1.4.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" + "node": ">= 18" } }, - "node_modules/npm/node_modules/opener": { - "version": "1.5.2", + "node_modules/npm/node_modules/npm-user-validate": { + "version": "3.0.0", "dev": true, "inBundle": true, - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" + "license": "BSD-2-Clause", + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/p-map": { @@ -9154,66 +10953,84 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/npm/node_modules/package-json-from-dist": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0" + }, "node_modules/npm/node_modules/pacote": { - "version": "13.6.2", + "version": "19.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^9.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", "tar": "^6.1.11" }, "bin": { - "pacote": "lib/bin.js" + "pacote": "bin/index.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/parse-conflict-json": { - "version": "2.0.2", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "json-parse-even-better-errors": "^2.3.1", - "just-diff": "^5.0.1", + "json-parse-even-better-errors": "^4.0.0", + "just-diff": "^6.0.0", "just-diff-apply": "^5.2.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/path-is-absolute": { - "version": "1.0.1", + "node_modules/npm/node_modules/path-key": { + "version": "3.1.1", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" + } + }, + "node_modules/npm/node_modules/path-scurry": { + "version": "1.11.1", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.0.10", + "version": "6.1.2", "dev": true, "inBundle": true, "license": "MIT", @@ -9226,12 +11043,21 @@ } }, "node_modules/npm/node_modules/proc-log": { - "version": "2.0.1", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/proggy": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/promise-all-reject-late": { @@ -9244,7 +11070,7 @@ } }, "node_modules/npm/node_modules/promise-call-limit": { - "version": "1.0.1", + "version": "3.0.2", "dev": true, "inBundle": true, "license": "ISC", @@ -9272,12 +11098,15 @@ } }, "node_modules/npm/node_modules/promzard": { - "version": "0.3.0", + "version": "2.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "read": "1" + "read": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/qrcode-terminal": { @@ -9289,87 +11118,37 @@ } }, "node_modules/npm/node_modules/read": { - "version": "1.0.7", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "mute-stream": "~0.0.4" + "mute-stream": "^2.0.0" }, "engines": { - "node": ">=0.8" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/read-cmd-shim": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/read-package-json": { - "version": "5.0.2", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/read-package-json-fast": { - "version": "2.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/read-package-json/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/readable-stream": { - "version": "3.6.0", - "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "json-parse-even-better-errors": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/readdir-scoped-modules": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/retry": { @@ -9382,128 +11161,141 @@ } }, "node_modules/npm/node_modules/rimraf": { - "version": "3.0.2", + "version": "5.0.10", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "glob": "^7.1.3" + "glob": "^10.3.7" }, "bin": { - "rimraf": "bin.js" + "rimraf": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "optional": true }, - "node_modules/npm/node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", + "node_modules/npm/node_modules/semver": { + "version": "7.6.3", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=10" } }, - "node_modules/npm/node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/npm/node_modules/shebang-command": { + "version": "2.0.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "shebang-regex": "^3.0.0" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/npm/node_modules/safe-buffer": { - "version": "5.2.1", + "node_modules/npm/node_modules/shebang-regex": { + "version": "3.0.0", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "inBundle": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/npm/node_modules/safer-buffer": { - "version": "2.1.2", + "node_modules/npm/node_modules/signal-exit": { + "version": "4.1.0", "dev": true, "inBundle": true, - "license": "MIT", - "optional": true + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/npm/node_modules/semver": { - "version": "7.3.7", + "node_modules/npm/node_modules/sigstore": { + "version": "3.0.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@sigstore/bundle": "^3.0.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/sign": "^3.0.0", + "@sigstore/tuf": "^3.0.0", + "@sigstore/verify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle": { + "version": "3.0.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "yallist": "^4.0.0" + "@sigstore/protobuf-specs": "^0.3.2" }, "engines": { - "node": ">=10" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/set-blocking": { + "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core": { "version": "2.0.0", "dev": true, "inBundle": true, - "license": "ISC" + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "node_modules/npm/node_modules/signal-exit": { - "version": "3.0.7", + "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign": { + "version": "3.0.0", "dev": true, "inBundle": true, - "license": "ISC" - }, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.0.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "make-fetch-happen": "^14.0.1", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.0.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/npm/node_modules/smart-buffer": { "version": "4.2.0", "dev": true, @@ -9515,35 +11307,35 @@ } }, "node_modules/npm/node_modules/socks": { - "version": "2.7.0", + "version": "2.8.3", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "7.0.0", + "version": "8.0.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" }, "engines": { - "node": ">= 10" + "node": ">= 14" } }, "node_modules/npm/node_modules/spdx-correct": { - "version": "3.1.1", + "version": "3.2.0", "dev": true, "inBundle": true, "license": "Apache-2.0", @@ -9552,14 +11344,24 @@ "spdx-license-ids": "^3.0.0" } }, + "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.3.0", + "version": "2.5.0", "dev": true, "inBundle": true, "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "3.0.1", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "MIT", @@ -9569,33 +11371,45 @@ } }, "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.11", + "version": "3.0.20", "dev": true, "inBundle": true, "license": "CC0-1.0" }, + "node_modules/npm/node_modules/sprintf-js": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause" + }, "node_modules/npm/node_modules/ssri": { - "version": "9.0.1", + "version": "12.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^3.1.1" + "minipass": "^7.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/string_decoder": { - "version": "1.3.0", + "node_modules/npm/node_modules/string-width": { + "version": "4.2.3", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/npm/node_modules/string-width": { + "node_modules/npm/node_modules/string-width-cjs": { + "name": "string-width", "version": "4.2.3", "dev": true, "inBundle": true, @@ -9621,33 +11435,79 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/npm/node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, + "node_modules/npm/node_modules/supports-color": { + "version": "9.4.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/npm/node_modules/tar": { - "version": "6.1.11", + "version": "6.2.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", + "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "engines": { - "node": ">= 10" + "node": ">=10" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" } }, "node_modules/npm/node_modules/text-table": { @@ -9663,28 +11523,55 @@ "license": "MIT" }, "node_modules/npm/node_modules/treeverse": { - "version": "2.0.0", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "3.0.1", + "debug": "^4.3.6", + "make-fetch-happen": "^14.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/unique-filename": { - "version": "2.0.1", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "unique-slug": "^3.0.0" + "unique-slug": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/unique-slug": { - "version": "3.0.0", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -9692,7 +11579,7 @@ "imurmurhash": "^0.1.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/util-deprecate": { @@ -9711,281 +11598,337 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "4.0.0", + "version": "6.0.0", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "builtins": "^5.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/walk-up-path": { - "version": "1.0.0", + "version": "3.0.1", "dev": true, "inBundle": true, "license": "ISC" }, - "node_modules/npm/node_modules/wcwidth": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, "node_modules/npm/node_modules/which": { - "version": "2.0.2", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" }, "bin": { - "node-which": "bin/node-which" + "node-which": "bin/which.js" }, "engines": { - "node": ">= 8" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/wide-align": { - "version": "1.1.5", + "node_modules/npm/node_modules/which/node_modules/isexe": { + "version": "3.1.1", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" + "engines": { + "node": ">=16" } }, - "node_modules/npm/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "4.0.2", + "node_modules/npm/node_modules/wrap-ansi": { + "version": "8.1.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "dev": true, - "license": "MIT", + "node": ">=12" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/object-keys": { - "version": "1.1.1", + "node_modules/npm/node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", "dev": true, + "inBundle": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/object.assign": { - "version": "4.1.4", + "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "inBundle": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/object.values": { - "version": "1.1.5", + "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", "dev": true, + "inBundle": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/once": { - "version": "1.4.0", + "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } + "inBundle": true, + "license": "MIT" }, - "node_modules/onetime": { + "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { "version": "5.1.2", "dev": true, + "inBundle": true, "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "ansi-regex": "^6.0.1" }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/optionator": { - "version": "0.9.1", + "node_modules/npm/node_modules/write-file-atomic": { + "version": "6.0.0", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/p-each-series": { - "version": "2.2.0", - "dev": true, - "license": "MIT", + "node_modules/npm/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-each-series": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", + "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", + "dev": true, + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-filter": { - "version": "2.1.0", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", + "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", "dev": true, - "license": "MIT", "dependencies": { - "p-map": "^2.0.0" + "p-map": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-is-promise": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/p-limit": { - "version": "2.3.0", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "4.1.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-map": { - "version": "2.1.0", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-reduce": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, "engines": { "node": ">=8" } }, "node_modules/p-try": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -9995,8 +11938,9 @@ }, "node_modules/parse-json": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -10010,54 +11954,94 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, "node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "license": "ISC" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true }, "node_modules/picomatch": { - "version": "2.3.1", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -10065,8 +12049,9 @@ }, "node_modules/pidtree": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, - "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -10076,24 +12061,27 @@ }, "node_modules/pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/pirates": { - "version": "4.0.5", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/pkg-conf": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^2.0.0", "load-json-file": "^4.0.0" @@ -10104,8 +12092,9 @@ }, "node_modules/pkg-conf/node_modules/find-up": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -10115,8 +12104,9 @@ }, "node_modules/pkg-conf/node_modules/locate-path": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -10127,8 +12117,9 @@ }, "node_modules/pkg-conf/node_modules/p-limit": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^1.0.0" }, @@ -10138,8 +12129,9 @@ }, "node_modules/pkg-conf/node_modules/p-locate": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -10149,24 +12141,27 @@ }, "node_modules/pkg-conf/node_modules/p-try": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/pkg-conf/node_modules/path-exists": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/pkg-dir": { "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==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -10174,57 +12169,101 @@ "node": ">=8" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/prettier": { - "version": "2.7.1", + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" + "dependencies": { + "p-locate": "^4.1.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { - "fast-diff": "^1.1.2" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/pretty-format": { - "version": "28.1.3", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -10232,21 +12271,57 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/pretty-ms": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz", + "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", + "dev": true, + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prisma": { + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.22.0.tgz", + "integrity": "sha512-vtpjW3XuYCSnMsNVBjLMNkTj6OZbudcPPTPYHqX0CJfpcdWciI1dM8uHETwmDxxiqEwCIE6WvXucWUetJgfu/A==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@prisma/engines": "5.22.0" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=16.13" + }, + "optionalDependencies": { + "fsevents": "2.3.3" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true }, "node_modules/promise-polyfill": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.2.3.tgz", - "integrity": "sha512-Og0+jCRQetV84U8wVjMNccfGCnMQ9mGs9Hv78QFe+pSDD3gWTpz0y+1QCuxy5d/vBFuZ3iwP2eycAkvqIMPmWg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz", + "integrity": "sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==", "dev": true }, "node_modules/prompts": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, - "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -10255,25 +12330,56 @@ "node": ">= 6" } }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, "node_modules/punycode": { - "version": "2.1.1", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/q": { - "version": "1.5.1", + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/qs": { + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", + "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -10288,21 +12394,22 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/quick-lru": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/rc": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -10313,15 +12420,123 @@ "rc": "cli.js" } }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react-is": { - "version": "18.2.0", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/read-package-up": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", + "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", "dev": true, - "license": "MIT" + "dependencies": { + "find-up-simple": "^1.0.0", + "read-pkg": "^9.0.0", + "type-fest": "^4.6.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-package-up/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/read-package-up/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/read-package-up/node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/read-package-up/node_modules/parse-json": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz", + "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "index-to-position": "^0.1.2", + "type-fest": "^4.7.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-package-up/node_modules/read-pkg": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", + "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-package-up/node_modules/type-fest": { + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.0.tgz", + "integrity": "sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/read-pkg": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, - "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -10334,8 +12549,9 @@ }, "node_modules/read-pkg-up": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -10348,23 +12564,78 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true }, "node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -10373,25 +12644,28 @@ } }, "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.1", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/readable-stream": { - "version": "2.3.7", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -10404,8 +12678,9 @@ }, "node_modules/redent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, - "license": "MIT", "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -10414,74 +12689,43 @@ "node": ">=8" } }, - "node_modules/redeyed": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "esprima": "~4.0.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/registry-auth-token": { - "version": "4.2.2", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.3.tgz", + "integrity": "sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA==", "dev": true, - "license": "MIT", "dependencies": { - "rc": "1.2.8" + "@pnpm/npm-conf": "^2.1.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=14" } }, "node_modules/require-directory": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { - "version": "1.22.1", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "license": "MIT", "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -10494,8 +12738,9 @@ }, "node_modules/resolve-cwd": { "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==", "dev": true, - "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -10505,16 +12750,18 @@ }, "node_modules/resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/resolve-global": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", "dev": true, - "license": "MIT", "dependencies": { "global-dirs": "^0.1.1" }, @@ -10523,74 +12770,118 @@ } }, "node_modules/resolve.exports": { - "version": "1.1.0", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/restore-cursor": { - "version": "3.1.0", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, - "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/retry": { - "version": "0.13.1", + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, - "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, "engines": { - "node": ">= 4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/reusify": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, "node_modules/rfdc": { - "version": "1.3.0", - "dev": true, - "license": "MIT" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true }, "node_modules/rimraf": { - "version": "3.0.2", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rollup": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.2.5.tgz", - "integrity": "sha512-/Ha7HhVVofduy+RKWOQJrxe4Qb3xyZo+chcpYiD8SoQa4AG7llhupUtyfKSSrdBM2mWJjhM8wZwmbY23NmlIYw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", + "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", "fsevents": "~2.3.2" } }, @@ -10609,28 +12900,6 @@ "rollup": "> 1.0" } }, - "node_modules/rollup-plugin-cleaner/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/rollup-plugin-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-4.0.0.tgz", - "integrity": "sha512-hgb8N7Cgfw5SZAkb3jf0QXii6QX/FOkiIq2M7BAQIEydjHvTyxXHQiIzZaTFgx1GK0cRCHOCBHIyEkkLdWKxow==", - "deprecated": "This module has been deprecated and is no longer maintained. Please use @rollup/plugin-json.", - "dev": true, - "dependencies": { - "rollup-pluginutils": "^2.5.0" - } - }, "node_modules/rollup-plugin-peer-deps-external": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/rollup-plugin-peer-deps-external/-/rollup-plugin-peer-deps-external-2.2.4.tgz", @@ -10641,16 +12910,16 @@ } }, "node_modules/rollup-plugin-typescript2": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.34.1.tgz", - "integrity": "sha512-P4cHLtGikESmqi1CA+tdMDUv8WbQV48mzPYt77TSTOPJpERyZ9TXdDgjSDix8Fkqce6soYz3+fa4lrC93IEkcw==", + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz", + "integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==", "dev": true, "dependencies": { "@rollup/pluginutils": "^4.1.2", "find-cache-dir": "^3.3.2", "fs-extra": "^10.0.0", - "semver": "^7.3.7", - "tslib": "^2.4.0" + "semver": "^7.5.4", + "tslib": "^2.6.2" }, "peerDependencies": { "rollup": ">=1.26.3", @@ -10670,23 +12939,42 @@ "node": ">= 8.0.0" } }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "node_modules/rollup-plugin-typescript2/node_modules/fs-extra": { + "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==", "dev": true, "dependencies": { - "estree-walker": "^0.6.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/rollup-pluginutils/node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "node_modules/rollup-plugin-typescript2/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/rollup/node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -10702,8742 +12990,1215 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, - "node_modules/rxjs": { - "version": "7.5.7", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/safe-buffer": { "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "node_modules/semantic-release": { - "version": "19.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@semantic-release/commit-analyzer": "^9.0.2", - "@semantic-release/error": "^3.0.0", - "@semantic-release/github": "^8.0.0", - "@semantic-release/npm": "^9.0.0", - "@semantic-release/release-notes-generator": "^10.0.0", - "aggregate-error": "^3.0.0", - "cosmiconfig": "^7.0.0", + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-24.2.0.tgz", + "integrity": "sha512-fQfn6e/aYToRtVJYKqneFM1Rg3KP2gh3wSWtpYsLlz6uaPKlISrTzvYAFn+mYWo07F0X1Cz5ucU89AVE8X1mbg==", + "dev": true, + "dependencies": { + "@semantic-release/commit-analyzer": "^13.0.0-beta.1", + "@semantic-release/error": "^4.0.0", + "@semantic-release/github": "^11.0.0", + "@semantic-release/npm": "^12.0.0", + "@semantic-release/release-notes-generator": "^14.0.0-beta.1", + "aggregate-error": "^5.0.0", + "cosmiconfig": "^9.0.0", "debug": "^4.0.0", - "env-ci": "^5.0.0", - "execa": "^5.0.0", - "figures": "^3.0.0", - "find-versions": "^4.0.0", + "env-ci": "^11.0.0", + "execa": "^9.0.0", + "figures": "^6.0.0", + "find-versions": "^6.0.0", "get-stream": "^6.0.0", "git-log-parser": "^1.2.0", - "hook-std": "^2.0.0", - "hosted-git-info": "^4.0.0", - "lodash": "^4.17.21", - "marked": "^4.0.10", - "marked-terminal": "^5.0.0", + "hook-std": "^3.0.0", + "hosted-git-info": "^8.0.0", + "import-from-esm": "^1.3.1", + "lodash-es": "^4.17.21", + "marked": "^12.0.0", + "marked-terminal": "^7.0.0", "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "p-reduce": "^2.0.0", - "read-pkg-up": "^7.0.0", + "p-each-series": "^3.0.0", + "p-reduce": "^3.0.0", + "read-package-up": "^11.0.0", "resolve-from": "^5.0.0", "semver": "^7.3.2", - "semver-diff": "^3.1.1", + "semver-diff": "^4.0.0", "signale": "^1.2.1", - "yargs": "^16.2.0" + "yargs": "^17.5.1" }, "bin": { "semantic-release": "bin/semantic-release.js" }, "engines": { - "node": ">=16 || ^14.17" + "node": ">=20.8.1" } }, - "node_modules/semver": { - "version": "7.3.8", + "node_modules/semantic-release/node_modules/@semantic-release/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.3.0" - }, "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node": ">=18" } }, - "node_modules/semver-regex": { - "version": "3.1.4", + "node_modules/semantic-release/node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/shebang-command": { - "version": "2.0.0", + "node_modules/semantic-release/node_modules/aggregate-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", + "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, - "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "clean-stack": "^5.2.0", + "indent-string": "^5.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/signale": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^2.3.2", - "figures": "^2.0.0", - "pkg-conf": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/signale/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/signale/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/signale/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/signale/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/signale/node_modules/figures": { - "version": "2.0.0", + "node_modules/semantic-release/node_modules/clean-stack": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.2.0.tgz", + "integrity": "sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==", "dev": true, - "license": "MIT", "dependencies": { - "escape-string-regexp": "^1.0.5" + "escape-string-regexp": "5.0.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/signale/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/signale/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" + "node": ">=14.16" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/slice-ansi": { - "version": "5.0.0", + "node_modules/semantic-release/node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" }, "engines": { - "node": ">=12" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "url": "https://github.com/sponsors/d-fischer" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", + "node_modules/semantic-release/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/spawn-error-forwarder": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.12", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/split": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "dev": true, - "license": "ISC", - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/split2/node_modules/readable-stream": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/stream-combiner2": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-argv": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", - "dev": true, - "dependencies": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/temp-dir": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tempy": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-extensions": { - "version": "1.9.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/through2": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/traverse": { - "version": "0.6.7", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-jest": { - "version": "28.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^28.0.0", - "json5": "^2.2.1", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^28.0.0", - "babel-jest": "^28.0.0", - "jest": "^28.0.0", - "typescript": ">=4.3" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ts-jest/node_modules/yargs-parser": { - "version": "21.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "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" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "1.4.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "4.8.4", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/universalify": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-join": { - "version": "4.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "9.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.20.1", - "dev": true - }, - "@babel/core": { - "version": "7.19.6", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.6", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helpers": "^7.19.4", - "@babel/parser": "^7.19.6", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.20.1", - "dev": true, - "requires": { - "@babel/types": "^7.20.0", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.0", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "dev": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.19.6", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.19.4", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.6", - "@babel/types": "^7.19.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.19.0", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.19.4", - "dev": true, - "requires": { - "@babel/types": "^7.19.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "dev": true - }, - "@babel/helpers": { - "version": "7.20.1", - "dev": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.20.1", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/template": { - "version": "7.18.10", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.20.1", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.20.0", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true - }, - "@colors/colors": { - "version": "1.5.0", - "dev": true, - "optional": true - }, - "@commitlint/cli": { - "version": "17.2.0", - "dev": true, - "requires": { - "@commitlint/format": "^17.0.0", - "@commitlint/lint": "^17.2.0", - "@commitlint/load": "^17.2.0", - "@commitlint/read": "^17.2.0", - "@commitlint/types": "^17.0.0", - "execa": "^5.0.0", - "lodash": "^4.17.19", - "resolve-from": "5.0.0", - "resolve-global": "1.0.0", - "yargs": "^17.0.0" - }, - "dependencies": { - "cliui": { - "version": "8.0.1", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "yargs": { - "version": "17.6.0", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } - }, - "yargs-parser": { - "version": "21.1.1", - "dev": true - } - } - }, - "@commitlint/config-conventional": { - "version": "17.2.0", - "dev": true, - "requires": { - "conventional-changelog-conventionalcommits": "^5.0.0" - } - }, - "@commitlint/config-validator": { - "version": "17.1.0", - "dev": true, - "requires": { - "@commitlint/types": "^17.0.0", - "ajv": "^8.11.0" - } - }, - "@commitlint/ensure": { - "version": "17.0.0", - "dev": true, - "requires": { - "@commitlint/types": "^17.0.0", - "lodash": "^4.17.19" - } - }, - "@commitlint/execute-rule": { - "version": "17.0.0", - "dev": true - }, - "@commitlint/format": { - "version": "17.0.0", - "dev": true, - "requires": { - "@commitlint/types": "^17.0.0", - "chalk": "^4.1.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "@commitlint/is-ignored": { - "version": "17.2.0", - "dev": true, - "requires": { - "@commitlint/types": "^17.0.0", - "semver": "7.3.7" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@commitlint/lint": { - "version": "17.2.0", - "dev": true, - "requires": { - "@commitlint/is-ignored": "^17.2.0", - "@commitlint/parse": "^17.2.0", - "@commitlint/rules": "^17.2.0", - "@commitlint/types": "^17.0.0" - } - }, - "@commitlint/load": { - "version": "17.2.0", - "dev": true, - "requires": { - "@commitlint/config-validator": "^17.1.0", - "@commitlint/execute-rule": "^17.0.0", - "@commitlint/resolve-extends": "^17.1.0", - "@commitlint/types": "^17.0.0", - "@types/node": "^14.0.0", - "chalk": "^4.1.0", - "cosmiconfig": "^7.0.0", - "cosmiconfig-typescript-loader": "^4.0.0", - "lodash": "^4.17.19", - "resolve-from": "^5.0.0", - "ts-node": "^10.8.1", - "typescript": "^4.6.4" - }, - "dependencies": { - "@types/node": { - "version": "14.18.33", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "@commitlint/message": { - "version": "17.2.0", - "dev": true - }, - "@commitlint/parse": { - "version": "17.2.0", - "dev": true, - "requires": { - "@commitlint/types": "^17.0.0", - "conventional-changelog-angular": "^5.0.11", - "conventional-commits-parser": "^3.2.2" - } - }, - "@commitlint/read": { - "version": "17.2.0", - "dev": true, - "requires": { - "@commitlint/top-level": "^17.0.0", - "@commitlint/types": "^17.0.0", - "fs-extra": "^10.0.0", - "git-raw-commits": "^2.0.0", - "minimist": "^1.2.6" - } - }, - "@commitlint/resolve-extends": { - "version": "17.1.0", - "dev": true, - "requires": { - "@commitlint/config-validator": "^17.1.0", - "@commitlint/types": "^17.0.0", - "import-fresh": "^3.0.0", - "lodash": "^4.17.19", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" - } - }, - "@commitlint/rules": { - "version": "17.2.0", - "dev": true, - "requires": { - "@commitlint/ensure": "^17.0.0", - "@commitlint/message": "^17.2.0", - "@commitlint/to-lines": "^17.0.0", - "@commitlint/types": "^17.0.0", - "execa": "^5.0.0" - } - }, - "@commitlint/to-lines": { - "version": "17.0.0", - "dev": true - }, - "@commitlint/top-level": { - "version": "17.0.0", - "dev": true, - "requires": { - "find-up": "^5.0.0" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - } - } - }, - "@commitlint/types": { - "version": "17.0.0", - "dev": true, - "requires": { - "chalk": "^4.1.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@eslint/eslintrc": { - "version": "1.3.3", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.10.7", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "dev": true - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "dev": true - }, - "@jest/console": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "@jest/core": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/reporters": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^28.1.3", - "jest-config": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-resolve-dependencies": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "jest-watcher": "^28.1.3", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "type-fest": { - "version": "0.21.3", - "dev": true - } - } - }, - "@jest/environment": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3" - } - }, - "@jest/expect": { - "version": "28.1.3", - "dev": true, - "requires": { - "expect": "^28.1.3", - "jest-snapshot": "^28.1.3" - } - }, - "@jest/expect-utils": { - "version": "28.1.3", - "dev": true, - "requires": { - "jest-get-type": "^28.0.2" - } - }, - "@jest/fake-timers": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@sinonjs/fake-timers": "^9.1.2", - "@types/node": "*", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "@jest/globals": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/types": "^28.1.3" - } - }, - "@jest/reporters": { - "version": "28.1.3", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "@jest/schemas": { - "version": "28.1.3", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@jest/source-map": { - "version": "28.1.2", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.13", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - } - } - }, - "@jest/test-result": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/test-result": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "slash": "^3.0.0" - } - }, - "@jest/transform": { - "version": "28.1.3", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^28.1.3", - "@jridgewell/trace-mapping": "^0.3.13", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "@jest/types": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@octokit/auth-token": { - "version": "3.0.2", - "dev": true, - "requires": { - "@octokit/types": "^8.0.0" - } - }, - "@octokit/core": { - "version": "4.1.0", - "dev": true, - "requires": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "7.0.3", - "dev": true, - "requires": { - "@octokit/types": "^8.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/graphql": { - "version": "5.0.4", - "dev": true, - "requires": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/openapi-types": { - "version": "14.0.0", - "dev": true - }, - "@octokit/plugin-paginate-rest": { - "version": "5.0.1", - "dev": true, - "requires": { - "@octokit/types": "^8.0.0" - } - }, - "@octokit/plugin-request-log": { - "version": "1.0.4", - "dev": true, - "requires": {} - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "6.7.0", - "dev": true, - "requires": { - "@octokit/types": "^8.0.0", - "deprecation": "^2.3.1" - } - }, - "@octokit/request": { - "version": "6.2.2", - "dev": true, - "requires": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/request-error": { - "version": "3.0.2", - "dev": true, - "requires": { - "@octokit/types": "^8.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/rest": { - "version": "19.0.5", - "dev": true, - "requires": { - "@octokit/core": "^4.1.0", - "@octokit/plugin-paginate-rest": "^5.0.0", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^6.7.0" - } - }, - "@octokit/types": { - "version": "8.0.0", - "dev": true, - "requires": { - "@octokit/openapi-types": "^14.0.0" - } - }, - "@pkgr/utils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", - "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "is-glob": "^4.0.3", - "open": "^8.4.0", - "picocolors": "^1.0.0", - "tiny-glob": "^0.2.9", - "tslib": "^2.4.0" - } - }, - "@rollup/plugin-commonjs": { - "version": "23.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-23.0.2.tgz", - "integrity": "sha512-e9ThuiRf93YlVxc4qNIurvv+Hp9dnD+4PjOqQs5vAYfcZ3+AXSrcdzXnVjWxcGQOa6KGJFcRZyUI3ktWLavFjg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "glob": "^8.0.3", - "is-reference": "1.2.1", - "magic-string": "^0.26.4" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "@rollup/plugin-node-resolve": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", - "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.0", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - } - }, - "@rollup/plugin-replace": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.1.tgz", - "integrity": "sha512-Z3MfsJ4CK17BfGrZgvrcp/l6WXoKb0kokULO+zt/7bmcyayokDaQ2K3eDJcRLCTAlp5FPI4/gz9MHAsosz4Rag==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.1", - "magic-string": "^0.26.4" - } - }, - "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } - }, - "@semantic-release/changelog": { - "version": "6.0.1", - "dev": true, - "requires": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "fs-extra": "^9.0.0", - "lodash": "^4.17.4" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@semantic-release/commit-analyzer": { - "version": "9.0.2", - "dev": true, - "requires": { - "conventional-changelog-angular": "^5.0.0", - "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.2.3", - "debug": "^4.0.0", - "import-from": "^4.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.2" - } - }, - "@semantic-release/error": { - "version": "3.0.0", - "dev": true - }, - "@semantic-release/git": { - "version": "10.0.1", - "dev": true, - "requires": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "debug": "^4.0.0", - "dir-glob": "^3.0.0", - "execa": "^5.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.0", - "p-reduce": "^2.0.0" - } - }, - "@semantic-release/github": { - "version": "8.0.6", - "dev": true, - "requires": { - "@octokit/rest": "^19.0.0", - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "bottleneck": "^2.18.1", - "debug": "^4.0.0", - "dir-glob": "^3.0.0", - "fs-extra": "^10.0.0", - "globby": "^11.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "issue-parser": "^6.0.0", - "lodash": "^4.17.4", - "mime": "^3.0.0", - "p-filter": "^2.0.0", - "p-retry": "^4.0.0", - "url-join": "^4.0.0" - } - }, - "@semantic-release/npm": { - "version": "9.0.1", - "dev": true, - "requires": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "execa": "^5.0.0", - "fs-extra": "^10.0.0", - "lodash": "^4.17.15", - "nerf-dart": "^1.0.0", - "normalize-url": "^6.0.0", - "npm": "^8.3.0", - "rc": "^1.2.8", - "read-pkg": "^5.0.0", - "registry-auth-token": "^4.0.0", - "semver": "^7.1.2", - "tempy": "^1.0.0" - } - }, - "@semantic-release/release-notes-generator": { - "version": "10.0.3", - "dev": true, - "requires": { - "conventional-changelog-angular": "^5.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.2.3", - "debug": "^4.0.0", - "get-stream": "^6.0.0", - "import-from": "^4.0.0", - "into-stream": "^6.0.0", - "lodash": "^4.17.4", - "read-pkg-up": "^7.0.0" - } - }, - "@sentry-internal/tracing": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.81.1.tgz", - "integrity": "sha512-E5xm27xrLXL10knH2EWDQsQYh5nb4SxxZzJ3sJwDGG9XGKzBdlp20UUhKqx00wixooVX9uCj3e4Jg8SvNB1hKg==", - "requires": { - "@sentry/core": "7.81.1", - "@sentry/types": "7.81.1", - "@sentry/utils": "7.81.1" - } - }, - "@sentry/core": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.81.1.tgz", - "integrity": "sha512-tU37yAmckOGCw/moWKSwekSCWWJP15O6luIq+u7wal22hE88F3Vc5Avo8SeF3upnPR+4ejaOFH+BJTr6bgrs6Q==", - "requires": { - "@sentry/types": "7.81.1", - "@sentry/utils": "7.81.1" - } - }, - "@sentry/node": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.81.1.tgz", - "integrity": "sha512-bKS3Mb95bar8AUEZSLKQ/RTSfFXo5sCSPNiBr5dDFuVljDFdkLq6NE3svG5bisrbENqfi0bqWsB4GZ7NHRTPbA==", - "requires": { - "@sentry-internal/tracing": "7.81.1", - "@sentry/core": "7.81.1", - "@sentry/types": "7.81.1", - "@sentry/utils": "7.81.1", - "https-proxy-agent": "^5.0.0" - } - }, - "@sentry/types": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.81.1.tgz", - "integrity": "sha512-dvJvGyctiaPMIQqa46k56Re5IODWMDxiHJ1UjBs/WYDLrmWFPGrEbyJ8w8CYLhYA+7qqrCyIZmHbWSTRIxstHw==" - }, - "@sentry/utils": { - "version": "7.81.1", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.81.1.tgz", - "integrity": "sha512-gq+MDXIirHKxNZ+c9/lVvCXd6y2zaZANujwlFggRH2u9SRiPaIXVilLpvMm4uJqmqBMEcY81ArujExtHvkbCqg==", - "requires": { - "@sentry/types": "7.81.1" - } - }, - "@sinclair/typebox": { - "version": "0.24.51", - "dev": true - }, - "@sinonjs/commons": { - "version": "1.8.3", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "9.1.2", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.9", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.19", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.18.2", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "@types/graceful-fs": { - "version": "4.1.5", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/isomorphic-fetch": { - "version": "0.0.36", - "resolved": "https://registry.npmjs.org/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.36.tgz", - "integrity": "sha512-ulw4d+vW1HKn4oErSmNN2HYEcHGq0N1C5exlrMM0CRqX1UUpFhGb5lwiom5j9KN3LBJJDLRmYIZz1ghm7FIzZw==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "28.1.8", - "dev": true, - "requires": { - "expect": "^28.0.0", - "pretty-format": "^28.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "dev": true - }, - "@types/jsrsasign": { - "version": "10.5.14", - "resolved": "https://registry.npmjs.org/@types/jsrsasign/-/jsrsasign-10.5.14.tgz", - "integrity": "sha512-lppSlfK6etu+cuKs40K4rg8As79PH6hzIB+v55zSqImbSH3SE6Fm8MBHCiI91cWlAP3Z4igtJK1VL3fSN09blQ==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.2", - "dev": true - }, - "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "dev": true - }, - "@types/prettier": { - "version": "2.7.1", - "dev": true - }, - "@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true - }, - "@types/retry": { - "version": "0.12.0", - "dev": true - }, - "@types/semver": { - "version": "7.3.13", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "dev": true - }, - "@types/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==", - "dev": true - }, - "@types/yargs": { - "version": "17.0.13", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.42.0", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.42.0", - "@typescript-eslint/type-utils": "5.42.0", - "@typescript-eslint/utils": "5.42.0", - "debug": "^4.3.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.42.0", - "dev": true, - "peer": true, - "requires": { - "@typescript-eslint/scope-manager": "5.42.0", - "@typescript-eslint/types": "5.42.0", - "@typescript-eslint/typescript-estree": "5.42.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.42.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.42.0", - "@typescript-eslint/visitor-keys": "5.42.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.42.0", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "5.42.0", - "@typescript-eslint/utils": "5.42.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.42.0", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.42.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.42.0", - "@typescript-eslint/visitor-keys": "5.42.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.42.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.42.0", - "@typescript-eslint/types": "5.42.0", - "@typescript-eslint/typescript-estree": "5.42.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.42.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.42.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "acorn": { - "version": "8.8.1", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "requires": { - "debug": "4" - } - }, - "aggregate-error": { - "version": "3.1.0", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "8.11.0", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "5.0.0", - "dev": true, - "requires": { - "type-fest": "^1.0.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "ansicolors": { - "version": "0.3.2", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "dev": true - }, - "argv-formatter": { - "version": "1.0.0", - "dev": true - }, - "array-ify": { - "version": "1.0.0", - "dev": true - }, - "array-includes": { - "version": "3.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "dev": true - }, - "array.prototype.flat": { - "version": "1.3.0", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - } - }, - "arrify": { - "version": "1.0.1", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "dev": true - }, - "babel-jest": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/transform": "^28.1.3", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.1.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "28.1.3", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "28.1.3", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^28.1.3", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "dev": true - }, - "before-after-hook": { - "version": "2.2.3", - "dev": true - }, - "bottleneck": { - "version": "2.19.5", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.4", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - } - }, - "bs-logger": { - "version": "0.2.6", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "dev": true - }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "caniuse-lite": { - "version": "1.0.30001429", - "dev": true - }, - "cardinal": { - "version": "2.1.1", - "dev": true, - "requires": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - } - }, - "chalk": { - "version": "5.1.2", - "dev": true - }, - "char-regex": { - "version": "1.0.2", - "dev": true - }, - "ci-info": { - "version": "3.5.0", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.2", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-table3": { - "version": "0.6.3", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "cli-truncate": { - "version": "3.1.0", - "dev": true, - "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "cliui": { - "version": "7.0.4", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "co": { - "version": "4.6.0", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "colorette": { - "version": "2.0.19", - "dev": true - }, - "commander": { - "version": "9.4.1", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "compare-func": { - "version": "2.0.0", - "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "concat-map": { - "version": "0.0.1", - "dev": true - }, - "conventional-changelog-angular": { - "version": "5.0.13", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - } - }, - "conventional-changelog-conventionalcommits": { - "version": "5.0.0", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "lodash": "^4.17.15", - "q": "^1.5.1" - } - }, - "conventional-changelog-writer": { - "version": "5.0.1", - "dev": true, - "requires": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "conventional-commits-filter": { - "version": "2.0.7", - "dev": true, - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - } - }, - "conventional-commits-parser": { - "version": "3.2.4", - "dev": true, - "requires": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } - }, - "convert-source-map": { - "version": "1.9.0", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.1", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cosmiconfig-typescript-loader": { - "version": "4.2.0", - "dev": true, - "requires": {} - }, - "create-require": { - "version": "1.1.1", - "dev": true - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "dev": true - }, - "dargs": { - "version": "7.0.0", - "dev": true - }, - "dateformat": { - "version": "3.0.3", - "dev": true - }, - "debug": { - "version": "4.3.4", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.1", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "dev": true - } - } - }, - "dedent": { - "version": "0.7.0", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "dev": true - }, - "deep-is": { - "version": "0.1.4", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "dev": true - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "del": { - "version": "6.1.1", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "p-map": { - "version": "4.0.0", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - } - } - }, - "deprecation": { - "version": "2.3.1", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "dev": true - }, - "diff": { - "version": "4.0.2", - "dev": true - }, - "diff-sequences": { - "version": "28.1.1", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dot-prop": { - "version": "5.3.0", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.284", - "dev": true - }, - "emittery": { - "version": "0.10.2", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "env-ci": { - "version": "5.5.0", - "dev": true, - "requires": { - "execa": "^5.0.0", - "fromentries": "^1.3.2", - "java-properties": "^1.0.0" - } - }, - "error-ex": { - "version": "1.3.2", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.20.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true - }, - "eslint": { - "version": "8.23.1", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.2", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", - "@humanwhocodes/module-importer": "^1.0.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "dev": true - }, - "eslint-scope": { - "version": "7.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "dev": true, - "requires": {} - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-import-resolver-typescript": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz", - "integrity": "sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==", - "dev": true, - "requires": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.10.0", - "get-tsconfig": "^4.2.0", - "globby": "^13.1.2", - "is-core-module": "^2.10.0", - "is-glob": "^4.0.3", - "synckit": "^0.8.4" - }, - "dependencies": { - "globby": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", - "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", - "dev": true, - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - } - } - }, - "eslint-module-utils": { - "version": "2.7.4", - "dev": true, - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-import": { - "version": "2.26.0", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "eslint-plugin-jest": { - "version": "26.9.0", - "dev": true, - "requires": { - "@typescript-eslint/utils": "^5.10.0" - } - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-unused-imports": { - "version": "2.0.0", - "dev": true, - "requires": { - "eslint-rule-composer": "^0.3.0" - } - }, - "eslint-rule-composer": { - "version": "0.3.0", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "dev": true - }, - "espree": { - "version": "9.4.0", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "execa": { - "version": "5.1.1", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "dev": true - }, - "expect": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.2", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "figures": { - "version": "3.2.0", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "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==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "find-versions": { - "version": "4.0.0", - "dev": true, - "requires": { - "semver-regex": "^3.1.2" - } - }, - "flat-cache": { - "version": "3.0.4", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "dev": true - }, - "from2": { - "version": "2.3.0", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fromentries": { - "version": "1.3.2", - "dev": true - }, - "fs-extra": { - "version": "10.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "get-tsconfig": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.4.0.tgz", - "integrity": "sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==", - "dev": true - }, - "git-log-parser": { - "version": "1.2.0", - "dev": true, - "requires": { - "argv-formatter": "~1.0.0", - "spawn-error-forwarder": "~1.0.0", - "split2": "~1.0.0", - "stream-combiner2": "~1.1.1", - "through2": "~2.0.0", - "traverse": "~0.6.6" - }, - "dependencies": { - "split2": { - "version": "1.0.0", - "dev": true, - "requires": { - "through2": "~2.0.0" - } - }, - "through2": { - "version": "2.0.5", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - } - } - }, - "git-raw-commits": { - "version": "2.0.11", - "dev": true, - "requires": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } - }, - "glob": { - "version": "7.2.3", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-dirs": { - "version": "0.1.1", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "globals": { - "version": "13.17.0", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - }, - "dependencies": { - "type-fest": { - "version": "0.20.2", - "dev": true - } - } - }, - "globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.10", - "dev": true - }, - "grapheme-splitter": { - "version": "1.0.4", - "dev": true - }, - "handlebars": { - "version": "4.7.7", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "hard-rejection": { - "version": "2.1.0", - "dev": true - }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hook-std": { - "version": "2.0.0", - "dev": true - }, - "hosted-git-info": { - "version": "4.1.0", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "html-escaper": { - "version": "2.0.2", - "dev": true - }, - "http-proxy-agent": { - "version": "5.0.0", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "dev": true - }, - "husky": { - "version": "8.0.1", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "dev": true - } - } - }, - "import-from": { - "version": "4.0.0", - "dev": true - }, - "import-local": { - "version": "3.1.0", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "dev": true - }, - "ini": { - "version": "1.3.8", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "into-stream": { - "version": "6.0.0", - "dev": true, - "requires": { - "from2": "^2.3.0", - "p-is-promise": "^3.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-builtin-module": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz", - "integrity": "sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==", - "dev": true, - "requires": { - "builtin-modules": "^3.3.0" - } - }, - "is-callable": { - "version": "1.2.7", - "dev": true - }, - "is-core-module": { - "version": "2.11.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "dev": true - }, - "is-path-cwd": { - "version": "2.2.0", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "dev": true - }, - "is-plain-object": { - "version": "5.0.0", - "dev": true - }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "is-regex": { - "version": "1.1.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-text-path": { - "version": "1.0.1", - "dev": true, - "requires": { - "text-extensions": "^1.0.0" - } - }, - "is-weakref": { - "version": "1.0.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, - "isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "dev": true, - "requires": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" - } - }, - "issue-parser": { - "version": "6.0.0", - "dev": true, - "requires": { - "lodash.capitalize": "^4.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.uniqby": "^4.7.0" - } - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.5", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "java-properties": { - "version": "1.0.2", - "dev": true - }, - "jest": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/core": "^28.1.3", - "@jest/types": "^28.1.3", - "import-local": "^3.0.2", - "jest-cli": "^28.1.3" - } - }, - "jest-changed-files": { - "version": "28.1.3", - "dev": true, - "requires": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "dependencies": { - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - } - } - }, - "jest-circus": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/expect": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "p-limit": "^3.1.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - } - } - }, - "jest-cli": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/core": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cliui": { - "version": "8.0.1", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "yargs": { - "version": "17.6.0", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } - }, - "yargs-parser": { - "version": "21.1.1", - "dev": true - } - } - }, - "jest-config": { - "version": "28.1.3", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.3", - "@jest/types": "^28.1.3", - "babel-jest": "^28.1.3", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.3", - "jest-environment-node": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-runner": "^28.1.3", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - } - } - }, - "jest-diff": { - "version": "28.1.3", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-docblock": { - "version": "28.1.1", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.3", - "pretty-format": "^28.1.3" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-environment-node": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "jest-mock": "^28.1.3", - "jest-util": "^28.1.3" - } - }, - "jest-fetch-mock": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz", - "integrity": "sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==", - "dev": true, - "requires": { - "cross-fetch": "^3.0.4", - "promise-polyfill": "^8.1.3" - } - }, - "jest-get-type": { - "version": "28.0.2", - "dev": true - }, - "jest-haste-map": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.3", - "jest-worker": "^28.1.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - } - }, - "jest-leak-detector": { - "version": "28.1.3", - "dev": true, - "requires": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - } - }, - "jest-matcher-utils": { - "version": "28.1.3", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-message-util": { - "version": "28.1.3", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-mock": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "28.0.2", - "dev": true - }, - "jest-resolve": { - "version": "28.1.3", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.3", - "jest-validate": "^28.1.3", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "28.1.3", - "dev": true, - "requires": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.3" - } - }, - "jest-runner": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/environment": "^28.1.3", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "graceful-fs": "^4.2.9", - "jest-docblock": "^28.1.1", - "jest-environment-node": "^28.1.3", - "jest-haste-map": "^28.1.3", - "jest-leak-detector": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-resolve": "^28.1.3", - "jest-runtime": "^28.1.3", - "jest-util": "^28.1.3", - "jest-watcher": "^28.1.3", - "jest-worker": "^28.1.3", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - } - } - }, - "jest-runtime": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/environment": "^28.1.3", - "@jest/fake-timers": "^28.1.3", - "@jest/globals": "^28.1.3", - "@jest/source-map": "^28.1.2", - "@jest/test-result": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-mock": "^28.1.3", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.3", - "jest-snapshot": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "strip-bom": { - "version": "4.0.0", - "dev": true - } - } - }, - "jest-snapshot": { - "version": "28.1.3", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.3", - "@jest/transform": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^28.1.3", - "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.3", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "natural-compare": "^1.4.0", - "pretty-format": "^28.1.3", - "semver": "^7.3.5" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-util": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-validate": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "leven": "^3.1.0", - "pretty-format": "^28.1.3" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-watcher": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "type-fest": { - "version": "0.21.3", - "dev": true - } - } - }, - "jest-worker": { - "version": "28.1.3", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-sdsl": { - "version": "4.1.5", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsesc": { - "version": "2.5.2", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "dev": true - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonparse": { - "version": "1.3.1", - "dev": true - }, - "JSONStream": { - "version": "1.3.5", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "jsrsasign": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-11.1.0.tgz", - "integrity": "sha512-Ov74K9GihaK9/9WncTe1mPmvrO7Py665TUfUKvraXBpu+xcTWitrtuOwcjf4KMU9maPaYn0OuaWy0HOzy/GBXg==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "dev": true - }, - "leven": { - "version": "3.1.0", - "dev": true - }, - "levn": { - "version": "0.4.1", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.0.5", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "dev": true - }, - "lint-staged": { - "version": "13.0.3", - "dev": true, - "requires": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.17", - "commander": "^9.3.0", - "debug": "^4.3.4", - "execa": "^6.1.0", - "lilconfig": "2.0.5", - "listr2": "^4.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.1.1" - }, - "dependencies": { - "execa": { - "version": "6.1.0", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - } - }, - "human-signals": { - "version": "3.0.1", - "dev": true - }, - "is-stream": { - "version": "3.0.0", - "dev": true - }, - "mimic-fn": { - "version": "4.0.0", - "dev": true - }, - "npm-run-path": { - "version": "5.1.0", - "dev": true, - "requires": { - "path-key": "^4.0.0" - } - }, - "onetime": { - "version": "6.0.0", - "dev": true, - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "path-key": { - "version": "4.0.0", - "dev": true - }, - "strip-final-newline": { - "version": "3.0.0", - "dev": true - }, - "yaml": { - "version": "2.1.3", - "dev": true - } - } - }, - "listr2": { - "version": "4.0.5", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "cli-truncate": { - "version": "2.1.0", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "slice-ansi": { - "version": "3.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - } - } - }, - "load-json-file": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - } - } - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "dev": true - }, - "lodash.capitalize": { - "version": "4.2.1", - "dev": true - }, - "lodash.escaperegexp": { - "version": "4.1.2", - "dev": true - }, - "lodash.ismatch": { - "version": "4.4.0", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "dev": true - }, - "lodash.isstring": { - "version": "4.0.1", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "dev": true - }, - "lodash.uniqby": { - "version": "4.7.0", - "dev": true - }, - "log-update": { - "version": "4.0.0", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "slice-ansi": { - "version": "4.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "type-fest": { - "version": "0.21.3", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "magic-string": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", - "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "dev": true - }, - "makeerror": { - "version": "1.0.12", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "map-obj": { - "version": "4.3.0", - "dev": true - }, - "marked": { - "version": "4.2.0", - "dev": true - }, - "marked-terminal": { - "version": "5.1.1", - "dev": true, - "requires": { - "ansi-escapes": "^5.0.0", - "cardinal": "^2.1.1", - "chalk": "^5.0.0", - "cli-table3": "^0.6.1", - "node-emoji": "^1.11.0", - "supports-hyperlinks": "^2.2.0" - } - }, - "meow": { - "version": "8.1.2", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "dependencies": { - "type-fest": { - "version": "0.18.1", - "dev": true - } - } - }, - "merge-stream": { - "version": "2.0.0", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "3.0.0", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "dev": true - }, - "min-indent": { - "version": "1.0.1", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "dev": true - }, - "minimist-options": { - "version": "4.1.0", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - } - }, - "modify-values": { - "version": "1.0.1", - "dev": true - }, - "ms": { - "version": "2.1.2" - }, - "natural-compare": { - "version": "1.4.0", - "dev": true - }, - "natural-compare-lite": { - "version": "1.4.0", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "dev": true - }, - "nerf-dart": { - "version": "1.0.0", - "dev": true - }, - "node-emoji": { - "version": "1.11.0", - "dev": true, - "requires": { - "lodash": "^4.17.21" - } - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-int64": { - "version": "0.4.0", - "dev": true - }, - "node-releases": { - "version": "2.0.6", - "dev": true - }, - "normalize-package-data": { - "version": "3.0.3", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "dev": true - }, - "npm": { - "version": "8.19.2", - "dev": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^5.6.2", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/config": "^4.2.1", - "@npmcli/fs": "^2.1.0", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^4.2.1", - "abbrev": "~1.1.1", - "archy": "~1.0.0", - "cacache": "^16.1.3", - "chalk": "^4.1.2", - "chownr": "^2.0.0", - "cli-columns": "^4.0.0", - "cli-table3": "^0.6.2", - "columnify": "^1.6.0", - "fastest-levenshtein": "^1.0.12", - "glob": "^8.0.1", - "graceful-fs": "^4.2.10", - "hosted-git-info": "^5.1.0", - "ini": "^3.0.1", - "init-package-json": "^3.0.2", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^2.3.1", - "libnpmaccess": "^6.0.4", - "libnpmdiff": "^4.0.5", - "libnpmexec": "^4.0.13", - "libnpmfund": "^3.0.4", - "libnpmhook": "^8.0.4", - "libnpmorg": "^4.0.4", - "libnpmpack": "^4.1.3", - "libnpmpublish": "^6.0.5", - "libnpmsearch": "^5.0.4", - "libnpmteam": "^4.0.4", - "libnpmversion": "^3.0.7", - "make-fetch-happen": "^10.2.0", - "minipass": "^3.1.6", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "ms": "^2.1.2", - "node-gyp": "^9.1.0", - "nopt": "^6.0.0", - "npm-audit-report": "^3.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.1.0", - "npm-pick-manifest": "^7.0.2", - "npm-profile": "^6.2.0", - "npm-registry-fetch": "^13.3.1", - "npm-user-validate": "^1.0.1", - "npmlog": "^6.0.2", - "opener": "^1.5.2", - "p-map": "^4.0.0", - "pacote": "^13.6.2", - "parse-conflict-json": "^2.0.2", - "proc-log": "^2.0.1", - "qrcode-terminal": "^0.12.0", - "read": "~1.0.7", - "read-package-json": "^5.0.2", - "read-package-json-fast": "^2.0.3", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.1", - "tar": "^6.1.11", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^2.0.0", - "validate-npm-package-name": "^4.0.0", - "which": "^2.0.2", - "write-file-atomic": "^4.0.1" - }, - "dependencies": { - "@colors/colors": { - "version": "1.5.0", - "bundled": true, - "dev": true, - "optional": true - }, - "@gar/promisify": { - "version": "1.1.3", - "bundled": true, - "dev": true - }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "@npmcli/arborist": { - "version": "5.6.2", - "bundled": true, - "dev": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/query": "^1.2.0", - "@npmcli/run-script": "^4.1.3", - "bin-links": "^3.0.3", - "cacache": "^16.1.3", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "minimatch": "^5.1.0", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^6.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.2", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", - "walk-up-path": "^1.0.0" - } - }, - "@npmcli/ci-detect": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "@npmcli/config": { - "version": "4.2.2", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/map-workspaces": "^2.0.2", - "ini": "^3.0.0", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^6.0.0", - "proc-log": "^2.0.0", - "read-package-json-fast": "^2.0.3", - "semver": "^7.3.5", - "walk-up-path": "^1.0.0" - } - }, - "@npmcli/disparity-colors": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.3.0" - } - }, - "@npmcli/fs": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "bundled": true, - "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "dependencies": { - "npm-bundled": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - } - } - }, - "@npmcli/map-workspaces": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" - } - }, - "@npmcli/metavuln-calculator": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "requires": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", - "semver": "^7.3.5" - } - }, - "@npmcli/move-file": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@npmcli/name-from-folder": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "@npmcli/node-gyp": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "@npmcli/package-json": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1" - } - }, - "@npmcli/promise-spawn": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/query": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "npm-package-arg": "^9.1.0", - "postcss-selector-parser": "^6.0.10", - "semver": "^7.3.7" - } - }, - "@npmcli/run-script": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "bundled": true, - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "aproba": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "archy": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "asap": { - "version": "2.0.6", - "bundled": true, - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "bin-links": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "requires": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "bundled": true, - "dev": true - } - } - }, - "binary-extensions": { - "version": "2.2.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "builtins": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "cacache": { - "version": "16.1.3", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" - } - }, - "chalk": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chownr": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "cidr-regex": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "requires": { - "ip-regex": "^4.1.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "bundled": true, - "dev": true - }, - "cli-columns": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - } - }, - "cli-table3": { - "version": "0.6.2", - "bundled": true, - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "clone": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "cmd-shim": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "mkdirp-infer-owner": "^2.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "bundled": true, - "dev": true - }, - "color-support": { - "version": "1.1.3", - "bundled": true, - "dev": true - }, - "columnify": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "requires": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - } - }, - "common-ancestor-path": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "debug": { - "version": "4.3.4", - "bundled": true, - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true - } - } - }, - "debuglog": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "defaults": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "depd": { - "version": "1.1.2", - "bundled": true, - "dev": true - }, - "dezalgo": { - "version": "1.0.4", - "bundled": true, - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "diff": { - "version": "5.1.0", - "bundled": true, - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "bundled": true, - "dev": true - }, - "encoding": { - "version": "0.1.13", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "env-paths": { - "version": "2.2.1", - "bundled": true, - "dev": true - }, - "err-code": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.12", - "bundled": true, - "dev": true - }, - "fs-minipass": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "gauge": { - "version": "4.0.4", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "glob": { - "version": "8.0.3", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "bundled": true, - "dev": true - }, - "has": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "hosted-git-info": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "http-proxy-agent": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "humanize-ms": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ignore-walk": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "requires": { - "minimatch": "^5.0.1" - } - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true, - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "dev": true - }, - "ini": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "init-package-json": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "npm-package-arg": "^9.0.1", - "promzard": "^0.3.0", - "read": "^1.0.7", - "read-package-json": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0" - } - }, - "ip": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "ip-regex": { - "version": "4.3.0", - "bundled": true, - "dev": true - }, - "is-cidr": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "cidr-regex": "^3.1.1" - } - }, - "is-core-module": { - "version": "2.10.0", - "bundled": true, - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "is-lambda": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "bundled": true, - "dev": true - }, - "json-stringify-nice": { - "version": "1.1.4", - "bundled": true, - "dev": true - }, - "jsonparse": { - "version": "1.3.1", - "bundled": true, - "dev": true - }, - "just-diff": { - "version": "5.1.1", - "bundled": true, - "dev": true - }, - "just-diff-apply": { - "version": "5.4.1", - "bundled": true, - "dev": true - }, - "libnpmaccess": { - "version": "6.0.4", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0" - } - }, - "libnpmdiff": { - "version": "4.0.5", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/disparity-colors": "^2.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "binary-extensions": "^2.2.0", - "diff": "^5.1.0", - "minimatch": "^5.0.1", - "npm-package-arg": "^9.0.1", - "pacote": "^13.6.1", - "tar": "^6.1.0" - } - }, - "libnpmexec": { - "version": "4.0.13", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/arborist": "^5.6.2", - "@npmcli/ci-detect": "^2.0.0", - "@npmcli/fs": "^2.1.1", - "@npmcli/run-script": "^4.2.0", - "chalk": "^4.1.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-package-arg": "^9.0.1", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "proc-log": "^2.0.0", - "read": "^1.0.7", - "read-package-json-fast": "^2.0.2", - "semver": "^7.3.7", - "walk-up-path": "^1.0.0" - } - }, - "libnpmfund": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/arborist": "^5.6.2" - } - }, - "libnpmhook": { - "version": "8.0.4", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - } - }, - "libnpmorg": { - "version": "4.0.4", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - } - }, - "libnpmpack": { - "version": "4.1.3", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/run-script": "^4.1.3", - "npm-package-arg": "^9.0.1", - "pacote": "^13.6.1" - } - }, - "libnpmpublish": { - "version": "6.0.5", - "bundled": true, - "dev": true, - "requires": { - "normalize-package-data": "^4.0.0", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0", - "semver": "^7.3.7", - "ssri": "^9.0.0" - } - }, - "libnpmsearch": { - "version": "5.0.4", - "bundled": true, - "dev": true, - "requires": { - "npm-registry-fetch": "^13.0.0" - } - }, - "libnpmteam": { - "version": "4.0.4", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^13.0.0" - } - }, - "libnpmversion": { - "version": "3.0.7", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/run-script": "^4.1.3", - "json-parse-even-better-errors": "^2.3.1", - "proc-log": "^2.0.0", - "semver": "^7.3.7" - } - }, - "lru-cache": { - "version": "7.13.2", - "bundled": true, - "dev": true - }, - "make-fetch-happen": { - "version": "10.2.1", - "bundled": true, - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - } - }, - "minimatch": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minipass": { - "version": "3.3.4", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "minipass-flush": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "mkdirp-infer-owner": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - } - }, - "ms": { - "version": "2.1.3", - "bundled": true, - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "bundled": true, - "dev": true - }, - "node-gyp": { - "version": "9.1.0", - "bundled": true, - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "nopt": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "abbrev": "1" - } - } - } - }, - "nopt": { - "version": "6.0.0", - "bundled": true, - "dev": true, - "requires": { - "abbrev": "^1.0.0" - } - }, - "normalize-package-data": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "npm-audit-report": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "npm-bundled": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "bundled": true, - "dev": true - } - } - }, - "npm-install-checks": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "npm-package-arg": { - "version": "9.1.0", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "npm-packlist": { - "version": "5.1.3", - "bundled": true, - "dev": true, - "requires": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "bundled": true, - "dev": true - } - } - }, - "npm-pick-manifest": { - "version": "7.0.2", - "bundled": true, - "dev": true, - "requires": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^2.0.0", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "bundled": true, - "dev": true - } - } - }, - "npm-profile": { - "version": "6.2.1", - "bundled": true, - "dev": true, - "requires": { - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0" - } - }, - "npm-registry-fetch": { - "version": "13.3.1", - "bundled": true, - "dev": true, - "requires": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - } - }, - "npm-user-validate": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "npmlog": { - "version": "6.0.2", - "bundled": true, - "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "opener": { - "version": "1.5.2", - "bundled": true, - "dev": true - }, - "p-map": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "pacote": { - "version": "13.6.2", - "bundled": true, - "dev": true, - "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" - } - }, - "parse-conflict-json": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1", - "just-diff": "^5.0.1", - "just-diff-apply": "^5.2.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "postcss-selector-parser": { - "version": "6.0.10", - "bundled": true, - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "proc-log": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "promise-all-reject-late": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "promise-call-limit": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "promzard": { - "version": "0.3.0", - "bundled": true, - "dev": true, - "requires": { - "read": "1" - } - }, - "qrcode-terminal": { - "version": "0.12.0", - "bundled": true, - "dev": true - }, - "read": { - "version": "1.0.7", - "bundled": true, - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-cmd-shim": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "read-package-json": { - "version": "5.0.2", - "bundled": true, - "dev": true, - "requires": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "bundled": true, - "dev": true - } - } - }, - "read-package-json-fast": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdir-scoped-modules": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "retry": { - "version": "0.12.0", - "bundled": true, - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "safe-buffer": { - "version": "5.2.1", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "7.3.7", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.7", - "bundled": true, - "dev": true - }, - "smart-buffer": { - "version": "4.2.0", - "bundled": true, - "dev": true - }, - "socks": { - "version": "2.7.0", - "bundled": true, - "dev": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "bundled": true, - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "spdx-correct": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "bundled": true, - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "bundled": true, - "dev": true - }, - "ssri": { - "version": "9.0.1", - "bundled": true, - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "bundled": true, - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tar": { - "version": "6.1.11", - "bundled": true, - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "bundled": true, - "dev": true - }, - "tiny-relative-date": { - "version": "1.3.0", - "bundled": true, - "dev": true - }, - "treeverse": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "unique-filename": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "unique-slug": "^3.0.0" - } - }, - "unique-slug": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "walk-up-path": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "wcwidth": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "which": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "write-file-atomic": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "yallist": { - "version": "4.0.0", - "bundled": true, - "dev": true - } - } - }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "object-inspect": { - "version": "1.12.2", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.values": { - "version": "1.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "once": { - "version": "1.4.0", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "optionator": { - "version": "0.9.1", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-each-series": { - "version": "2.2.0", - "dev": true - }, - "p-filter": { - "version": "2.1.0", - "dev": true, - "requires": { - "p-map": "^2.0.0" - } - }, - "p-is-promise": { - "version": "3.0.0", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "2.1.0", - "dev": true - }, - "p-reduce": { - "version": "2.1.0", - "dev": true - }, - "p-retry": { - "version": "4.6.2", - "dev": true, - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - } - }, - "p-try": { - "version": "2.2.0", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "dev": true - }, - "pidtree": { - "version": "0.6.0", - "dev": true - }, - "pify": { - "version": "3.0.0", - "dev": true - }, - "pirates": { - "version": "4.0.5", - "dev": true - }, - "pkg-conf": { - "version": "2.1.0", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "dev": true - } - } - }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "prelude-ls": { - "version": "1.2.1", - "dev": true - }, - "prettier": { - "version": "2.7.1", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-format": { - "version": "28.1.3", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "dev": true - } - } - }, - "process-nextick-args": { - "version": "2.0.1", - "dev": true - }, - "promise-polyfill": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.2.3.tgz", - "integrity": "sha512-Og0+jCRQetV84U8wVjMNccfGCnMQ9mGs9Hv78QFe+pSDD3gWTpz0y+1QCuxy5d/vBFuZ3iwP2eycAkvqIMPmWg==", - "dev": true - }, - "prompts": { - "version": "2.4.2", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "punycode": { - "version": "2.1.1", - "dev": true - }, - "q": { - "version": "1.5.1", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "dev": true - }, - "quick-lru": { - "version": "4.0.1", - "dev": true - }, - "rc": { - "version": "1.2.8", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "react-is": { - "version": "18.2.0", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "5.7.1", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "dev": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "read-pkg-up": { - "version": "7.0.1", + "node_modules/semantic-release/node_modules/execa": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.2.tgz", + "integrity": "sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==", "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, "dependencies": { - "type-fest": { - "version": "0.8.1", - "dev": true - } + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.3", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.0", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.0.0" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "readable-stream": { - "version": "2.3.7", + "node_modules/semantic-release/node_modules/execa/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "redent": { - "version": "3.0.0", + "node_modules/semantic-release/node_modules/hosted-git-info": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.2.tgz", + "integrity": "sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg==", "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "redeyed": { - "version": "2.1.1", + "node_modules/semantic-release/node_modules/human-signals": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.0.tgz", + "integrity": "sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==", "dev": true, - "requires": { - "esprima": "~4.0.0" + "engines": { + "node": ">=18.18.0" } }, - "regexp.prototype.flags": { - "version": "1.4.3", + "node_modules/semantic-release/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "regexpp": { - "version": "3.2.0", - "dev": true - }, - "registry-auth-token": { - "version": "4.2.2", + "node_modules/semantic-release/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, - "requires": { - "rc": "1.2.8" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "require-directory": { - "version": "2.1.1", - "dev": true + "node_modules/semantic-release/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "require-from-string": { - "version": "2.0.2", + "node_modules/semantic-release/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true }, - "resolve": { - "version": "1.22.1", + "node_modules/semantic-release/node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "resolve-cwd": { + "node_modules/semantic-release/node_modules/p-reduce": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", + "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", "dev": true, - "requires": { - "resolve-from": "^5.0.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "resolve-from": { - "version": "5.0.0", - "dev": true - }, - "resolve-global": { - "version": "1.0.0", + "node_modules/semantic-release/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "requires": { - "global-dirs": "^0.1.1" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "resolve.exports": { - "version": "1.1.0", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", + "node_modules/semantic-release/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "retry": { - "version": "0.13.1", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "dev": true - }, - "rimraf": { - "version": "3.0.2", + "node_modules/semantic-release/node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", "dev": true, - "requires": { - "glob": "^7.1.3" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "rollup": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.2.5.tgz", - "integrity": "sha512-/Ha7HhVVofduy+RKWOQJrxe4Qb3xyZo+chcpYiD8SoQa4AG7llhupUtyfKSSrdBM2mWJjhM8wZwmbY23NmlIYw==", + "node_modules/semantic-release/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", "dev": true, - "requires": { - "fsevents": "~2.3.2" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "rollup-plugin-cleaner": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-cleaner/-/rollup-plugin-cleaner-1.0.0.tgz", - "integrity": "sha512-q+Zf9estkFwGede9QzmbkhKeuXzlliOvcICVNzBHAs5xYPPs1XLtfin5TMU2tC2EYjmfaF97saY9MnQM6Og4eA==", + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, - "requires": { - "rimraf": "^2.6.3" - }, "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "rollup-plugin-json": { + "node_modules/semver-diff": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-4.0.0.tgz", - "integrity": "sha512-hgb8N7Cgfw5SZAkb3jf0QXii6QX/FOkiIq2M7BAQIEydjHvTyxXHQiIzZaTFgx1GK0cRCHOCBHIyEkkLdWKxow==", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", "dev": true, - "requires": { - "rollup-pluginutils": "^2.5.0" + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "rollup-plugin-peer-deps-external": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-peer-deps-external/-/rollup-plugin-peer-deps-external-2.2.4.tgz", - "integrity": "sha512-AWdukIM1+k5JDdAqV/Cxd+nejvno2FVLVeZ74NKggm3Q5s9cbbcOgUPGdbxPi4BXu7xGaZ8HG12F+thImYu/0g==", + "node_modules/semver-regex": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", "dev": true, - "requires": {} + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "rollup-plugin-typescript2": { - "version": "0.34.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.34.1.tgz", - "integrity": "sha512-P4cHLtGikESmqi1CA+tdMDUv8WbQV48mzPYt77TSTOPJpERyZ9TXdDgjSDix8Fkqce6soYz3+fa4lrC93IEkcw==", + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "requires": { - "@rollup/pluginutils": "^4.1.2", - "find-cache-dir": "^3.3.2", - "fs-extra": "^10.0.0", - "semver": "^7.3.7", - "tslib": "^2.4.0" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - } + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, - "requires": { - "estree-walker": "^0.6.1" + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "dependencies": { - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - } + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "run-parallel": { - "version": "1.2.0", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "requires": { - "queue-microtask": "^1.2.2" + "engines": { + "node": ">=8" } }, - "rxjs": { - "version": "7.5.7", + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, - "requires": { - "tslib": "^2.1.0" + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "safe-buffer": { - "version": "5.1.2", + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "safe-regex-test": { - "version": "1.0.0", + "node_modules/signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" + "dependencies": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + }, + "engines": { + "node": ">=6" } }, - "semantic-release": { - "version": "19.0.5", + "node_modules/signale/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "requires": { - "@semantic-release/commit-analyzer": "^9.0.2", - "@semantic-release/error": "^3.0.0", - "@semantic-release/github": "^8.0.0", - "@semantic-release/npm": "^9.0.0", - "@semantic-release/release-notes-generator": "^10.0.0", - "aggregate-error": "^3.0.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.0.0", - "env-ci": "^5.0.0", - "execa": "^5.0.0", - "figures": "^3.0.0", - "find-versions": "^4.0.0", - "get-stream": "^6.0.0", - "git-log-parser": "^1.2.0", - "hook-std": "^2.0.0", - "hosted-git-info": "^4.0.0", - "lodash": "^4.17.21", - "marked": "^4.0.10", - "marked-terminal": "^5.0.0", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "p-reduce": "^2.0.0", - "read-pkg-up": "^7.0.0", - "resolve-from": "^5.0.0", - "semver": "^7.3.2", - "semver-diff": "^3.1.1", - "signale": "^1.2.1", - "yargs": "^16.2.0" + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "semver": { - "version": "7.3.8", + "node_modules/signale/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { - "lru-cache": "^6.0.0" + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "semver-diff": { - "version": "3.1.1", + "node_modules/signale/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "requires": { - "semver": "^6.3.0" - }, "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } + "color-name": "1.1.3" } }, - "semver-regex": { - "version": "3.1.4", + "node_modules/signale/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "shebang-command": { + "node_modules/signale/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/signale/node_modules/figures": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "dev": true, - "requires": { - "shebang-regex": "^3.0.0" + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" } }, - "shebang-regex": { + "node_modules/signale/node_modules/has-flag": { "version": "3.0.0", - "dev": true - }, - "side-channel": { - "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "engines": { + "node": ">=4" } }, - "signal-exit": { - "version": "3.0.7", - "dev": true - }, - "signale": { - "version": "1.4.0", + "node_modules/signale/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "requires": { - "chalk": "^2.3.2", - "figures": "^2.0.0", - "pkg-conf": "^2.1.0" - }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true - }, - "figures": { - "version": "2.0.0", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "has-flag": { - "version": "3.0.0", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "sisteransi": { + "node_modules/sisteransi": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, - "slash": { + "node_modules/skin-tone": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", + "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", + "dev": true, + "dependencies": { + "unicode-emoji-modifier-base": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { "version": "3.0.0", - "dev": true + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "slice-ansi": { + "node_modules/slice-ansi": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" }, - "dependencies": { - "ansi-styles": { - "version": "6.2.1", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "4.0.0", - "dev": true - } + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "source-map": { + "node_modules/source-map": { "version": "0.6.1", - "dev": true + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "source-map-support": { + "node_modules/source-map-support": { "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, - "requires": { + "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "spawn-error-forwarder": { + "node_modules/spawn-error-forwarder": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", + "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==", "dev": true }, - "spdx-correct": { - "version": "3.1.1", + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "requires": { + "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, - "spdx-exceptions": { - "version": "2.3.0", + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, - "spdx-expression-parse": { + "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "requires": { + "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, - "spdx-license-ids": { - "version": "3.0.12", + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", "dev": true }, - "split": { - "version": "1.0.1", + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, - "requires": { - "through": "2" + "dependencies": { + "readable-stream": "^3.0.0" } }, - "split2": { - "version": "3.2.2", + "node_modules/split2/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "requires": { - "readable-stream": "^3.0.0" - }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "stack-utils": { - "version": "2.0.5", + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, - "requires": { + "dependencies": { "escape-string-regexp": "^2.0.0" }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "dev": true - } + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" } }, - "stream-combiner2": { + "node_modules/stream-combiner2": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", "dev": true, - "requires": { + "dependencies": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" } }, - "string_decoder": { + "node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "requires": { + "dependencies": { "safe-buffer": "~5.1.0" } }, - "string-argv": { - "version": "0.3.1", - "dev": true + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } }, - "string-length": { + "node_modules/string-length": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, - "requires": { + "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" } }, - "string-width": { - "version": "4.2.3", + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "string.prototype.trimend": { - "version": "1.0.5", + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "string.prototype.trimstart": { - "version": "1.0.5", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "strip-ansi": { - "version": "6.0.1", + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "requires": { - "ansi-regex": "^5.0.1" + "engines": { + "node": ">=8" } }, - "strip-bom": { - "version": "3.0.0", - "dev": true + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "strip-final-newline": { + "node_modules/strip-final-newline": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "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==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stripe": { + "version": "14.25.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-14.25.0.tgz", + "integrity": "sha512-wQS3GNMofCXwH8TSje8E1SE8zr6ODiGtHQgPtO95p9Mb4FhKC9jvXR2NUTpZ9ZINlckJcFidCmaTFV4P6vsb9g==", + "dev": true, + "dependencies": { + "@types/node": ">=8.1.0", + "qs": "^6.11.0" + }, + "engines": { + "node": ">=12.*" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", "dev": true }, - "strip-indent": { + "node_modules/super-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-1.0.0.tgz", + "integrity": "sha512-CY8u7DtbvucKuquCmOFEKhr9Besln7n9uN8eFbwcoGYWXOMW07u2o8njWaiXt11ylS3qoGF55pILjRmPlbodyg==", + "dev": true, + "dependencies": { + "function-timeout": "^1.0.1", + "time-span": "^5.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz", + "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/temp-dir": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", + "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", "dev": true, - "requires": { - "min-indent": "^1.0.0" + "engines": { + "node": ">=14.16" } }, - "strip-json-comments": { - "version": "2.0.1", - "dev": true - }, - "supports-color": { - "version": "7.2.0", + "node_modules/tempy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", + "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", "dev": true, - "requires": { - "has-flag": "^4.0.0" + "dependencies": { + "is-stream": "^3.0.0", + "temp-dir": "^3.0.0", + "type-fest": "^2.12.2", + "unique-string": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "supports-hyperlinks": { - "version": "2.3.0", + "node_modules/tempy/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true - }, - "synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "node_modules/tempy/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, - "requires": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "temp-dir": { - "version": "2.0.0", - "dev": true - }, - "tempy": { - "version": "1.0.1", + "node_modules/test-exclude": { + "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==", "dev": true, - "requires": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, "dependencies": { - "type-fest": { - "version": "0.16.0", - "dev": true - } + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" } }, - "terminal-link": { - "version": "2.1.1", + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "type-fest": { - "version": "0.21.3", - "dev": true - } + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "test-exclude": { - "version": "6.0.0", + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "text-extensions": { + "node_modules/text-extensions": { "version": "1.9.0", - "dev": true + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } }, - "text-table": { - "version": "0.2.0", - "dev": true + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } }, - "through": { + "node_modules/through": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, - "through2": { + "node_modules/through2": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "3" - }, + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "node_modules/time-span": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", + "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", "dev": true, - "requires": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" + "dependencies": { + "convert-hrtime": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "tmpl": { + "node_modules/tmpl": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "to-fast-properties": { - "version": "2.0.0", - "dev": true - }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "tr46": { + "node_modules/tr46": { "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, - "traverse": { - "version": "0.6.7", - "dev": true + "node_modules/traverse": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", + "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "trim-newlines": { + "node_modules/trim-newlines": { "version": "3.0.1", - "dev": true + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } }, - "ts-jest": { - "version": "28.0.8", - "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^28.0.0", - "json5": "^2.2.1", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "^21.0.1" - }, - "dependencies": { - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true + "node_modules/ts-jest": { + "version": "29.2.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", + "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", + "dev": true, + "dependencies": { + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.6.3", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true }, - "yargs-parser": { - "version": "21.1.1", - "dev": true + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true } } }, - "ts-node": { - "version": "10.9.1", + "node_modules/ts-jest/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, - "requires": { + "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", @@ -19451,257 +14212,526 @@ "make-error": "^1.1.1", "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, - "tsconfig-paths": { - "version": "3.14.1", + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } }, - "tsutils": { - "version": "3.21.0", + "node_modules/typescript-eslint": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.17.0.tgz", + "integrity": "sha512-409VXvFd/f1br1DCbuKNFqQpXICoTB+V51afcwG1pn1a3Cp92MqAUges3YjwEdQ0cMUoCIodjVDAYzyD8h3SYA==", "dev": true, - "requires": { - "tslib": "^1.8.1" + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.17.0", + "@typescript-eslint/parser": "8.17.0", + "@typescript-eslint/utils": "8.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "dev": true + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true } } }, - "type-check": { - "version": "0.4.0", + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", "dev": true, - "requires": { - "prelude-ls": "^1.2.1" + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" } }, - "type-detect": { - "version": "4.0.8", - "dev": true - }, - "type-fest": { - "version": "1.4.0", - "dev": true - }, - "typescript": { - "version": "4.8.4", + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "dev": true }, - "uglify-js": { - "version": "3.17.4", + "node_modules/unicode-emoji-modifier-base": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", + "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", "dev": true, - "optional": true + "engines": { + "node": ">=4" + } }, - "unbox-primitive": { - "version": "1.0.2", + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "unique-string": { - "version": "2.0.0", + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" + "dependencies": { + "crypto-random-string": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "universal-user-agent": { - "version": "6.0.0", + "node_modules/universal-user-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz", + "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==", "dev": true }, - "universalify": { - "version": "2.0.0", - "dev": true + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } }, - "update-browserslist-db": { - "version": "1.0.10", + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "uri-js": { + "node_modules/uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "requires": { + "dependencies": { "punycode": "^2.1.0" } }, - "url-join": { - "version": "4.0.1", - "dev": true + "node_modules/url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } }, - "v8-compile-cache-lib": { + "node_modules/v8-compile-cache-lib": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, - "v8-to-istanbul": { - "version": "9.0.1", + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^2.0.0" }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - } + "engines": { + "node": ">=10.12.0" } }, - "validate-npm-package-license": { + "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "requires": { + "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, - "walker": { + "node_modules/walker": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, - "requires": { + "dependencies": { "makeerror": "1.0.12" } }, - "webidl-conversions": { + "node_modules/webidl-conversions": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true - }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, - "requires": { + "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "which": { + "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "which-boxed-primitive": { - "version": "1.0.2", + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "engines": { + "node": ">=0.10.0" } }, - "word-wrap": { - "version": "1.2.3", - "dev": true - }, - "wordwrap": { + "node_modules/wordwrap": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, - "wrap-ansi": { - "version": "7.0.0", + "node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "write-file-atomic": { + "node_modules/write-file-atomic": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, - "requires": { + "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "xtend": { + "node_modules/xtend": { "version": "4.0.2", - "dev": true + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } }, - "y18n": { + "node_modules/y18n": { "version": "5.0.8", - "dev": true + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } }, - "yallist": { - "version": "4.0.0", + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "yaml": { - "version": "1.10.2", - "dev": true + "node_modules/yaml": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } }, - "yargs": { - "version": "16.2.0", + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "requires": { - "cliui": "^7.0.2", + "dependencies": { + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "yargs-parser": { + "node_modules/yargs-parser": { "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "yn": { + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { "version": "3.1.1", - "dev": true + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "yocto-queue": { + "node_modules/yocto-queue": { "version": "0.1.0", - "dev": true + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz", + "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index 42dfa6d4..bd0e9722 100644 --- a/package.json +++ b/package.json @@ -15,10 +15,10 @@ "access": "public" }, "scripts": { - "prepare": "husky install", + "prepare": "husky", "pre-commit": "lint-staged", - "lint": "eslint .", - "lint:fix": "eslint . --fix", + "lint": "eslint . -c eslint.config.mjs", + "lint:fix": "eslint . -c eslint.config.mjs --fix", "test": "jest --passWithNoTests", "test:globalCoverage": "jest --coverage --passWithNoTests", "test:coverage": "jest --coverage --changedSince=origin/main --passWithNoTests", @@ -31,45 +31,46 @@ }, "homepage": "https://github.com/Salable/node-sdk#readme", "devDependencies": { + "@aws-sdk/client-kms": "^3.682.0", "@commitlint/cli": "^17.1.2", "@commitlint/config-conventional": "^17.1.0", - "@rollup/plugin-commonjs": "^23.0.2", + "@eslint/js": "^9.13.0", + "@prisma/client": "^5.21.1", + "@rollup/plugin-commonjs": "^28.0.0", + "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.1", "@semantic-release/changelog": "^6.0.1", "@semantic-release/git": "^10.0.1", - "@types/isomorphic-fetch": "^0.0.36", - "@types/jest": "^28.1.8", - "@types/jsrsasign": "^10.5.14", - "@types/node": "^18.11.9", - "@types/uuid": "^9.0.1", - "@typescript-eslint/eslint-plugin": "^5.37.0", + "@sentry/node": "^7.81.1", + "@types/jest": "^29.5.13", + "@types/node": "^22.7.0", + "@types/uuid": "^10.0.0", + "@typescript-eslint/eslint-plugin": "^8.7.0", + "date-fns": "^4.1.0", "dotenv": "^16.3.1", - "eslint": "8.23.1", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.5.3", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jest": "^26.9.0", - "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-unused-imports": "^2.0.0", - "husky": "^8.0.1", - "isomorphic-fetch": "^3.0.0", - "jest": "^28.1.3", + "eslint": "^9.13.0", + "eslint-plugin-jest": "^28.8.3", + "globals": "^15.11.0", + "husky": "^9.1.6", + "jest": "^29.7.0", + "jest-extended": "^4.0.2", "jest-fetch-mock": "^3.0.3", - "jsrsasign": "^11.1.0", - "lint-staged": "^13.0.3", - "prettier": "^2.7.1", - "rollup": "^3.2.5", + "lint-staged": "^15.2.10", + "prettier": "^3.3.3", + "prisma": "^5.21.1", + "rollup": "4.22.4", "rollup-plugin-cleaner": "^1.0.0", - "rollup-plugin-json": "^4.0.0", "rollup-plugin-peer-deps-external": "^2.2.4", - "rollup-plugin-typescript2": "^0.34.1", - "semantic-release": "^19.0.5", - "ts-jest": "^28.0.8", - "typescript": "^4.8.3" + "rollup-plugin-typescript2": "^0.36.0", + "semantic-release": "^24.1.1", + "stripe": "^14.18.0", + "ts-jest": "^29.2.5", + "typescript": "^5.6.2", + "typescript-eslint": "^8.10.0", + "uuid": "^9.0.1" }, - "dependencies": { - "@sentry/node": "^7.81.1", - "uuid": "^9.0.0" + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "4.22.4" } -} +} \ No newline at end of file diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 00000000..fd55ccae --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,587 @@ +datasource db { + provider = "mysql" + url = env("DATABASE_URL") + relationMode = "prisma" +} + +generator client { + provider = "prisma-client-js" + binaryTargets = ["native"] +} + +model Product { + uuid String @id @default(uuid()) + name String + description String? @db.Text + logoUrl String? @db.Text + displayName String + slug String @default("") + organisation String + status String + paid Boolean @default(false) + organisationPaymentIntegration OrganisationPaymentIntegration? @relation(fields: [organisationPaymentIntegrationUuid], references: [uuid], onUpdate: NoAction) + organisationPaymentIntegrationUuid String @default("free") + paymentIntegrationProductId String? + appType String @default("custom") + plans Plan[] + capabilities Capability[] + features Feature[] + pricingTables PricingTable[] + licenses License[] + subscriptions Subscription[] + currencies CurrenciesOnProduct[] + updatedAt DateTime @default(now()) @updatedAt + isTest Boolean @default(false) + + @@index([organisation]) + @@index([organisationPaymentIntegrationUuid]) +} + +model Plan { + uuid String @id @default(uuid()) + name String + description String? @db.Text + displayName String + slug String @default("") + status String + isTest Boolean @default(false) + trialDays Int? + evaluation Boolean @default(false) + evalDays Int @default(0) + organisation String + visibility String + licenseType String + perSeatAmount Int @default(1) + maxSeatAmount Int @default(-1) + interval String + length Int + active Boolean + planType String + pricingType String @default("free") + environment String + paddlePlanId Int? + product Product @relation(fields: [productUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + productUuid String + featuredOnPricingTable PricingTable? + currencies CurrenciesOnPlans[] + features FeaturesOnPlans[] + usage LicensesUsageOnPlans[] + pricingTables PlansOnPricingTables[] + capabilities CapabilitiesOnPlans[] + licenses License[] + subscription Subscription[] + salablePlan Boolean @default(false) + updatedAt DateTime @default(now()) @updatedAt + flags FlagsOnPlans[] + hasAcceptedTransaction Boolean @default(false) + licensesUsage LicensesUsage[] +} + +model Capability { + uuid String @id @default(uuid()) + name String + description String? @db.Text + status String + product Product @relation(fields: [productUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + productUuid String + plan CapabilitiesOnPlans[] + updatedAt DateTime @default(now()) @updatedAt + + @@index([productUuid]) +} + +model Feature { + uuid String @id @default(uuid()) + name String + description String? @db.Text + displayName String + variableName String? @default("") + status String + visibility String + valueType String @default("numerical") + defaultValue String @default("0") + showUnlimited Boolean @default(false) + product Product? @relation(fields: [productUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + productUuid String? + plans FeaturesOnPlans[] + featureEnumOptions FeatureEnumOption[] + pricingTables FeaturesOnPricingTables[] + updatedAt DateTime @default(now()) @updatedAt + licenses FeaturesOnLicenses[] + sortOrder Int @default(0) + + @@index([productUuid]) +} + +model FeatureEnumOption { + uuid String @id @default(uuid()) + name String + feature Feature @relation(fields: [featureUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + featureUuid String + featureOnPlans FeaturesOnPlans[] + updatedAt DateTime @default(now()) @updatedAt + + @@index([featureUuid]) +} + +model FeaturesOnPlans { + plan Plan @relation(fields: [planUuid], references: [uuid], onDelete: Cascade, onUpdate: NoAction) + planUuid String + feature Feature @relation(fields: [featureUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + featureUuid String + value String + enumValue FeatureEnumOption? @relation(fields: [enumValueUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + enumValueUuid String? + isUnlimited Boolean @default(false) + isUsage Boolean @default(false) + pricePerUnit Float? + minUsage Int? + maxUsage Int? + updatedAt DateTime @default(now()) @updatedAt + + @@id([planUuid, featureUuid]) + @@index([planUuid]) + @@index([featureUuid]) + @@index([enumValueUuid]) +} + +model FeaturesOnPricingTables { + pricingTable PricingTable @relation(fields: [pricingTableUuid], references: [uuid], onDelete: Cascade, onUpdate: NoAction) + pricingTableUuid String + feature Feature @relation(fields: [featureUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + featureUuid String + sortOrder Int + updatedAt DateTime @default(now()) @updatedAt + + @@id([pricingTableUuid, featureUuid]) + @@index([pricingTableUuid]) + @@index([featureUuid]) +} + +model PricingTable { + uuid String @id @default(uuid()) + name String + status String @default("ACTIVE") + title String? + text String? @db.Text + theme String @default("light") + featureOrder String @default("default") + product Product @relation(fields: [productUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + productUuid String + plans PlansOnPricingTables[] + features FeaturesOnPricingTables[] + customTheme Json? + featuredPlan Plan? @relation(fields: [featuredPlanUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + featuredPlanUuid String? @unique + updatedAt DateTime @default(now()) @updatedAt + + @@index([productUuid]) +} + +model PlansOnPricingTables { + plan Plan @relation(fields: [planUuid], references: [uuid], onDelete: Cascade, onUpdate: NoAction) + planUuid String + pricingTable PricingTable @relation(fields: [pricingTableUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + pricingTableUuid String + sortOrder Int @default(0) + updatedAt DateTime @default(now()) @updatedAt + + @@id([pricingTableUuid, planUuid]) + @@index([planUuid]) + @@index([pricingTableUuid]) +} + +enum ApiKeyType { + PUBLISHABLE + SECRET + WEB_COMPONENT /// @deprecated This API Key type isn't supported, use another type + RESTRICTED +} + +model ApiKey { + uuid String @id @default(uuid()) + name String + description String? @db.Text + status String + value String @unique + scopes Json + organisation String + sub String @default("n/a") + awsId String @default("n/a") + updatedAt DateTime @updatedAt + createdAt DateTime @default(now()) + isTest Boolean @default(false) + expiresAt DateTime? + lastUsedAt DateTime? + type ApiKeyType @default(RESTRICTED) + + @@index([organisation, value]) +} + +model Session { + uuid String @id @default(uuid()) + value String @unique + scope String + metadata Json + organisation Organisation @relation(fields: [organisationId], references: [clerkOrgId], onUpdate: NoAction, onDelete: NoAction) + organisationId String + isTest Boolean @default(false) + expiresAt DateTime + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model License { + uuid String @id @default(uuid()) + name String? + email String? + subscription Subscription? @relation(fields: [subscriptionUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + subscriptionUuid String? + status String + granteeId String? + paymentService String + purchaser String + type String + product Product @relation(fields: [productUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + productUuid String + plan Plan @relation(fields: [planUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + planUuid String + capabilities Json + metadata Json? + startTime DateTime @default(now()) + endTime DateTime + updatedAt DateTime @default(now()) @updatedAt + features FeaturesOnLicenses[] /// @deprecated Use `usage` instead. + usage LicensesUsageOnPlans[] + usageRecords LicensesUsage[] + isTest Boolean @default(false) + cancelAtPeriodEnd Boolean @default(false) + + @@index([productUuid]) + @@index([planUuid]) + @@index([granteeId]) + @@index([status]) + @@index([endTime(sort: Asc)]) + @@index([purchaser]) + @@index([subscriptionUuid]) + @@index([cancelAtPeriodEnd]) +} + +model Subscription { + uuid String @id @default(uuid()) + paymentIntegrationSubscriptionId String @unique + product Product @relation(fields: [productUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + productUuid String + type PaymentIntegration + email String? + organisation String + status String + cancelAtPeriodEnd Boolean @default(false) + quantity Int @default(1) + createdAt DateTime + updatedAt DateTime @updatedAt + expiryDate DateTime + lineItemIds Json? + license License[] + plan Plan @relation(fields: [planUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + planUuid String + isTest Boolean @default(false) + + @@index([paymentIntegrationSubscriptionId]) + @@index([productUuid]) + @@index([planUuid]) + @@index([organisation]) +} + +model CapabilitiesOnPlans { + plan Plan @relation(fields: [planUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + planUuid String + capability Capability @relation(fields: [capabilityUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + capabilityUuid String + updatedAt DateTime @default(now()) @updatedAt + + @@id([planUuid, capabilityUuid]) + @@index([planUuid]) + @@index([capabilityUuid]) +} + +model Currency { + uuid String @id @default(uuid()) + shortName String @unique + longName String + symbol String + products CurrenciesOnProduct[] + plans CurrenciesOnPlans[] +} + +model CurrenciesOnProduct { + product Product @relation(fields: [productUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + productUuid String + currency Currency @relation(fields: [currencyUuid], references: [uuid], onUpdate: NoAction) + currencyUuid String + defaultCurrency Boolean + + @@id([productUuid, currencyUuid]) + @@index([productUuid]) + @@index([currencyUuid]) +} + +model CurrenciesOnPlans { + plan Plan @relation(fields: [planUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + planUuid String + currency Currency @relation(fields: [currencyUuid], references: [uuid], onUpdate: NoAction) + currencyUuid String + price Float + paymentIntegrationPlanId String? + hasAcceptedTransaction Boolean @default(false) + + @@id([planUuid, currencyUuid]) + @@index([planUuid]) + @@index([currencyUuid]) +} + +model OrganisationUsage { + organisation String @id + usage Json +} + +enum PaymentIntegrationStatus { + pending + active + cancelled +} + +model OrganisationPaymentIntegration { + uuid String @id @default(uuid()) + organisation String + integrationName PaymentIntegration + products Product[] + webhooks Webhook[] + accountName String + accountData Json + status PaymentIntegrationStatus? + accountId String? + updatedAt DateTime @default(now()) @updatedAt + isTest Boolean @default(false) + newPaymentEnabled Boolean @default(false) +} + +model Webhook { + uuid String @id @default(uuid()) + value String + organisation String + type PaymentIntegration + organisationPaymentIntegration OrganisationPaymentIntegration @relation(fields: [organisationPaymentIntegrationUuid], references: [uuid], onUpdate: NoAction) + organisationPaymentIntegrationUuid String + verifySignature String? @db.VarChar(1000) + hookdeckUrl String + paymentIntegrationWebhookId String? + updatedAt DateTime @default(now()) @updatedAt + + @@index([organisationPaymentIntegrationUuid]) +} + +model LicensesUsage { + uuid String @id @default(uuid()) + license License @relation(fields: [licenseUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + licenseUuid String + plan Plan @relation(fields: [planUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + planUuid String + unitCount Int @default(0) + type LicensesUsageRecordType + recordedAt DateTime? + resetAt DateTime? + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + + @@index([licenseUuid]) + @@index([planUuid]) + @@index([resetAt(sort: Asc)]) + @@index([createdAt(sort: Asc)]) +} + +enum LicensesUsageRecordType { + recorded + current + final +} + +/// @deprecated model deprecated to use LicensesUsage instead +model LicensesUsageOnPlans { + license License @relation(fields: [licenseUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + licenseUuid String + plan Plan @relation(fields: [planUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + planUuid String + unitCount Int @default(0) + resetAt DateTime? + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + + @@id([licenseUuid, planUuid]) + @@index([licenseUuid]) + @@index([planUuid]) +} + +model FeaturesOnLicenses { + license License @relation(fields: [licenseUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + licenseUuid String + feature Feature @relation(fields: [featureUuid], references: [uuid], onUpdate: NoAction, onDelete: Cascade) + featureUuid String + planUuid String + unitCount Int @default(0) + + @@id([licenseUuid, featureUuid]) + @@index([licenseUuid]) + @@index([featureUuid]) +} + +enum PaymentIntegration { + stripe + stripe_existing + paddle + salable +} + +model Organisation { + clerkOrgId String @id + addressDetails Json? + metadata Json? + svixAppId String + logoUrl String? + salablePlanUuid String? + billingEmailId String + signingKeys SigningKey[] + updatedAt DateTime @default(now()) @updatedAt + sessions Session[] +} + +model Flag { + uuid String @id @default(uuid()) + name String + description String? @db.Text + valueType FlagValueType @default(boolean) + defaultValue String @default("true") + status String + organisation String + isTest Boolean @default(false) + updatedAt DateTime @default(now()) @updatedAt + createdAt DateTime @default(now()) + plans FlagsOnPlans[] + + @@index([organisation]) +} + +enum FlagValueType { + boolean + string + number +} + +model Permission { + uuid String @id @default(uuid()) + value String + type String? + description String? @db.Text + dependencies Json? + organisation String + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + rbacUsers PermissionsOnRbacUsers[] + roles PermissionsOnRoles[] +} + +model Role { + uuid String @id @default(uuid()) + name String + description String? @db.Text + organisation String + users RBACUser[] + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + permissions PermissionsOnRoles[] +} + +model PermissionsOnRoles { + permission Permission @relation(fields: [permissionUuid], references: [uuid], onDelete: Cascade) + role Role @relation(fields: [roleUuid], references: [uuid], onDelete: Cascade) + permissionUuid String + roleUuid String + + @@id([permissionUuid, roleUuid]) + @@index([permissionUuid]) + @@index([roleUuid]) +} + +model RBACUser { + id String @id + name String? + organisation String + role Role? @relation(fields: [roleUuid], references: [uuid], onUpdate: NoAction) + roleUuid String? + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + permissions PermissionsOnRbacUsers[] + + @@index([roleUuid]) +} + +model PermissionsOnRbacUsers { + permission Permission @relation(fields: [permissionUuid], references: [uuid], onDelete: Cascade) + rbacUser RBACUser @relation(fields: [rbacUserId], references: [id], onDelete: Cascade) + permissionUuid String + rbacUserId String + + @@id([permissionUuid, rbacUserId]) + @@index([permissionUuid]) + @@index([rbacUserId]) +} + +model ProofKeys { + codeChallenge String + codeVerifier String @unique + createdAt DateTime @default(now()) +} + +model FlagsOnPlans { + plan Plan @relation(fields: [planUuid], references: [uuid], onDelete: Cascade, onUpdate: NoAction) + planUuid String + flag Flag @relation(fields: [flagUuid], references: [uuid], onDelete: Cascade, onUpdate: NoAction) + flagUuid String + + @@id([flagUuid, planUuid]) + @@index([planUuid]) + @@index([flagUuid]) +} + +enum EventStatus { + queued + retrying + pending + success + failed + incomplete +} + +model Event { + uuid String @id @default(uuid()) + type String + organisation String + status EventStatus + isTest Boolean + retries Int @default(0) + errorMessage String? + errorCode String? + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt +} + +model SigningKey { + uuid String @id @default(uuid()) + privateKey Bytes + publicKey String + organisationId String + organisation Organisation @relation(fields: [organisationId], references: [clerkOrgId], onDelete: Cascade, onUpdate: NoAction) + createdAt DateTime @default(now()) + + @@index([organisationId]) +} \ No newline at end of file diff --git a/rollup.config.mjs b/rollup.config.mjs index ae771830..754e2dcc 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -3,7 +3,7 @@ import peerDepsExternal from 'rollup-plugin-peer-deps-external'; import cleaner from 'rollup-plugin-cleaner'; import commonjs from '@rollup/plugin-commonjs'; import resolve from '@rollup/plugin-node-resolve'; -import json from 'rollup-plugin-json'; +import json from '@rollup/plugin-json'; import replace from '@rollup/plugin-replace'; import dotenv from 'dotenv'; import packageJson from './package.json' assert { type: 'json' }; diff --git a/src/base.test.ts b/src/base.test.ts deleted file mode 100644 index d876493d..00000000 --- a/src/base.test.ts +++ /dev/null @@ -1,82 +0,0 @@ -import fetch from 'jest-fetch-mock'; -import Licenses from '@/src/licenses'; -import { - SalableResponseError, - SalableUnknownError, - SalableValidationError, -} from '@/src/exceptions/salable-error'; - -const api = new Licenses('test-key'); - -fetch.enableMocks(); - -const mockResponse = { mockProperty: 'example' }; - -beforeEach(() => { - fetch.resetMocks(); -}); - -describe('Unit | Base functionality', () => { - describe('Success Cases', () => { - it('Successfully return response with a body', async () => { - fetch.mockResponse(JSON.stringify(mockResponse), { - headers: { 'Content-Type': 'application/json' }, - }); - const response = await api.getAll(); - expect(response).toStrictEqual(mockResponse); - }); - it('Successfully return response with an empty body', async () => { - fetch.mockResponse('', { - headers: { 'Content-Type': 'text/plain' }, - }); - const response = await api.getAll(); - expect(response).toStrictEqual(''); - }); - }); - - describe('Failure Cases', () => { - it('Bad request error', async () => { - fetch.mockResponse(JSON.stringify(mockResponse), { - status: 400, - headers: { 'Content-Type': 'application/json' }, - }); - await expect(api.getAll()).rejects.toThrow(SalableResponseError); - }); - - it('Not found request error with a body in response', async () => { - fetch.mockResponse(JSON.stringify(mockResponse), { - status: 404, - headers: { 'Content-Type': 'plain/text' }, - }); - await expect(api.getAll()).rejects.toThrow(SalableResponseError); - }); - - it('Not found request error with an empty body response', async () => { - fetch.mockResponse('', { - status: 404, - headers: { 'Content-Type': 'plain/text' }, - }); - await expect(api.getAll()).rejects.toThrow(SalableResponseError); - }); - - it('Validation error', async () => { - fetch.mockResponse(JSON.stringify({ validationErrors: [] }), { - status: 400, - headers: { 'Content-Type': 'application/json' }, - }); - await expect(api.getAll()).rejects.toThrow(SalableValidationError); - }); - - it('Unknown error', async () => { - jest.spyOn(global, 'fetch').mockImplementation( - jest.fn(() => - Promise.resolve({ - headers: { get: () => 'application/json' }, - json: () => Promise.reject('Error'), - }) - ) as jest.Mock - ); - await expect(api.getAll()).rejects.toThrow(SalableUnknownError); - }); - }); -}); diff --git a/src/base.ts b/src/base.ts deleted file mode 100644 index 93095c54..00000000 --- a/src/base.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { SALABLE_BASE_URL } from './constants'; -import 'isomorphic-fetch'; -import { IRequestBase, isRequestWithBody } from './types'; -import { - ErrorCodes, - ResponseError, - SalableResponseError, - SalableUnknownError, - SalableValidationError, - ValidationError, -} from '@/src/exceptions/salable-error'; - -export type BaseRequest = (endpoint: string, options?: IRequestBase) => Promise; - -function getErrorCodeFromStatus(status: number) { - if (status === 404) return ErrorCodes.notFound; - if (status === 401) return ErrorCodes.unauthorised; - if (status >= 400 && status < 500) return ErrorCodes.badRequest; - if (status >= 500) return ErrorCodes.unhandled; - throw new SalableUnknownError('Salable SDK error. Unknown status code'); -} - -export class Base { - protected _apiKey; - protected _request: BaseRequest; - - constructor(apiKey: string, apiUrl = SALABLE_BASE_URL) { - this._apiKey = apiKey; - - if (new.target === Base) { - throw new Error('You cannot instantiate an abstract class!'); - } - - /** - * Internal request base for Salable Node SDK - * - * @typeParam T - Type of the returned data from the endpoint - * @typeParam K - Type of the body data if required (optional) - * - * @param endpoint - The endpoint being requested - * @param options - The options for the request (body, headers, method) (optional) - * - * @returns A promise which resolves to data from the endpoint passed or an error - */ - this._request = async ( - endpoint: string, - options?: IRequestBase - ): Promise => { - const url = `${apiUrl}/${endpoint}`; - - const headers = { - 'Content-Type': 'application/json', - 'x-api-key': this._apiKey, - ...options?.headers, - }; - - const config = { - headers, - ...(options && isRequestWithBody(options) - ? { - ...options, - body: JSON.stringify(options?.body), - } - : options), - }; - - const response = await fetch(url, config); - let errorResponse; - - try { - if (response.status >= 200 && response.status < 300) { - if (response.headers.get('Content-Type') !== 'application/json') return '' as T; - return (await response.json()) as Promise; - } - if (response.headers.get('Content-Type') === 'application/json') { - errorResponse = (await response.json()) as Record; - } - } catch (e) { - // eslint-disable-next-line no-console - console.error(e); - throw new SalableUnknownError(); - } - - if (!errorResponse) { - throw new SalableResponseError(getErrorCodeFromStatus(response.status), response.status); - } - - if (errorResponse.validationErrors) { - throw new SalableValidationError( - ErrorCodes.validation, - response.status, - errorResponse as ValidationError - ); - } - - throw new SalableResponseError( - getErrorCodeFromStatus(response.status), - response.status, - errorResponse as ResponseError - ); - }; - } -} diff --git a/src/exceptions/salable-error.ts b/src/exceptions/salable-error.ts index 98642cd7..8459f1b6 100644 --- a/src/exceptions/salable-error.ts +++ b/src/exceptions/salable-error.ts @@ -1,10 +1,13 @@ export enum ErrorCodes { unauthorised = 'S1000', - notFound = 'S1001', - badRequest = 'S1002', - validation = 'S1003', - unhandled = 'S1004', - unknown = 'S1005', + unauthenticated = 'S1001', + notFound = 'S1002', + badRequest = 'S1003', + validation = 'S1004', + unhandled = 'S1005', + unknown = 'S1006', + parse = 'S1007', + requestFailed = 'S1008', } export type ValidationErrorMessage = { @@ -21,28 +24,26 @@ export type ResponseError = { }; export class SalableError extends Error { - status: number; code: string; data?: Record | null; - constructor(code: ErrorCodes, status: number, data?: Record | null) { + constructor(code: ErrorCodes, data?: Record | null) { super(JSON.stringify({ data })); this.code = code; this.data = data; - this.status = status; } } export class SalableResponseError extends SalableError { - constructor(code: ErrorCodes, status: number, data?: ResponseError) { - super(code, status, data); + constructor(code: ErrorCodes, data?: ResponseError) { + super(code, data); Object.setPrototypeOf(this, SalableResponseError.prototype); } } export class SalableValidationError extends SalableError { - constructor(code: ErrorCodes, status: number, data: ValidationError) { - super(code, status, data); + constructor(code: ErrorCodes, data: ValidationError) { + super(code, data); Object.setPrototypeOf(this, SalableValidationError.prototype); } } @@ -58,3 +59,27 @@ export class SalableUnknownError extends Error { this.error = error ?? 'Salable SDK error'; } } + +export class SalableParseError extends Error { + code: string; + error?: string; + + constructor(error?: string) { + super(); + Object.setPrototypeOf(this, SalableParseError.prototype); + this.code = ErrorCodes.parse; + this.error = error ?? 'Unable to parse data'; + } +} + +export class SalableRequestError extends Error { + code: string; + error?: string; + + constructor(error?: string) { + super(); + Object.setPrototypeOf(this, SalableRequestError.prototype); + this.code = ErrorCodes.requestFailed; + this.error = error ?? 'Unable to complete fetch operation'; + } +} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 4f4f56f4..98e9dd8c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,18 +1,71 @@ -import { Base } from './base'; -import Licenses from './licenses'; -import Plans from './plans'; -import Products from './products'; -import Rbac from './rbac'; -import Subscriptions from './subscriptions'; -import Usage from './usage'; -import PricingTables from './pricing-tables'; - -export class Salable extends Base { - public licenses: Licenses = new Licenses(this._apiKey); - public subscriptions: Subscriptions = new Subscriptions(this._apiKey); - public products: Products = new Products(this._apiKey); - public plans: Plans = new Plans(this._apiKey); - public pricingTables: PricingTables = new PricingTables(this._apiKey); - public usage: Usage = new Usage(this._apiKey); - public rbac: Rbac = new Rbac(this._apiKey); +import { ErrorCodes, ResponseError, SalableParseError, SalableRequestError, SalableResponseError, SalableUnknownError, SalableValidationError, ValidationError } from './exceptions/salable-error'; +import { licensesInit, LicenseVersionedMethods } from './licenses'; +import { subscriptionsInit, SubscriptionVersionedMethods } from '../src/subscriptions'; +import { plansInit, PlanVersionedMethods } from '../src/plans'; +import { productsInit, ProductVersionedMethods } from '../src/products'; +import { pricingTablesInit, PricingTableVersionedMethods } from '../src/pricing-tables'; +import { UsageVersionedMethods, usageInit } from './usage'; + +export const Version = { + V2: 'v2', +} as const; + +export type TVersion = (typeof Version)[keyof typeof Version]; +export type ApiFetch = (apiKey: string, version: string) => ApiRequest; +export type ApiRequest = (input: string | URL | Request, init: RequestInit | undefined) => Promise; + +export const initRequest: ApiFetch = + (apiKey, version) => + async (input: string | URL | Request, init: RequestInit | undefined): Promise => { + let response; + let data; + try { + response = await fetch(input, { + ...init, + headers: { 'Content-Type': 'application/json', ...init?.headers, 'x-api-key': apiKey, version }, + }); + if (response.headers.get('Content-Length') === '0') return undefined as T; + data = (await response.json()) as T; + } catch (error) { + if (error instanceof TypeError) throw new SalableRequestError(); + if (error instanceof SyntaxError) throw new SalableParseError(); + throw new SalableUnknownError(); + } + + if (response.ok) return data; + + switch (response.status) { + case 400: + throw new SalableValidationError(ErrorCodes.validation, data as ValidationError); + case 401: + throw new SalableResponseError(ErrorCodes.unauthenticated, data as ResponseError); + case 403: + throw new SalableResponseError(ErrorCodes.unauthorised, data as ResponseError); + case 404: + throw new SalableResponseError(ErrorCodes.notFound, data as ResponseError); + case 500: + throw new SalableResponseError(ErrorCodes.unhandled, data as ResponseError); + default: + throw new SalableUnknownError(); + } + }; + +export default class Salable { + products: ProductVersionedMethods; + plans: PlanVersionedMethods; + pricingTables: PricingTableVersionedMethods; + subscriptions: SubscriptionVersionedMethods; + licenses: LicenseVersionedMethods; + usage: UsageVersionedMethods; + + constructor(apiKey: string, version: V) { + const request = initRequest(apiKey, version); + + this.products = productsInit(version, request); + this.plans = plansInit(version, request); + this.pricingTables = pricingTablesInit(version, request); + this.subscriptions = subscriptionsInit(version, request); + this.licenses = licensesInit(version, request); + this.usage = usageInit(version, request); + } } diff --git a/src/init-request.test.ts b/src/init-request.test.ts new file mode 100644 index 00000000..d78c64fe --- /dev/null +++ b/src/init-request.test.ts @@ -0,0 +1,144 @@ +import { initRequest } from '.'; +import { SalableParseError, SalableRequestError, SalableResponseError, SalableValidationError } from './exceptions/salable-error'; + +global.fetch = jest.fn(); + +describe('initRequest', () => { + const apiKey = 'test-api-key'; + const version = 'v2'; + const input = 'https://api.example.com/data'; + const init = { method: 'GET' }; + const mockFetch = global.fetch as jest.Mock; + + beforeEach(() => { + mockFetch.mockClear(); + }); + + it('should return data on successful fetch', async () => { + const mockData = { key: 'value' }; + mockFetch.mockResolvedValueOnce({ + ok: true, + status: 200, + headers: { + get: () => '10', + }, + json: async () => mockData, + }); + + const request = initRequest(apiKey, version); + const data = await request(input, init); + + expect(data).toEqual(mockData); + expect(mockFetch).toHaveBeenCalledWith(input, { + ...init, + headers: { 'Content-Type': 'application/json', 'x-api-key': apiKey, version }, + }); + }); + + it('should return undefined if content-length is 0', async () => { + const mockData = { key: 'value' }; + mockFetch.mockResolvedValueOnce({ + ok: true, + status: 204, + headers: { + get: () => '0', + }, + json: async () => mockData, + }); + + const request = initRequest(apiKey, version); + const data = await request(input, init); + + expect(data).toBeUndefined(); + expect(mockFetch).toHaveBeenCalledWith(input, { + ...init, + headers: { 'Content-Type': 'application/json', 'x-api-key': apiKey, version }, + }); + }); + + it('should throw an error on network failure', async () => { + mockFetch.mockRejectedValueOnce(new TypeError('Network error')); + + const request = initRequest(apiKey, version); + + await expect(request(input, init)).rejects.toThrow(SalableRequestError); + }); + + it('should throw an error on invalid JSON response', async () => { + mockFetch.mockResolvedValueOnce({ + ok: true, + status: 200, + headers: { + get: () => '10', + }, + json: async () => { + throw new SyntaxError('Invalid JSON'); + }, + }); + + const request = initRequest(apiKey, version); + + await expect(request(input, init)).rejects.toThrow(SalableParseError); + + }); + + it('should throw an error on bad request (400)', async () => { + mockFetch.mockResolvedValueOnce({ + ok: false, + status: 400, + headers: { + get: () => '10', + }, + json: async () => ({}), + }); + + const request = initRequest(apiKey, version); + + await expect(request(input, init)).rejects.toThrow(SalableValidationError); + }); + + it('should throw an error on unauthenticated (401)', async () => { + mockFetch.mockResolvedValueOnce({ + ok: false, + status: 401, + headers: { + get: () => '10', + }, + json: async () => ({}), + }); + + const request = initRequest(apiKey, version); + + await expect(request(input, init)).rejects.toThrow(SalableResponseError); + }); + + it('should throw an error on unauthorized (403)', async () => { + mockFetch.mockResolvedValueOnce({ + ok: false, + status: 403, + headers: { + get: () => '10', + }, + json: async () => ({}), + }); + + const request = initRequest(apiKey, version); + + await expect(request(input, init)).rejects.toThrow(SalableResponseError); + }); + + it('should throw an error on internal server error (500)', async () => { + mockFetch.mockResolvedValueOnce({ + ok: false, + status: 500, + headers: { + get: () => '10', + }, + json: async () => ({}), + }); + + const request = initRequest(apiKey, version); + + await expect(request(input, init)).rejects.toThrow(SalableResponseError); + }); +}); diff --git a/src/licenses/index.ts b/src/licenses/index.ts index 38a285e8..42a0412e 100644 --- a/src/licenses/index.ts +++ b/src/licenses/index.ts @@ -1,221 +1,147 @@ -import { Base } from '../base'; -import { RESOURCE_NAMES } from '../constants'; -import { - ICheckLicensesCapabilities, - ILicense, - ICreateAdhocLicenseInput, - IUpdateLicenseInput, - IUpdateManyLicenseInput, - ILicenseCountResponse, - Status, - LicenseCancelManyBody, - LicenseGetByPurchaserOptions, - LicenseGetUsage, -} from '../types'; -import jsrsasign from 'jsrsasign'; +import { CheckLicenseInput, CheckLicensesCapabilitiesResponse, CreateAdhocLicenseInput, GetAllLicensesResponse, GetLicenseOptions, License, GetLicenseCountResponse, UpdateManyLicenseInput, GetLicenseCountOptions, GetPurchasersLicensesOptions, ApiRequest, TVersion, Version } from '../types'; +import { v2LicenseMethods } from './v2'; -/** - * Salable Node SDK License Class - * - * Contains the Salable license methods - */ -export default class Licenses extends Base { - /** - * Get all licenses - * - * @returns {Promise} All licenses present on the account - */ - public getAll(): Promise { - return this._request(RESOURCE_NAMES.LICENSES); - } - - /** - * Get one license - * @param {string} licenseUuid - The UUID of the license - * - * @returns {ILicense} - */ - public getOne(licenseUuid: string): Promise { - return this._request(`${RESOURCE_NAMES.LICENSES}/${licenseUuid}`); - } - - /** - * Get licenses for purchaser - * @param {string} purchaser - The purchaser of the licenses - * @param {string} productUuid - The UUID of the product that the licenses are on - * @param {LicenseGetByPurchaserOptions} options - (Optional) extra options for filtering or additional data - * - * @returns {ILicense[]} - */ - public getForPurchaser( - purchaser: string, - productUuid: string, - options?: LicenseGetByPurchaserOptions - ): Promise { - let params = ''; - if (options) { - if (options.cancelLink) params += '&expand=cancelLink'; - if (options.status) params += `&status=${options.status}`; - } - params = encodeURI(params); - return this._request( - `${RESOURCE_NAMES.LICENSES}/purchaser?purchaser=${purchaser}&productUuid=${productUuid}${params}` - ); - } - - /** - * Get licenses for granteeId - * @param {string} granteeId - The granteeId for the licenses - * - * @returns {ILicense[]} - */ - public getForGranteeId(granteeId: string): Promise { - return this._request(`${RESOURCE_NAMES.LICENSES}/granteeId/${granteeId}`); - } - - /** - * Get usage on license - * @param {string} licenseUuid - The uuid of the license - * - * @returns {ILicense[]} - */ - public getUsage(licenseUuid: string): Promise { - return this._request(`${RESOURCE_NAMES.LICENSES}/${licenseUuid}/usage`); - } - - /** - * Get License's Count - * - * @param {string} subscriptionUuid - The uuid of the subscription to filter the license count - * @param {Status} status - The status of the license to filter by - * - * @returns {Promise} The capabilities of the license passed - */ - - public getCount(subscriptionUuid?: string, status?: Status): Promise { - let url = `${RESOURCE_NAMES.LICENSES}/count`; - if (subscriptionUuid) { - url += `?subscriptionUuid=${subscriptionUuid}`; - } - if (status) { - url += `${subscriptionUuid ? '&' : '?'}status=${status}`; - } - return this._request(url); - } +export type LicenseVersions = { + [Version.V2]: { + /** + * Get all licenses + * + * @param {GetLicenseOptions} options - (Optional) Filter parameters. See https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenses + * + * @returns {Promise} All licenses present on the account + */ + getAll: (options?: GetLicenseOptions) => Promise; + /** + * Get one license + * + * @param {string} uuid - The UUID of the license + * @param {{ expand: string[] }} options - (Optional) Filter parameters. See https://docs.salable.app/api/v2#tag/Licenses/operation/getLicenseByUuid + * + * @returns { Promise} + */ + getOne: (uuid: string, options?: { expand: string[] }) => Promise; + /** + * Get License's Count + * + * @param {GetLicenseCountOptions} options - (Optional) Filter parameters. See https://docs.salable.app/api/v2#tag/Licenses/operation/getLicensesCount + * + * @returns {Promise} + */ + getCount: (options?: GetLicenseCountOptions) => Promise; + /** + * Get Purchasers Licenses + * + * @param {GetPurchasersLicensesOptions} options + * @param {GetPurchasersLicensesOptions} options.purchaser - The purchaser of the licenses + * @param {GetPurchasersLicensesOptions} options.productUuid - The UUID of the product that the licenses are on + * @param {GetPurchasersLicensesOptions} options.status - (Optional) The status of the licenses to filter by + * + * @returns {Promise} + */ + getForPurchaser: (options: GetPurchasersLicensesOptions) => Promise; + /** + * Get licenses for granteeId + * + * @param {string} granteeId - The granteeId for the licenses + * @param {{ expand: string[] }} options - (Optional) Filter parameters. See https://docs.salable.app/api/v2#tag/Licenses/operation/getLicensesByGranteeId + * + * @returns {Promise} + */ + getForGranteeId: (granteeId: string, options?: { expand?: string[] }) => Promise; + /** + * Creates a single license with the details provided + * + * @param {CreateAdhocLicenseInput} data - The details to create the new license with + * @param {CreateAdhocLicenseInput} data.planUuid - The UUID of the plan associated with the license. The planUuid can be found on the Plan view in the Salable dashboard + * @param {CreateAdhocLicenseInput} data.member - The ID of the member who will manage the license. + * @param {CreateAdhocLicenseInput} data.granteeId - (Optional) The grantee ID for the license. + * @param {CreateAdhocLicenseInput} data.status - (Optional) The status of the created license, e.g. "ACTIVE" "TRIALING" + * @param {CreateAdhocLicenseInput} data.endTime - (Optional) Provide a custom end time for the license; this will override the plan's default interval. + * @param {CreateAdhocLicenseInput} data.cancelAtPeriodEnd - (Optional) If set to true the license will not renew once the endTime date has passed. + * + * @returns {Promise} The data for the new license created + */ + create: (data: CreateAdhocLicenseInput) => Promise; + /** + * Creates many licenses with the details provided + * + * @param {CreateAdhocLicenseInput[]} data - The details to create the new license with + * @param {CreateAdhocLicenseInput[]} data.planUuid - The UUID of the plan associated with the license. The planUuid can be found on the Plan view in the Salable dashboard + * @param {CreateAdhocLicenseInput[]} data.member - The ID of the member who will manage the license. + * @param {CreateAdhocLicenseInput[]} data.granteeId - (Optional) The grantee ID for the license. + * @param {CreateAdhocLicenseInput[]} data.status - (Optional) The status of the created license, e.g. "ACTIVE" "TRIALING" + * @param {CreateAdhocLicenseInput[]} data.endTime - (Optional) Provide a custom end time for the license; this will override the plan's default interval. + * + * @returns {Promise} The data for the new license or licenses created + */ + createMany: (data: CreateAdhocLicenseInput[]) => Promise; + /** + * Update a license + * + * @param {string} uuid - The UUID of the license + * @param {{granteeId: string}} data + * @param {{granteeId: string}} data.granteeId - The value of the new granteeId + * + * @returns {Promise} The data of the updated license + */ + update: (uuid: string, data: { granteeId: string }) => Promise; + /** + * Update many license's + * + * @param {UpdateManyLicenseInput[]} data - The config array of all the licenses you wish to update + * @param {UpdateManyLicenseInput[]} data.uuid - The UUID of the license to update + * @param {UpdateManyLicenseInput[]} data.granteeId - The new granteeId of the license + * + * @returns {Promise} The data of the updated license + */ + updateMany: (data: UpdateManyLicenseInput[]) => Promise; + /** + * Cancel a license + * + * @param {string} uuid - The UUID of the license + * + * @returns {Promise} + */ + cancel: (uuid: string) => Promise; + /** + * Cancel many licenses + * + * @param {uuids} uuids - Array of license uuids to be canceled + * + * @returns {Promise} + */ + cancelMany: (data: { uuids: string[] }) => Promise; + /** + * Checks a license's capabilities + * + * @param {CheckLicenseInput} options + * @param {CheckLicenseInput} options.productUuid - The UUID of the product to check the license against + * @param {CheckLicenseInput} options.granteeIds - The grantee IDs to check the license for + * @param {CheckLicenseInput} options.grace - (Optional) The number of days to extend the end dates of capabilities + * + * @returns {Promise} The capabilities of the license passed + */ + check: (options: CheckLicenseInput) => Promise; + /** + * Verifies a license check + * + * @param {string} publicKey - The public key belonging to your organisation + * @param {string} signature - The signature returned from a license check + * @param {string} payload - The capabilities returned from a license check + * + * @returns {boolean} The result of the verification + */ + verify: (options: { publicKey: string; signature: string; payload: string }) => boolean; + }; +}; - /** - * Checks a license's capabilities - * - * @param {string} productUuid - The UUID of the product to check the license against - * @param {string[]} granteeIds - The grantee IDs to check the license for - * @param {number} grace - The number of days to extend the end dates of capabilities - * - * @returns {Promise} The capabilities of the license passed - */ - public check( - productUuid: string, - granteeIds: string[], - grace?: number - ): Promise { - let params = `productUuid=${productUuid}&granteeIds=${granteeIds.toString()}`; - if (grace) params += `&grace=${grace}`; - return this._request(`${RESOURCE_NAMES.LICENSES}/check?${params}`); - } - - /** - * Verifies a license check - * - * @param {string} publicKeyPem - The public key belonging to your organisation in PEM format - * @param {string} signature - The signature returned from a license check - * @param {string} payload - The capabilities returned from a license check - * - * @returns {boolean} The result of the verification - */ - public verifyLicenseCheck(publicKeyPem: string, signature: string, payload: string): boolean { - const signatureObject = new jsrsasign.KJUR.crypto.Signature({ alg: 'SHA256withECDSA' }); - signatureObject.init(publicKeyPem); - signatureObject.updateString(payload); - return signatureObject.verify(signature); - } - - /** - * Creates a single license or many licenses with the details provided - * - * @param {ICreateAdhocLicenseInput | ICreateAdhocLicenseInput[]} licenseDetails - The details to create the new license with - * - * @returns {Promise} The data for the new license or licenses created - */ - - public create(licenseDetails: ICreateAdhocLicenseInput): Promise; - public create(licenseDetails: ICreateAdhocLicenseInput[]): Promise; - public create( - licenseDetails: ICreateAdhocLicenseInput | ICreateAdhocLicenseInput[] - ): Promise { - return this._request( - RESOURCE_NAMES.LICENSES, - { - method: 'POST', - body: licenseDetails, - } - ); - } - - /** - * Update a license - * - * @param {string} licenseUuid - The UUID of the license - * @param {string} granteeId - The value of the new granteeId - * - * @returns {Promise} The data of the updated license - */ - public update(licenseUuid: string, granteeId: string): Promise { - return this._request( - `${RESOURCE_NAMES.LICENSES}/${licenseUuid}`, - { - method: 'PUT', - body: { granteeId }, - } - ); - } - - /** - * Update many license's - * - * @param {IUpdateManyLicenseInput[]} updateManyConfig - The config array of all the licenses you wish to update - * - * @returns {Promise} The data of the updated license - */ - public updateMany(updateManyConfig: IUpdateManyLicenseInput[]): Promise { - return this._request(`${RESOURCE_NAMES.LICENSES}`, { - method: 'PUT', - body: updateManyConfig, - }); - } - - /** - * Cancel a license - * - * @param {string} licenseUuid - The UUID of the license - * - * @returns {Promise} - */ - public cancel(licenseUuid: string) { - return this._request(`${RESOURCE_NAMES.LICENSES}/${licenseUuid}`, { - method: 'DELETE', - }); - } +export type LicenseVersionedMethods = V extends keyof LicenseVersions ? LicenseVersions[V] : never; - /** - * Cancel many licenses - * - * @param {string[]} licenseUuids - Array of license uuids to be canceled - * - * @returns {Promise} - */ - public cancelMany(licenseUuids: string[]) { - return this._request(`${RESOURCE_NAMES.LICENSES}/cancel`, { - method: 'POST', - body: { uuids: licenseUuids }, - }); +export const licensesInit = (version: V, request: ApiRequest): LicenseVersionedMethods => { + switch (version) { + case Version.V2: + return v2LicenseMethods(request) as LicenseVersionedMethods; + default: + throw new Error('Unsupported version'); } -} +}; diff --git a/src/licenses/licenses.test.ts b/src/licenses/licenses.test.ts deleted file mode 100644 index 0d5daae5..00000000 --- a/src/licenses/licenses.test.ts +++ /dev/null @@ -1,204 +0,0 @@ -import fetch from 'jest-fetch-mock'; -import Licenses from './index'; -import { BaseRequest } from '../base'; - -const api = new Licenses('test-key'); -const requestSpyOn = jest.spyOn(api as unknown as { _request: BaseRequest }, '_request'); - -fetch.enableMocks(); - -const mockResponse = { mockProperty: 'example' }; - -beforeEach(() => { - fetch.resetMocks(); - fetch.mockResponse(JSON.stringify(mockResponse), { - headers: { 'Content-Type': 'application/json' }, - }); -}); - -describe('Unit | ThirdPartyAPI | Licenses', () => { - it('Get all licenses: should return the response unchanged', async () => { - const fetchedLicenses = await api.getAll(); - expect(fetchedLicenses).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('licenses'); - }); - - describe('Check capabilities', () => { - describe('Success cases', () => { - it('Check capabilities: should apply a grace period and return the response unchanged', async () => { - const fetchedLicenses = await api.check('xxxxx', ['aaaaa', 'bbbbb'], 10); - expect(fetchedLicenses).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith( - 'licenses/check?productUuid=xxxxx&granteeIds=aaaaa,bbbbb&grace=10' - ); - }); - it('Check capabilities: should return empty response with the response unchanged', async () => { - fetch.mockResponse('', { - headers: { 'Content-Type': 'text/plain' }, - }); - const fetchedLicenses = await api.check('xxxxx', ['aaaaa']); - expect(fetchedLicenses).toStrictEqual(''); - expect(requestSpyOn).toHaveBeenCalledWith( - 'licenses/check?productUuid=xxxxx&granteeIds=aaaaa' - ); - }); - }); - }); - - it('Create License: should call the request with the correct parameters and return response unchanged', async () => { - const createParams = { - planUuid: 'xxxxx', - member: 'orgId_1', - granteeId: 'userId_1', - }; - const createLicense = await api.create(createParams); - expect(requestSpyOn).toHaveBeenCalledWith('licenses', { - method: 'POST', - body: createParams, - }); - expect(createLicense).toStrictEqual(mockResponse); - }); - - it('Create Many Licenses: should call the request with the correct parameters and return response unchanged', async () => { - const createParams = { - planUuid: 'xxxxx', - member: 'orgId_1', - granteeId: 'userId_1', - }; - const createLicenses = await api.create([createParams, createParams]); - expect(requestSpyOn).toHaveBeenCalledWith('licenses', { - method: 'POST', - body: [createParams, createParams], - }); - expect(createLicenses).toStrictEqual(mockResponse); - }); - - it('Get one license: should return the response unchanged', async () => { - const fetchedLicenses = await api.getOne('xxxxx'); - expect(fetchedLicenses).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('licenses/xxxxx'); - }); - - it('Check capabilities: should return the response unchanged', async () => { - const fetchedLicenses = await api.check('xxxxx', ['xxxxx']); - expect(fetchedLicenses).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('licenses'); - }); - - it('Get Licenses count: should call the request with the correct parameters', async () => { - const getCount = await api.getCount('xxxxx', 'ACTIVE'); - expect(requestSpyOn).toHaveBeenCalledWith( - 'licenses/count?subscriptionUuid=xxxxx&status=ACTIVE' - ); - expect(getCount).toStrictEqual(mockResponse); - }); - - it('Get licenses for purchaser: should return the response unchanged', async () => { - const fetchedLicenses = await api.getForPurchaser('userId_1', 'xxxxx', { - status: 'ACTIVE', - cancelLink: true, - }); - expect(fetchedLicenses).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith( - 'licenses/purchaser?purchaser=userId_1&productUuid=xxxxx&expand=cancelLink&status=ACTIVE' - ); - }); - - it('Get licenses for granteeId: should return the response unchanged', async () => { - const fetchedLicenses = await api.getForGranteeId('userId_1'); - expect(fetchedLicenses).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('licenses/granteeId/userId_1'); - }); - - it('Get usage on license: should return the response unchanged', async () => { - const fetchedLicenses = await api.getUsage('xxxxx'); - expect(fetchedLicenses).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('licenses/xxxxx/usage'); - }); - - it('Update License: should call the request with the correct parameters and return response unchanged', async () => { - const updateLicense = await api.update('xxxxx', 'userId_2'); - expect(requestSpyOn).toHaveBeenCalledWith('licenses/xxxxx', { - method: 'PUT', - body: { granteeId: 'userId_2' }, - }); - expect(updateLicense).toStrictEqual(mockResponse); - }); - - it('Update many Licenses: should call the request with the correct parameters and return response unchanged', async () => { - const updateParams = [ - { - uuid: 'xxxxx', - granteeId: 'userId_1', - }, - { - uuid: 'xxxxx', - granteeId: 'userId_2', - }, - ]; - const updateManyLicenses = await api.updateMany(updateParams); - expect(requestSpyOn).toHaveBeenCalledWith('licenses', { - method: 'PUT', - body: updateParams, - }); - expect(updateManyLicenses).toStrictEqual(mockResponse); - }); - - it('Cancel one license: should return the response unchanged', async () => { - fetch.mockResponseOnce('', { - headers: { 'Content-Type': 'text/plain' }, - }); - const fetchedLicenses = await api.cancel('xxxxx'); - expect(fetchedLicenses).toStrictEqual(''); - expect(requestSpyOn).toHaveBeenCalledWith('licenses/xxxxx', { method: 'DELETE' }); - }); - - it('Cancel many licenses: should return the response unchanged', async () => { - fetch.mockResponseOnce('', { - headers: { 'Content-Type': 'text/plain' }, - }); - const cancelLicenses = await api.cancelMany(['xxxxx', 'aaaaa']); - expect(cancelLicenses).toStrictEqual(''); - expect(requestSpyOn).toHaveBeenCalledWith('licenses/cancel', { - method: 'POST', - body: { uuids: ['xxxxx', 'aaaaa'] }, - }); - }); - - it('Verify License Check: should verify license check signatures', () => { - const testPublicKeyPem = `-----BEGIN PUBLIC KEY----- - MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEV1+PJVMtma9+3xPstLA5Xo9U6kr9JzHv - Q5d9m0bFI9Xojy2tSHGAgyxM/O+yM7xPcnKBlg0VGly6ZvWNHeSvcA== - -----END PUBLIC KEY-----`; - const testLicenseCheckData = [ - { capability: 'One', expiry: '2024-06-28T20:20:00.592Z' }, - { capability: 'Two', expiry: '2024-06-28T20:20:00.594Z' }, - { capability: 'Three', expiry: '2024-06-28T20:20:00.594Z' }, - ]; - const testSignature = - '304402201a4dcfcab2ee296586668d8b3df7023c412a789deb9db77bbf87cffbdceed2e50220485b9974ac2a0b038888a4cd954a70b96d0bb3ff4102199744b6806159f27452'; - const testIncorrectSignature = 'bad-signature'; - - const falseLicenseCheck = api.verifyLicenseCheck( - testPublicKeyPem, - testIncorrectSignature, - JSON.stringify(testLicenseCheckData) - ); - const trueLicenseCheck = api.verifyLicenseCheck( - testPublicKeyPem, - testSignature, - JSON.stringify(testLicenseCheckData) - ); - - expect(falseLicenseCheck).toEqual(false); - expect(trueLicenseCheck).toEqual(true); - }); - - it('should return an error when promise rejects', async () => { - fetch.mockReject(() => Promise.reject('API is down')); - - await expect(async () => { - await api.getAll(); - }).rejects.toBe('API is down'); - }); -}); diff --git a/src/licenses/v2/index.ts b/src/licenses/v2/index.ts new file mode 100644 index 00000000..e57db75d --- /dev/null +++ b/src/licenses/v2/index.ts @@ -0,0 +1,28 @@ +import { SALABLE_BASE_URL } from '../../constants'; +import crypto from 'crypto'; +import { LicenseVersions } from '..'; +import getUrl from '../../utils/get-url'; +import { ApiRequest } from '../../types'; + +const baseUrl = `${SALABLE_BASE_URL}/licenses`; + +export const v2LicenseMethods = (request: ApiRequest): LicenseVersions['v2'] => ({ + getAll: (options) => request(getUrl(baseUrl, options), { method: 'GET' }), + getOne: (uuid, options) => request(getUrl(`${baseUrl}/${uuid}`, options), { method: 'GET' }), + getCount: (options) => request(getUrl(`${baseUrl}/count`, options), { method: 'GET' }), + getForPurchaser: (options) => request(getUrl(`${baseUrl}/purchaser`, options), { method: 'GET' }), + getForGranteeId: (granteeId, options) => request(getUrl(`${baseUrl}/granteeId/${granteeId}`, options), { method: 'GET' }), + create: (data) => request(baseUrl, { method: 'POST', body: JSON.stringify(data) }), + createMany: (data) => request(baseUrl, { method: 'POST', body: JSON.stringify(data) }), + update: (uuid, data) => request(`${baseUrl}/${uuid}`, { method: 'PUT', body: JSON.stringify(data) }), + updateMany: (data) => request(baseUrl, { method: 'PUT', body: JSON.stringify(data) }), + cancel: (uuid) => request(`${baseUrl}/${uuid}`, { method: 'DELETE' }), + cancelMany: (data) => request(`${baseUrl}/cancel`, { method: 'POST', body: JSON.stringify(data) }), + check: (options) => request(getUrl(`${baseUrl}/check`, options), { method: 'GET' }), + verify: ({ publicKey, signature, payload }) => { + const verify = crypto.createVerify('sha256'); + verify.write(payload); + verify.end(); + return verify.verify(publicKey, signature, 'hex'); + }, +}); diff --git a/src/licenses/v2/licenses-v2.test.ts b/src/licenses/v2/licenses-v2.test.ts new file mode 100644 index 00000000..f2558b2e --- /dev/null +++ b/src/licenses/v2/licenses-v2.test.ts @@ -0,0 +1,617 @@ +import Salable from '../..'; +import { Capability, License, Plan, Version } from '../../types'; +import prismaClient from '../../../test-utils/prisma/prisma-client'; +import { testUuids } from '../../../test-utils/scripts/create-test-data'; +import getEndTime from '../../../test-utils/helpers/get-end-time'; +import { v4 as uuidv4 } from 'uuid'; + +const stripeEnvs = JSON.parse(process.env.stripEnvs || ''); + +const version = Version.V2; + +const licenseUuid = uuidv4(); +const licenseTwoUuid = uuidv4(); +const licenseThreeUuid = uuidv4(); +const activeLicenseUuid = uuidv4(); +const noSubLicenseUuid = uuidv4(); +const noSubLicenseTwoUuid = uuidv4(); +const noSubLicenseThreeUuid = uuidv4(); +const subscriptionUuid = uuidv4(); +const testPurchaser = 'tester@testing.com'; +const testGrantee = '123456'; + +describe('Licenses V2 Tests', () => { + const salable = new Salable(testUuids.devApiKeyV2, version); + + beforeAll(async () => { + await generateTestData(); + }); + + afterAll(async () => { + await deleteTestData(); + }); + + it('getOne: Should successfully fetch the specified license', async () => { + const data = await salable.licenses.getOne(licenseUuid); + + expect(data).toEqual(licenseSchema); + expect(data).not.toHaveProperty('plan'); + }); + + it('getOne (w/ search params): Should successfully fetch the specified license', async () => { + const dataWithSearchParams = await salable.licenses.getOne(licenseUuid, { expand: ['plan'] }); + + expect(dataWithSearchParams).toEqual({ ...licenseSchema, plan: planSchema }); + expect(dataWithSearchParams).toHaveProperty('plan', planSchema); + }); + + it('getAll: Should successfully fetch licenses', async () => { + const data = await salable.licenses.getAll(); + + expect(data).toEqual({ + first: expect.toBeOneOf([expect.any(String), null]), + last: expect.toBeOneOf([expect.any(String), null]), + data: expect.arrayContaining([licenseSchema]), + }); + }); + + it('getAll (w/ search params): Should successfully fetch licenses', async () => { + const dataWithSearchParams = await salable.licenses.getAll({ + status: 'ACTIVE', + take: '3', + subscriptionUuid: subscriptionUuid, + }); + + expect(dataWithSearchParams).toEqual({ + first: expect.any(String), + last: expect.any(String), + data: expect.arrayContaining([licenseSchema]), + }); + expect(dataWithSearchParams.data.length).toEqual(3); + for (const license of dataWithSearchParams.data) { + expect(license).toHaveProperty('status', 'ACTIVE'); + } + }); + + it('getCount: Should successfully fetch a subscriptions count', async () => { + const data = await salable.licenses.getCount(); + + expect(data).toEqual({ + count: expect.any(Number), + assigned: expect.any(Number), + unassigned: expect.any(Number), + }); + }); + + it('getCount (w/ search params): Should successfully fetch a subscriptions count', async () => { + const dataWithSearchParams = await salable.licenses.getCount({ + subscriptionUuid: subscriptionUuid, + status: 'ACTIVE', + }); + + expect(dataWithSearchParams).toEqual({ + count: expect.any(Number), + assigned: expect.any(Number), + unassigned: expect.any(Number), + }); + }); + + it('getForPurchaser: Should successfully fetch a purchasers licenses', async () => { + const data = await salable.licenses.getForPurchaser({ purchaser: testPurchaser, productUuid: testUuids.productUuid }); + + expect(data).toEqual(expect.arrayContaining([expect.objectContaining(licenseSchema)])); + }); + + it('getForPurchaser (w/ search params): Should successfully fetch a purchasers licenses', async () => { + const dataWithSearchParams = await salable.licenses.getForPurchaser({ + purchaser: testPurchaser, + productUuid: testUuids.productUuid, + status: 'ACTIVE', + }); + + expect(dataWithSearchParams).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + ...licenseSchema, + status: 'ACTIVE', + purchaser: testPurchaser, + productUuid: testUuids.productUuid, + }), + ]), + ); + }); + + it('getForGranteeId: Should successfully fetch a grantees licenses', async () => { + const data = await salable.licenses.getForGranteeId(testGrantee); + + expect(data).toEqual(expect.arrayContaining([expect.objectContaining(licenseSchema)])); + }); + + it('getForGranteeId (w/ search params): Should successfully fetch a grantees licenses', async () => { + const dataWithSearchParams = await salable.licenses.getForGranteeId(testGrantee, { expand: ['plan'] }); + + expect(dataWithSearchParams).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + ...licenseSchema, + plan: planSchema, + }), + ]), + ); + }); + + it('create: Should successfully create a license', async () => { + const data = await salable.licenses.create({ + planUuid: testUuids.paidPlanUuid, + member: 'example', + granteeId: 'test-grantee-id', + status: 'ACTIVE', + endTime: '2025-07-06T12:00:00.000Z', + }); + + expect(data).toEqual(expect.objectContaining(licenseSchema)); + }); + + it('createMany: Should successfully create multiple licenses', async () => { + const data = await salable.licenses.createMany([ + { + planUuid: testUuids.paidPlanUuid, + member: 'example', + granteeId: 'example-grantee-id', + status: 'ACTIVE', + endTime: '2025-07-06T12:00:00.000Z', + }, + { + planUuid: testUuids.paidPlanUuid, + member: 'example', + granteeId: 'example-other-grantee-id', + status: 'ACTIVE', + endTime: '2025-07-06T12:00:00.000Z', + }, + ]); + + expect(data.length).toEqual(2); + expect(data).toEqual(expect.arrayContaining([expect.objectContaining(licenseSchema)])); + }); + + it('update: Should successfully update a license', async () => { + const data = await salable.licenses.update(noSubLicenseUuid, { granteeId: 'updated-grantee-id' }); + + expect(data.granteeId).toEqual('updated-grantee-id'); + }); + + it('updateMany: Should successfully update multiple licenses', async () => { + const data = await salable.licenses.updateMany([ + { + uuid: noSubLicenseTwoUuid, + granteeId: 'updated-grantee-id', + }, + { + uuid: noSubLicenseThreeUuid, + granteeId: 'updated-grantee-id', + }, + ]); + + expect(data.length).toEqual(2); + expect(data).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + ...licenseSchema, + granteeId: 'updated-grantee-id', + }), + ]), + ); + }); + + it('cancel: Should successfully cancel the specified license', async () => { + const data = await salable.licenses.cancel(noSubLicenseUuid); + + expect(data).toBeUndefined(); + }); + + it('cancelMany: Should successfully multiple licenses', async () => { + const data = await salable.licenses.cancelMany({ uuids: [noSubLicenseTwoUuid, noSubLicenseThreeUuid] }); + + expect(data).toBeUndefined(); + }); + + it('check: Should successfully check the specified grantees permissions', async () => { + const data = await salable.licenses.check({ + productUuid: testUuids.productUuid, + granteeIds: [testGrantee], + }); + + expect(data).toEqual( + expect.objectContaining({ + capabilities: expect.arrayContaining([ + { + capability: expect.any(String), + expiry: expect.any(String), + }, + ]), + signature: expect.any(String), + }), + ); + }); + + it('verify: Verifies the license-check signatures correctly', async () => { + const testPublicKeyPem = `-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAES7jvFxC50Fe2hHd3Sn7Q8TvnxuSZ\nV8HvRHGDvFacOiESAqg3uroeNTgoT7lD4BwQ+fFsn7zig5hwncoTsrCPbw==\n-----END PUBLIC KEY-----`; + const testLicenseCheckData = [ + { capability: 'One', expiry: '2024-08-14T13:15:49.310Z' }, + { capability: 'Two', expiry: '2024-08-14T13:15:49.310Z' }, + { capability: 'free_plan_name', expiry: '2024-08-14T13:32:29.313Z' }, + { capability: 'Three', expiry: '2024-08-14T13:32:29.313Z' }, + { capability: 'Four', expiry: '2024-08-14T13:32:29.313Z' }, + ]; + const testSignature = '3045022100b210aa29519f3146afe7a0d343a6b7ec5e47a1ac0de9686e2ec4cf0081e159c402206ecf98ad4d1d339c59f7ff3b4744d1f377747702c6253f7904ef6589191a2254'; + const testIncorrectSignature = 'bad-signature'; + + const falseLicenseCheck = salable.licenses.verify({ + publicKey: testPublicKeyPem, + signature: testIncorrectSignature, + payload: JSON.stringify(testLicenseCheckData), + }); + const trueLicenseCheck = salable.licenses.verify({ + publicKey: testPublicKeyPem, + signature: testSignature, + payload: JSON.stringify(testLicenseCheckData), + }); + + expect(falseLicenseCheck).toEqual(false); + expect(trueLicenseCheck).toEqual(true); + }); +}); + +const licenseCapabilitySchema: Capability = { + uuid: expect.any(String), + productUuid: expect.any(String), + name: expect.any(String), + status: expect.any(String), + description: expect.toBeOneOf([expect.any(String), null]), + updatedAt: expect.any(String), +}; + +const licenseSchema: License = { + uuid: expect.any(String), + name: expect.toBeOneOf([expect.any(String), null]), + email: expect.toBeOneOf([expect.any(String), null]), + subscriptionUuid: expect.toBeOneOf([expect.any(String), null]), + status: expect.toBeOneOf(['ACTIVE', 'CANCELED', 'EVALUATION', 'SCHEDULED', 'TRIALING', 'INACTIVE']), + granteeId: expect.toBeOneOf([expect.any(String), null]), + paymentService: expect.toBeOneOf(['ad-hoc', 'salable', 'stripe_existing']), + purchaser: expect.any(String), + type: expect.toBeOneOf(['licensed', 'metered', 'perSeat', 'customId', 'user']), + productUuid: expect.any(String), + planUuid: expect.any(String), + capabilities: expect.arrayContaining([licenseCapabilitySchema]), + metadata: expect.toBeOneOf([expect.anything(), null]), + startTime: expect.any(String), + endTime: expect.any(String), + updatedAt: expect.any(String), + isTest: expect.any(Boolean), + cancelAtPeriodEnd: expect.any(Boolean), +}; + +const planSchema: Plan = { + uuid: expect.any(String), + name: expect.any(String), + slug: expect.any(String), + description: expect.toBeOneOf([expect.any(String), null]), + displayName: expect.any(String), + status: expect.any(String), + trialDays: expect.toBeOneOf([expect.any(Number), null]), + evaluation: expect.any(Boolean), + evalDays: expect.any(Number), + perSeatAmount: expect.any(Number), + maxSeatAmount: expect.any(Number), + organisation: expect.any(String), + visibility: expect.any(String), + licenseType: expect.any(String), + hasAcceptedTransaction: expect.any(Boolean), + interval: expect.any(String), + length: expect.any(Number), + active: expect.any(Boolean), + planType: expect.any(String), + pricingType: expect.any(String), + environment: expect.any(String), + isTest: expect.any(Boolean), + paddlePlanId: expect.toBeOneOf([expect.any(String), null]), + productUuid: expect.any(String), + salablePlan: expect.any(Boolean), + type: expect.toBeOneOf([expect.any(String), undefined]), + updatedAt: expect.any(String), + features: expect.toBeOneOf([expect.anything(), undefined]), +}; + +const deleteTestData = async () => { + await prismaClient.license.deleteMany({ where: { OR: [{ uuid: licenseUuid }, { uuid: licenseTwoUuid }, { uuid: licenseThreeUuid }, { uuid: activeLicenseUuid }, { uuid: noSubLicenseUuid }, { uuid: noSubLicenseTwoUuid }, { uuid: noSubLicenseThreeUuid }] } }); + await prismaClient.subscription.deleteMany({ where: { OR: [{ uuid: subscriptionUuid }] } }); +}; + +const generateTestData = async () => { + await prismaClient.license.create({ + data: { + name: null, + email: null, + status: 'ACTIVE', + granteeId: testGrantee, + paymentService: 'ad-hoc', + purchaser: 'tester@testing.com', + type: 'user', + uuid: licenseUuid, + metadata: undefined, + plan: { connect: { uuid: testUuids.paidPlanUuid } }, + product: { connect: { uuid: testUuids.productUuid } }, + startTime: undefined, + capabilities: [ + { + name: 'CapabilityOne', + uuid: uuidv4(), + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + { + name: 'CapabilityTwo', + uuid: uuidv4(), + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + ], + endTime: getEndTime(1, 'years'), + }, + }); + + await prismaClient.license.create({ + data: { + name: null, + email: null, + status: 'ACTIVE', + granteeId: testGrantee, + paymentService: 'ad-hoc', + purchaser: 'tester@testing.com', + type: 'user', + uuid: licenseTwoUuid, + metadata: undefined, + plan: { connect: { uuid: testUuids.freeMonthlyPlanUuid } }, + product: { connect: { uuid: testUuids.productUuid } }, + startTime: undefined, + capabilities: [ + { + name: 'CapabilityOne', + uuid: uuidv4(), + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + { + name: 'CapabilityTwo', + uuid: uuidv4(), + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + ], + endTime: getEndTime(1, 'years'), + }, + }); + + await prismaClient.license.create({ + data: { + name: null, + email: null, + status: 'ACTIVE', + granteeId: testGrantee, + paymentService: 'ad-hoc', + purchaser: 'tester@testing.com', + type: 'user', + uuid: licenseThreeUuid, + metadata: undefined, + plan: { connect: { uuid: testUuids.freeMonthlyPlanUuid } }, + product: { connect: { uuid: testUuids.productUuid } }, + startTime: undefined, + capabilities: [ + { + name: 'CapabilityOne', + uuid: uuidv4(), + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + { + name: 'CapabilityTwo', + uuid: uuidv4(), + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + ], + endTime: getEndTime(1, 'years'), + }, + }); + + await prismaClient.license.create({ + data: { + name: null, + email: null, + status: 'ACTIVE', + granteeId: 'active-grantee-id', + paymentService: 'ad-hoc', + purchaser: 'tester@testing.com', + type: 'user', + uuid: activeLicenseUuid, + metadata: undefined, + plan: { connect: { uuid: testUuids.paidPlanUuid } }, + product: { connect: { uuid: testUuids.productUuid } }, + startTime: undefined, + capabilities: [ + { + name: 'CapabilityOne', + uuid: uuidv4(), + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + { + name: 'CapabilityTwo', + uuid: uuidv4(), + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + ], + endTime: new Date(new Date().getTime() + 30 * 24 * 60 * 60 * 1000), + }, + }); + + await prismaClient.license.create({ + data: { + name: null, + email: null, + status: 'ACTIVE', + granteeId: 'no-sub-license', + paymentService: 'ad-hoc', + purchaser: 'tester@testing.com', + type: 'user', + uuid: noSubLicenseUuid, + metadata: undefined, + plan: { connect: { uuid: testUuids.paidPlanUuid } }, + product: { connect: { uuid: testUuids.productUuid } }, + startTime: undefined, + capabilities: [ + { + name: 'CapabilityOne', + uuid: uuidv4(), + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + { + name: 'CapabilityTwo', + uuid: uuidv4(), + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + ], + endTime: new Date(new Date().getTime() + 30 * 24 * 60 * 60 * 1000), + }, + }); + + await prismaClient.license.create({ + data: { + name: null, + email: null, + status: 'ACTIVE', + granteeId: 'no-sub-license', + paymentService: 'ad-hoc', + purchaser: 'tester@testing.com', + type: 'user', + uuid: noSubLicenseTwoUuid, + metadata: undefined, + plan: { connect: { uuid: testUuids.paidPlanUuid } }, + product: { connect: { uuid: testUuids.productUuid } }, + startTime: undefined, + capabilities: [ + { + name: 'CapabilityOne', + uuid: uuidv4(), + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + { + name: 'CapabilityTwo', + uuid: uuidv4(), + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + ], + endTime: new Date(new Date().getTime() + 30 * 24 * 60 * 60 * 1000), + }, + }); + + await prismaClient.license.create({ + data: { + name: null, + email: null, + status: 'ACTIVE', + granteeId: 'no-sub-license', + paymentService: 'ad-hoc', + purchaser: 'tester@testing.com', + type: 'user', + uuid: noSubLicenseThreeUuid, + metadata: undefined, + plan: { connect: { uuid: testUuids.paidPlanUuid } }, + product: { connect: { uuid: testUuids.productUuid } }, + startTime: undefined, + capabilities: [ + { + name: 'CapabilityOne', + uuid: uuidv4(), + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + { + name: 'CapabilityTwo', + uuid: uuidv4(), + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + ], + endTime: new Date(new Date().getTime() + 30 * 24 * 60 * 60 * 1000), + }, + }); + + await prismaClient.subscription.upsert({ + where: { + paymentIntegrationSubscriptionId: stripeEnvs.basicSubscriptionId, + }, + update: { + uuid: subscriptionUuid, + email: 'tester@testing.com', + type: 'salable', + status: 'ACTIVE', + organisation: testUuids.organisationId, + license: { connect: [{ uuid: licenseUuid }, { uuid: licenseTwoUuid }, { uuid: licenseThreeUuid }] }, + product: { connect: { uuid: testUuids.productUuid } }, + plan: { connect: { uuid: testUuids.paidPlanUuid } }, + createdAt: new Date(), + updatedAt: new Date(), + expiryDate: new Date(Date.now() + 31536000000), + }, + create: { + lineItemIds: [stripeEnvs.basicSubscriptionLineItemId], + paymentIntegrationSubscriptionId: stripeEnvs.basicSubscriptionId, + uuid: subscriptionUuid, + email: 'tester@testing.com', + type: 'salable', + status: 'ACTIVE', + organisation: testUuids.organisationId, + license: { connect: [{ uuid: licenseUuid }, { uuid: licenseTwoUuid }, { uuid: licenseThreeUuid }] }, + product: { connect: { uuid: testUuids.productUuid } }, + plan: { connect: { uuid: testUuids.paidPlanUuid } }, + createdAt: new Date(), + updatedAt: new Date(), + expiryDate: new Date(Date.now() + 31536000000), + }, + }); +}; diff --git a/src/plans/index.ts b/src/plans/index.ts index e0148a25..ea509d83 100644 --- a/src/plans/index.ts +++ b/src/plans/index.ts @@ -1,108 +1,79 @@ -import { Base } from '../base'; -import { RESOURCE_NAMES } from '../constants'; -import { - IPlan, - IPlanCapabilityResponse, - IPlanCheckoutInputParams, - IPlanCheckoutParams, - IPlanCheckoutResponse, - IPlanCurrencyResponse, - IPlanFeatureResponse, - PlanCheckoutKey, -} from '../types'; -import defaultParametersCheckoutFactory from '../utils/default-parameters-checkout-factory'; +import { Plan, PlanCheckout, PlanFeature, PlanCapability, PlanCurrency, ApiRequest, TVersion, Version, GetPlanOptions, GetPlanCheckoutOptions } from '../types'; +import { v2PlanMethods } from './v2'; -/** - * Salable Node SDK Plan Class - * - * Contains the Salable plsn methods - */ -export default class Plans extends Base { - /** - * Get a single plan - * - * @param {string} planId The uuid of the plan - * - * @returns {Promise} The data of the subscription requested - */ - public getOne(planId: string): Promise { - return this._request(`${RESOURCE_NAMES.PLANS}/${planId}`); - } - - /** - * Get a plan's checkout link - * - * @param {string} planId The uuid of the plan - * @param {string} queryParams The query parameters for the checkout options - * - * @returns {Promise} - */ - - public getCheckoutLink( - planId: string, - queryParams: IPlanCheckoutInputParams - ): Promise { - const encodedParams = new URLSearchParams(); - - const flatCheckoutDefaultParams = defaultParametersCheckoutFactory(queryParams); - const flatParams: IPlanCheckoutParams = Object.assign( - { - granteeId: queryParams.granteeId, - member: queryParams.member, - successUrl: queryParams.successUrl, - cancelUrl: queryParams.cancelUrl, - contactUsLink: queryParams.contactUsLink, - quantity: queryParams.quantity, - }, - flatCheckoutDefaultParams - ); +export type PlanVersions = { + [Version.V2]: { + /** + * Retrieves information about a plan by its UUID. By default, the response does not contain any relational data. If you want to expand the relational data, you can do so with the `expand` query parameter. + * + * @param {string} planUuid - The UUID of the plan + * + * Docs - https://docs.salable.app/api/v2#tag/Plans/operation/getPlanByUuid + * + * @returns {Promise} + */ + getOne: ( + planUuid: string, + options?: GetPlanOptions + ) => Promise; - for (const key of Object.keys(flatParams)) { - const itemKey = key as PlanCheckoutKey; - const itemValue = flatParams[itemKey]; - if (itemValue) encodedParams.set(itemKey, String(itemValue)); - } + /** - return this._request( - `${RESOURCE_NAMES.PLANS}/${planId}/checkoutlink?${encodedParams.toString()}` - ); - } - - /** - * Get a plan's features - * - * @param {string} planId The uuid of the plan - * - * @returns {Promise} - */ + /** + * Retrieves a checkout link for a specific plan. The checkout link can be used by customers to purchase the plan. + * + * @param {string} planUuid The UUID of the plan + * @param {GetPlanCheckoutOptions} options - (Optional) Filter parameters. See https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCheckoutLink + * + * @returns {Promise} + */ + getCheckoutLink: ( + planUuid: string, + options: GetPlanCheckoutOptions + ) => Promise; - public getFeatures(planId: string) { - return this._request(`${RESOURCE_NAMES.PLANS}/${planId}/features`); - } + /** + * Retrieve the list of features for a specific plan + * + * @param {string} planUuid The UUID of the plan + * + * Docs - https://docs.salable.app/api/v2#tag/Plans/operation/getPlanFeatures + * + * @returns {Promise} + */ + getFeatures: (planUuid: string) => Promise; - /** - * Get a plan's capabilities - * - * @param {string} planId The uuid of the plan - * - * @returns {Promise} - */ + /** + * Retrieve the list of capabilities for a specific plan + * + * @param {string} planUuid The UUID of the plan + * + * Docs - https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCapabilities + * + * @returns {Promise} + */ + getCapabilities: (planUuid: string) => Promise; - public getCapabilities(planId: string) { - return this._request( - `${RESOURCE_NAMES.PLANS}/${planId}/capabilities` - ); - } + /** + * Retrieve the list of currencies for a specific plan + * + * @param {string} planUuid The UUID of the plan + * + * Docs - https://docs.salable.app/api/v2#tag/Plans/operation/getPlanCurrencies + * + * @returns {Promise} + */ + getCurrencies: (planUuid: string) => Promise; + }; +}; - /** - * Get a plan's currencies - * - * @param {string} planId The uuid of the plan - * - * @returns {Promise} - */ +export type PlanVersionedMethods = V extends keyof PlanVersions ? PlanVersions[V] : never; - public getCurrencies(planId: string) { - return this._request(`${RESOURCE_NAMES.PLANS}/${planId}/currencies`); +export const plansInit = (version: V, request: ApiRequest): PlanVersionedMethods => { + switch (version) { + case Version.V2: + return v2PlanMethods(request) as PlanVersionedMethods; + default: + throw new Error('Unsupported version'); } -} +}; diff --git a/src/plans/plans.test.ts b/src/plans/plans.test.ts deleted file mode 100644 index 13544cf5..00000000 --- a/src/plans/plans.test.ts +++ /dev/null @@ -1,85 +0,0 @@ -import fetch from 'jest-fetch-mock'; -import { BaseRequest } from '../base'; -import Plans from './index'; - -const api = new Plans('test-key'); -const requestSpyOn = jest.spyOn(api as unknown as { _request: BaseRequest }, '_request'); - -fetch.enableMocks(); - -const mockResponse = { mockProperty: 'example' }; - -beforeEach(() => { - fetch.resetMocks(); - fetch.mockResponse(JSON.stringify(mockResponse), { - headers: { 'Content-Type': 'application/json' }, - }); -}); - -describe('Unit | ThirdPartyAPI | Plans', () => { - it('Get a plan: should return the response unchanged', async () => { - const fetchedPlan = await api.getOne('xxxxx'); - expect(fetchedPlan).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('plans/xxxxx'); - }); - - it('Get a checkout link: should return the response unchanged', async () => { - const fetchedCheckoutLink = await api.getCheckoutLink('xxxxx', { - granteeId: 'userId_1', - member: 'orgId_1', - successUrl: 'successUrl', - cancelUrl: 'cancelUrl', - couponCode: 'SALE50', - promoCode: 'SALE50', - customMessage: 'Custom Message', - allowPromoCode: 'true', - marketingConsent: 'true', - currency: 'GBP', - quantity: 10, - vat: { - companyName: 'Company', - city: 'City', - number: '10', - postcode: 'NR1 1RN', - state: 'State', - street: 'Street', - country: 'GB', - }, - customer: { - email: 'customer@email.com', - postcode: 'NR1 1RN', - country: 'GB', - }, - }); - expect(fetchedCheckoutLink).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith( - `plans/xxxxx/checkoutlink?granteeId=userId_1&member=orgId_1&successUrl=successUrl&cancelUrl=cancelUrl&quantity=10&marketingConsent=true&couponCode=SALE50&promoCode=SALE50&allowPromoCode=true&customMessage=Custom+Message¤cy=GBP&customerEmail=customer%40email.com&customerCountry=GB&customerPostcode=NR1+1RN&vatCompanyName=Company&vatCity=City&vatNumber=10&vatPostcode=NR1+1RN&vatState=State&vatStreet=Street&vatCountry=GB` - ); - }); - - it('Get features: should return the response unchanged', async () => { - const fetchedPlan = await api.getFeatures('xxxxx'); - expect(fetchedPlan).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('plans/xxxxx/features'); - }); - - it('Get capabilities: should return the response unchanged', async () => { - const fetchedPlan = await api.getCapabilities('xxxxx'); - expect(fetchedPlan).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('plans/xxxxx/capabilities'); - }); - - it('Get currencies: should return the response unchanged', async () => { - const fetchedPlan = await api.getCurrencies('xxxxx'); - expect(fetchedPlan).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('plans/xxxxx/currencies'); - }); - - it('should return an error when promise rejects', async () => { - fetch.mockReject(() => Promise.reject('API is down')); - - await expect(async () => { - await api.getOne('xxxxx'); - }).rejects.toBe('API is down'); - }); -}); diff --git a/src/plans/v2/index.ts b/src/plans/v2/index.ts new file mode 100644 index 00000000..166ed6a5 --- /dev/null +++ b/src/plans/v2/index.ts @@ -0,0 +1,14 @@ +import { ApiRequest } from '../../types'; +import { PlanVersions } from '..'; +import { RESOURCE_NAMES, SALABLE_BASE_URL } from '../../constants'; +import getUrl from '../../utils/get-url'; + +const baseUrl = `${SALABLE_BASE_URL}/${RESOURCE_NAMES.PLANS}`; + +export const v2PlanMethods = (request: ApiRequest): PlanVersions['v2'] => ({ + getOne: (uuid) => request(`${baseUrl}/${uuid}`, { method: 'GET' }), + getCheckoutLink: (uuid, options) => request(getUrl(`${baseUrl}/${uuid}/checkoutlink`, options), { method: 'GET' }), + getFeatures: (uuid) => request(`${baseUrl}/${uuid}/features`, { method: 'GET' }), + getCapabilities: (uuid) => request(`${baseUrl}/${uuid}/capabilities`, { method: 'GET' }), + getCurrencies: (uuid) => request(`${baseUrl}/${uuid}/currencies`, { method: 'GET' }), +}); diff --git a/src/plans/v2/plan-v2.test.ts b/src/plans/v2/plan-v2.test.ts new file mode 100644 index 00000000..749fa427 --- /dev/null +++ b/src/plans/v2/plan-v2.test.ts @@ -0,0 +1,140 @@ +import Salable from '../..'; +import { Plan, PlanCapability, PlanCheckout, PlanCurrency, PlanFeature, Version } from '../../types'; +import { testUuids } from '../../../test-utils/scripts/create-test-data'; + +describe('Plans V2 Tests', () => { + const apiKey = testUuids.devApiKeyV2; + const version = Version.V2; + + const salable = new Salable(apiKey, version); + + const planUuid = testUuids.paidPlanUuid; + + it('getOne: should successfully fetch all products', async () => { + const data = await salable.plans.getOne(planUuid); + expect(data).toEqual(PlanSchema); + }); + + it('getOne (w / search params): should successfully fetch a plan', async () => { + const data = await salable.plans.getOne(planUuid, { expand: ['capabilities', 'capabilities.capability', 'features', 'features.feature', 'features.enumValue', 'currencies', 'currencies.currency'] }); + + expect(data).toEqual(PlanSchema); + }); + + it('getCheckoutLink (w / required params): should successfully fetch checkout link for plan', async () => { + const data = await salable.plans.getCheckoutLink(planUuid, { + successUrl: 'https://www.salable.app', + cancelUrl: 'https://www.salable.app', + granteeId: 'granteeid@example.com', + member: 'member-id', + }); + + expect(data).toEqual(PlanCheckoutLinkSchema); + }); + + it('getCheckoutLink (w / optional params): should successfully fetch checkout link for plan', async () => { + const data = await salable.plans.getCheckoutLink(planUuid, { + successUrl: 'https://www.salable.app', + cancelUrl: 'https://www.salable.app', + granteeId: 'granteeid@example.com', + member: 'member-id', + allowPromoCode: true, + customerEmail: 'customer@email.com', + currency: 'GBP', + automaticTax: '', + changeQuantity: '1', + requirePaymentMethod: false, + }); + + expect(data).toEqual(PlanCheckoutLinkSchema); + }); + + it('getFeatures: should successfully fetch features for plan', async () => { + const data = await salable.plans.getFeatures(planUuid); + + expect(data).toEqual(expect.arrayContaining([PlanFeatureSchema])); + }); + + it('getCapabilities: should successfully fetch capabilities for plan', async () => { + const data = await salable.plans.getCapabilities(planUuid); + + expect(data).toEqual(expect.arrayContaining([PlanCapabilitySchema])); + }); + + it('getCurrencies: should successfully fetch currencies for plan', async () => { + const data = await salable.plans.getCurrencies(planUuid); + + expect(data).toEqual(expect.arrayContaining([PlanCurrencySchema])); + }); +}); + +const PlanSchema: Plan = { + uuid: expect.any(String), + name: expect.any(String), + slug: expect.any(String), + description: expect.toBeOneOf([expect.any(String), null]), + displayName: expect.any(String), + status: expect.any(String), + trialDays: expect.toBeOneOf([expect.any(Number), null]), + evaluation: expect.any(Boolean), + evalDays: expect.any(Number), + perSeatAmount: expect.any(Number), + maxSeatAmount: expect.any(Number), + organisation: expect.any(String), + visibility: expect.any(String), + licenseType: expect.any(String), + hasAcceptedTransaction: expect.any(Boolean), + interval: expect.any(String), + length: expect.any(Number), + active: expect.any(Boolean), + planType: expect.any(String), + pricingType: expect.any(String), + environment: expect.any(String), + isTest: expect.any(Boolean), + paddlePlanId: expect.toBeOneOf([expect.any(String), null]), + productUuid: expect.any(String), + salablePlan: expect.any(Boolean), + type: expect.toBeOneOf([expect.any(String), undefined]), + updatedAt: expect.any(String), + features: expect.toBeOneOf([expect.anything(), undefined]), +}; + +const PlanCheckoutLinkSchema: PlanCheckout = { + checkoutUrl: expect.any(String), +}; + +const PlanFeatureSchema: PlanFeature = { + enumValue: expect.toBeOneOf([expect.anything(), null]), + enumValueUuid: expect.any(String), + feature: expect.toBeOneOf([expect.anything()]), + featureUuid: expect.any(String), + isUnlimited: expect.any(Boolean), + isUsage: expect.any(Boolean), + maxUsage: expect.any(Number), + minUsage: expect.any(Number), + planUuid: expect.any(String), + pricePerUnit: expect.any(Number), + updatedAt: expect.any(String), + value: expect.any(String), +}; + +const PlanCapabilitySchema: PlanCapability = { + planUuid: expect.any(String), + capabilityUuid: expect.any(String), + updatedAt: expect.any(String), + capability: expect.toBeOneOf([expect.anything()]), +}; + +const PlanCurrencySchema: PlanCurrency = { + planUuid: expect.any(String), + currencyUuid: expect.any(String), + price: expect.any(Number), + paymentIntegrationPlanId: expect.any(String), + hasAcceptedTransaction: expect.any(Boolean), + currency: { + uuid: expect.any(String), + shortName: expect.any(String), + longName: expect.any(String), + symbol: expect.any(String), + }, +}; diff --git a/src/pricing-tables/index.ts b/src/pricing-tables/index.ts index 44595d0f..62ed9099 100644 --- a/src/pricing-tables/index.ts +++ b/src/pricing-tables/index.ts @@ -1,74 +1,27 @@ -import { Base } from '../base'; -import { RESOURCE_NAMES } from '../constants'; -import { - PricingTableParameters, - IProductPricingTableResponse, - PricingTableCheckoutKey, -} from '../types'; -import defaultParametersCheckoutFactory from '../utils/default-parameters-checkout-factory'; +import { PricingTableResponse, ApiRequest, TVersion, Version } from '../types'; +import { v2PricingTableMethods } from './v2'; -/** - * Salable Node SDK Product Class - * - * Contains the Salable pricing table methods - */ -export default class PricingTables extends Base { - /** - * Get a single pricing table - * - * @param {string} pricingTableId The uuid of the pricing table - * - * @returns {Promise} The data of the product requested - */ +export type PricingTableVersions = { + [Version.V2]: { + /** + * Retrieves a pricing table by its UUID. This returns all necessary data on a Pricing Table to be able to display it. + * + * @param {string} pricingTableUuid - The UUID for the pricingTable + * @param {{ granteeId?: string; currency?: string;}} options - (Optional) Filter parameters. See https://docs.salable.app/api/v2#tag/Pricing-Tables/operation/getPricingTableByUuid + * + * @returns {Promise} + */ + getOne: (pricingTableUuid: string, options?: { granteeId?: string; currency?: string }) => Promise; + }; +}; - public getOne(pricingTableId: string, queryParams: PricingTableParameters) { - const { - globalPlanOptions: { granteeId, successUrl, cancelUrl, contactUsLink, member, ...rest }, - individualPlanOptions, - } = queryParams; +export type PricingTableVersionedMethods = V extends keyof PricingTableVersions ? PricingTableVersions[V] : never; - const flatCheckoutDefaultParams = defaultParametersCheckoutFactory(rest); - const flatCheckoutParams = Object.assign( - { - globalGranteeId: granteeId, - globalSuccessUrl: successUrl, - globalCancelUrl: cancelUrl, - contactUsLink, - member, - }, - flatCheckoutDefaultParams - ); - let paramsStr = ''; - let query = ''; - for (const key of Object.keys(flatCheckoutParams)) { - const itemKey = key as PricingTableCheckoutKey; - const itemValue = flatCheckoutParams[itemKey]; - if (itemValue) paramsStr += `&${itemKey}=${itemValue}`; - } - - if (individualPlanOptions) { - let granteeIds = ''; - let cancelUrls = ''; - let successUrls = ''; - for (const key of Object.keys(individualPlanOptions)) { - if (individualPlanOptions[key].granteeId) { - granteeIds += `${key},${individualPlanOptions[key].granteeId as string}`; - } - if (individualPlanOptions[key].cancelUrl) { - cancelUrls += `${key},${individualPlanOptions[key].cancelUrl as string}`; - } - if (individualPlanOptions[key].successUrl) { - successUrls += `${key},${individualPlanOptions[key].successUrl as string}`; - } - } - if (granteeIds) paramsStr += `&granteeIds=${granteeIds}`; - if (cancelUrls) paramsStr += `&cancelUrls=${cancelUrls}`; - if (successUrls) paramsStr += `&successUrls=${successUrls}`; - } - query = encodeURI(paramsStr); - - return this._request( - `${RESOURCE_NAMES.PRICING_TABLES}/${pricingTableId}?${query}` - ); +export const pricingTablesInit = (version: V, request: ApiRequest): PricingTableVersionedMethods => { + switch (version) { + case Version.V2: + return v2PricingTableMethods(request) as PricingTableVersionedMethods; + default: + throw new Error('Unsupported version'); } -} +}; diff --git a/src/pricing-tables/pricing-tables.test.ts b/src/pricing-tables/pricing-tables.test.ts deleted file mode 100644 index 27ee3bda..00000000 --- a/src/pricing-tables/pricing-tables.test.ts +++ /dev/null @@ -1,72 +0,0 @@ -import fetch from 'jest-fetch-mock'; -import { BaseRequest } from '../base'; -import PricingTables from './index'; -import { PricingTableParameters } from '@/src/types'; - -const api = new PricingTables('test-key'); -const requestSpyOn = jest.spyOn(api as unknown as { _request: BaseRequest }, '_request'); - -fetch.enableMocks(); - -const mockResponse = { mockProperty: 'example' }; - -beforeEach(() => { - fetch.resetMocks(); - fetch.mockResponse(JSON.stringify(mockResponse), { - headers: { 'Content-Type': 'application/json' }, - }); -}); - -describe('Unit | ThirdPartyAPI | Pricing Tables', () => { - const data: PricingTableParameters = { - globalPlanOptions: { - successUrl: 'aaaaa', - cancelUrl: 'aaaaa', - contactUsLink: 'aaaaa', - granteeId: 'userId_1', - member: 'orgId_1', - couponCode: 'SALE50', - promoCode: 'SALE50', - customMessage: 'Custom Message', - allowPromoCode: 'true', - marketingConsent: 'true', - currency: 'USD', - vat: { - companyName: 'Company', - city: 'City', - number: '10', - postcode: 'NR1 1RN', - state: 'State', - street: 'Street', - country: 'GB', - }, - customer: { - email: 'customer@email.com', - postcode: 'NR1 1RN', - country: 'GB', - }, - }, - individualPlanOptions: { - planUuid123: { - successUrl: 'bbbbb', - cancelUrl: 'bbbbb', - granteeId: 'userId_2', - }, - }, - }; - it('Get product basic pricing table: should set the global and individual plan options correctly and return the response unchanged', async () => { - const fetchedPricingTable = await api.getOne('xxxxx', data); - expect(fetchedPricingTable).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith( - 'pricing-tables/xxxxx?&globalGranteeId=userId_1&globalSuccessUrl=aaaaa&globalCancelUrl=aaaaa&contactUsLink=aaaaa&member=orgId_1&marketingConsent=true&couponCode=SALE50&promoCode=SALE50&allowPromoCode=true&customMessage=Custom%20Message¤cy=USD&customerEmail=customer@email.com&customerCountry=GB&customerPostcode=NR1%201RN&vatCompanyName=Company&vatCity=City&vatNumber=10&vatPostcode=NR1%201RN&vatState=State&vatStreet=Street&vatCountry=GB&granteeIds=planUuid123,userId_2&cancelUrls=planUuid123,bbbbb&successUrls=planUuid123,bbbbb' - ); - }); - - it('should return an error when promise rejects', async () => { - fetch.mockReject(() => Promise.reject('API is down')); - - await expect(async () => { - await api.getOne('xxxxx', data); - }).rejects.toBe('API is down'); - }); -}); diff --git a/src/pricing-tables/v2/index.ts b/src/pricing-tables/v2/index.ts new file mode 100644 index 00000000..fe18d1ce --- /dev/null +++ b/src/pricing-tables/v2/index.ts @@ -0,0 +1,10 @@ +import { ApiRequest } from '../../types'; +import { PricingTableVersions } from '..'; +import { RESOURCE_NAMES, SALABLE_BASE_URL } from '../../constants'; +import getUrl from '../../utils/get-url'; + +const baseUrl = `${SALABLE_BASE_URL}/${RESOURCE_NAMES.PRICING_TABLES}`; + +export const v2PricingTableMethods = (request: ApiRequest): PricingTableVersions['v2'] => ({ + getOne: (productUuid, options) => request(getUrl(`${baseUrl}/${productUuid}`, options), { method: 'GET' }), +}); diff --git a/src/pricing-tables/v2/pricing-table-v2.test.ts b/src/pricing-tables/v2/pricing-table-v2.test.ts new file mode 100644 index 00000000..b1b0d336 --- /dev/null +++ b/src/pricing-tables/v2/pricing-table-v2.test.ts @@ -0,0 +1,95 @@ +import Salable from '../..'; +import { PricingTableResponse, Version } from '../../types'; +import prismaClient from '../../../test-utils/prisma/prisma-client'; +import { testUuids } from '../../../test-utils/scripts/create-test-data'; + +const pricingTableUuid = 'aec06de8-3a3e-46eb-bd09-f1094c1b1b8d'; +describe('Pricing Table V2 Tests', () => { + const apiKey = testUuids.devApiKeyV2; + const version = Version.V2; + + const salable = new Salable(apiKey, version); + + beforeAll(async() => { + await generateTestData() + }) + + it('getAll: should successfully fetch all products', async () => { + const data = await salable.pricingTables.getOne(pricingTableUuid); + + expect(data).toEqual(expect.objectContaining(PricingTableSchema)); + }); +}); + +const PricingTableSchema: PricingTableResponse = { + customTheme: expect.toBeOneOf([expect.any(String), null]), + productUuid: expect.any(String), + featuredPlanUuid: expect.toBeOneOf([expect.any(String), null]), + name: expect.any(String), + status: expect.any(String), + theme: expect.any(String), + text: expect.toBeOneOf([expect.any(String), null]), + title: expect.toBeOneOf([expect.any(String), null]), + updatedAt: expect.any(String), + uuid: expect.any(String), + featureOrder: expect.any(String), + features: expect.toBeOneOf([expect.anything(), undefined]), + product: expect.toBeOneOf([expect.anything(), undefined]), + plans: expect.toBeOneOf([expect.anything(), undefined]), +}; + + +const generateTestData = async () => { + + const product = await prismaClient.product.findFirst({ + where: { uuid: testUuids.productUuid }, + select: { + features: true, + uuid: true, + plans: true, + }, + }); + + if (!product) return null; + + await prismaClient.pricingTable.create({ + data: { + uuid: pricingTableUuid, + name: 'xxxxx', + product: { connect: { uuid: product.uuid } }, + features: { + create: product.features.map((f) => ({ + feature: { connect: { uuid: f.uuid } }, + sortOrder: f.sortOrder, + })), + }, + featuredPlan: { connect: { uuid: testUuids.paidPlanUuid } }, + plans: { + create: [{ planUuid: testUuids.paidPlanUuid, sortOrder: 0 }], + }, + }, + include: { + features: { + include: { feature: { include: { featureEnumOptions: true } } }, + }, + plans: { + include: { + plan: { + include: { + features: { include: { feature: true, enumValue: true } }, + capabilities: { include: { capability: true } }, + currencies: { include: { currency: true } }, + }, + }, + }, + }, + product: { + include: { + currencies: true, + organisationPaymentIntegration: true, + features: { include: { featureEnumOptions: true } }, + }, + }, + }, + }); +} diff --git a/src/products/index.ts b/src/products/index.ts index 17af2128..fa5a5084 100644 --- a/src/products/index.ts +++ b/src/products/index.ts @@ -1,151 +1,90 @@ -import { Base } from '../base'; -import { RESOURCE_NAMES } from '../constants'; -import { - IPlan, - IProduct, - IProductCapabilityResponse, - IProductCurrencyResponse, - PricingTableParameters, - IProductPricingTableResponse, - PricingTableCheckoutKey, -} from '../types'; -import defaultParametersCheckoutFactory from '../utils/default-parameters-checkout-factory'; +import { Plan, Product, ProductCapability, ProductCurrency, ProductFeature, ProductPricingTable, ApiRequest, TVersion, Version } from '../types'; +import { v2ProductMethods } from './v2'; -/** - * Salable Node SDK Product Class - * - * Contains the Salable product methods - */ -export default class Products extends Base { - /** - * Get all products - * - * @returns {Promise} All produdcts - */ - public getAll(): Promise { - return this._request(RESOURCE_NAMES.PRODUCTS); - } - - /** - * Get a single product - * - * @param {string} productId The uuid of the product - * - * @returns {Promise} The data of the product requested - */ - public getOne(productId: string): Promise { - return this._request(`${RESOURCE_NAMES.PRODUCTS}/${productId}`); - } - - /** - * Get a pricing table for a product - * - * @param {string} planId The uuid of the plan - * @param {string} queryParams The query parameters for the pricing table options - * - * @returns {Promise} - */ - - public getPricingTable(productId: string, queryParams: PricingTableParameters) { - const { - globalPlanOptions: { granteeId, successUrl, cancelUrl, contactUsLink, member, ...rest }, - individualPlanOptions, - } = queryParams; - - const flatCheckoutDefaultParams = defaultParametersCheckoutFactory(rest); - const flatCheckoutParams = Object.assign( - { - globalGranteeId: granteeId, - globalSuccessUrl: successUrl, - globalCancelUrl: cancelUrl, - contactUsLink, - member, - }, - flatCheckoutDefaultParams - ); - let paramsStr = ''; - let query = ''; - for (const key of Object.keys(flatCheckoutParams)) { - const itemKey = key as PricingTableCheckoutKey; - const itemValue = flatCheckoutParams[itemKey]; - if (itemValue) paramsStr += `&${itemKey}=${itemValue}`; - } +export type ProductVersions = { + [Version.V2]: { + /** + * Retrieves a list of all products + * + * Docs - https://docs.salable.app/api/v2#tag/Products/operation/getProducts + * + * @returns {Promise} All products present on the account + */ + getAll: () => Promise; - if (individualPlanOptions) { - let granteeIds = ''; - let cancelUrls = ''; - let successUrls = ''; - for (const key of Object.keys(individualPlanOptions)) { - if (individualPlanOptions[key].granteeId) { - granteeIds += `${key},${individualPlanOptions[key].granteeId as string}`; - } - if (individualPlanOptions[key].cancelUrl) { - cancelUrls += `${key},${individualPlanOptions[key].cancelUrl as string}`; - } - if (individualPlanOptions[key].successUrl) { - successUrls += `${key},${individualPlanOptions[key].successUrl as string}`; - } - } - if (granteeIds) paramsStr += `&granteeIds=${granteeIds}`; - if (cancelUrls) paramsStr += `&cancelUrls=${cancelUrls}`; - if (successUrls) paramsStr += `&successUrls=${successUrls}`; - } - query = encodeURI(paramsStr); + /** + * Retrieves a specific product by its UUID. By default, the response does not contain any relational data. If you want to expand the relational data, you can do so with the `expand` query parameter. + * + * @param {string} productUuid - The UUID for the pricingTable + * @param {{ expand: string[]}} options - (Optional) Filter parameters. See https://docs.salable.app/api/v2#tag/Products/operation/getProductByUuid + * + * @returns {Promise} + */ + getOne: (productUuid: string, options?: { expand: string[] }) => Promise; - return this._request( - `${RESOURCE_NAMES.PRODUCTS}/${productId}/pricingtable?${query}` - ); - } - - /** - * Get all plans for a product - * - * @param {string} productId The uuid of the product - * - * @returns {Promise} An array of all the associated plans - */ - - public getPlans(productId: string): Promise { - return this._request(`${RESOURCE_NAMES.PRODUCTS}/${productId}/plans`); - } + /** + * Retrieves all the plans associated with a specific product. By default, the response does not contain any relational data. If you want to expand the relational data, you can do so with the expand query parameter. + * + * @param {string} productUuid - The UUID for the pricingTable + * @param {{ granteeId?: string; currency?: string }} options - (Optional) Filter parameters. See https://docs.salable.app/api/v2#tag/Products/operation/getProductPricingTable + * + * @returns {Promise} + */ + getPricingTable: (productUuid: string, options?: { granteeId?: string; currency?: string }) => Promise; - /** - * Get all features for a product - * d - * @param {string} productId The uuid of the product - * - * @returns {Promise} An array of all the associated features - */ + /** + * Retrieves all the plans associated with a specific product. By default, the response does not contain any relational data. If you want to expand the relational data, you can do so with the `expand` query parameter. + * + * @param {string} productUuid The uuid of the product + * + * Docs - https://docs.salable.app/api/v2#tag/Products/operation/getProductPlans + * + * @returns {Promise} An array of all the associated plans + */ + getPlans(productUuid: string): Promise; - public getFeatures(productId: string): Promise { - return this._request(`${RESOURCE_NAMES.PRODUCTS}/${productId}/features`); - } + /** + * Retrieve the list of features for a product + * + * @param {string} productUuid The uuid of the product + * + * Docs - https://docs.salable.app/api/v2#tag/Products/operation/getProductFeatures + * + * @returns {Promise} An array of all the associated features + */ + getFeatures(productUuid: string): Promise; - /** - * Get all capabilities for a product - * - * @param {string} productId The uuid of the product - * - * @returns {Promise} - */ + /** + * Retrieve the list of capabilities for a product + * + * @param {string} productUuid The uuid of the product + * + * Docs - https://docs.salable.app/api/v2#tag/Products/operation/getProductCapabilities + * + * @returns {Promise} + */ + getCapabilities(productUuid: string): Promise; - public getCapabilities(productId: string) { - return this._request( - `${RESOURCE_NAMES.PRODUCTS}/${productId}/capabilities` - ); - } + /** + * Retrieve the list of currencies for a product + * + * @param {string} productUuid The uuid of the product + * + * Docs - https://docs.salable.app/api/v2#tag/Products/operation/getProductCurrencies + * + * @returns {Promise} + */ + getCurrencies(productUuid: string): Promise; + }; +}; - /** - * Get all currencies for a product - * - * @param {string} productId The uuid of the product - * - * @returns {Promise} - */ +export type ProductVersionedMethods = V extends keyof ProductVersions ? ProductVersions[V] : never; - public getCurrencies(productId: string) { - return this._request( - `${RESOURCE_NAMES.PRODUCTS}/${productId}/currencies` - ); +export const productsInit = (version: V, request: ApiRequest): ProductVersionedMethods => { + switch (version) { + case Version.V2: + return v2ProductMethods(request) as ProductVersionedMethods; + default: + throw new Error('Unsupported version'); } -} +}; diff --git a/src/products/products.test.ts b/src/products/products.test.ts deleted file mode 100644 index 0863c4c5..00000000 --- a/src/products/products.test.ts +++ /dev/null @@ -1,100 +0,0 @@ -import fetch from 'jest-fetch-mock'; -import { BaseRequest } from '../base'; -import Products from './index'; - -const api = new Products('test-key'); -const requestSpyOn = jest.spyOn(api as unknown as { _request: BaseRequest }, '_request'); - -fetch.enableMocks(); - -const mockResponse = { mockProperty: 'example' }; - -beforeEach(() => { - fetch.resetMocks(); - fetch.mockResponse(JSON.stringify(mockResponse), { - headers: { 'Content-Type': 'application/json' }, - }); -}); - -describe('Unit | ThirdPartyAPI | Products', () => { - it('Get all products: should return the response unchanged', async () => { - const fetchedPlan = await api.getAll(); - expect(fetchedPlan).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('products'); - }); - - it('Get one product: should return the response unchanged', async () => { - const fetchedPlan = await api.getOne('xxxxx'); - expect(fetchedPlan).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('products/xxxxx'); - }); - - it('Get product plans: should return the response unchanged', async () => { - const fetchedPlan = await api.getPlans('xxxxx'); - expect(fetchedPlan).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('products/xxxxx/plans'); - }); - - it('Get product currencies: should return the response unchanged', async () => { - const fetchedPlan = await api.getCurrencies('xxxxx'); - expect(fetchedPlan).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('products/xxxxx/currencies'); - }); - - it('Get product capabilities: should return the response unchanged', async () => { - const fetchedPlan = await api.getCapabilities('xxxxx'); - expect(fetchedPlan).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('products/xxxxx/capabilities'); - }); - - it('Get product basic pricing table: should set the global and individual plan options correctly and return the response unchanged', async () => { - const fetchedPricingTable = await api.getPricingTable('xxxxx', { - globalPlanOptions: { - successUrl: 'aaaaa', - cancelUrl: 'aaaaa', - contactUsLink: 'aaaaa', - granteeId: 'userId_1', - member: 'orgId_1', - couponCode: 'SALE50', - promoCode: 'SALE50', - customMessage: 'Custom Message', - allowPromoCode: 'true', - marketingConsent: 'true', - currency: 'USD', - vat: { - companyName: 'Company', - city: 'City', - number: '10', - postcode: 'NR1 1RN', - state: 'State', - street: 'Street', - country: 'GB', - }, - customer: { - email: 'customer@email.com', - postcode: 'NR1 1RN', - country: 'GB', - }, - }, - individualPlanOptions: { - planUuid123: { - successUrl: 'bbbbb', - cancelUrl: 'bbbbb', - granteeId: 'userId_2', - }, - }, - }); - expect(fetchedPricingTable).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith( - 'products/xxxxx/pricingtable?&globalGranteeId=userId_1&globalSuccessUrl=aaaaa&globalCancelUrl=aaaaa&contactUsLink=aaaaa&member=orgId_1&marketingConsent=true&couponCode=SALE50&promoCode=SALE50&allowPromoCode=true&customMessage=Custom%20Message¤cy=USD&customerEmail=customer@email.com&customerCountry=GB&customerPostcode=NR1%201RN&vatCompanyName=Company&vatCity=City&vatNumber=10&vatPostcode=NR1%201RN&vatState=State&vatStreet=Street&vatCountry=GB&granteeIds=planUuid123,userId_2&cancelUrls=planUuid123,bbbbb&successUrls=planUuid123,bbbbb' - ); - }); - - it('should return an error when promise rejects', async () => { - fetch.mockReject(() => Promise.reject('API is down')); - - await expect(async () => { - await api.getOne('xxxxx'); - }).rejects.toBe('API is down'); - }); -}); diff --git a/src/products/v2/index.ts b/src/products/v2/index.ts new file mode 100644 index 00000000..759bc11e --- /dev/null +++ b/src/products/v2/index.ts @@ -0,0 +1,16 @@ +import { ApiRequest } from '../../types'; +import { ProductVersions } from '..'; +import { RESOURCE_NAMES, SALABLE_BASE_URL } from '../../constants'; +import getUrl from '../../utils/get-url'; + +const baseUrl = `${SALABLE_BASE_URL}/${RESOURCE_NAMES.PRODUCTS}`; + +export const v2ProductMethods = (request: ApiRequest): ProductVersions['v2'] => ({ + getAll: () => request(baseUrl, { method: 'GET' }), + getOne: (uuid, options) => request(getUrl(`${baseUrl}/${uuid}`, options), { method: 'GET' }), + getPricingTable: (uuid, options) => request(getUrl(`${baseUrl}/${uuid}/pricingtable`, options), { method: 'GET' }), + getPlans: (uuid) => request(getUrl(`${baseUrl}/${uuid}/plans`), { method: 'GET' }), + getFeatures: (uuid) => request(`${baseUrl}/${uuid}/features`, { method: 'GET' }), + getCapabilities: (uuid) => request(`${baseUrl}/${uuid}/capabilities`, { method: 'GET' }), + getCurrencies: (uuid) => request(`${baseUrl}/${uuid}/currencies`, { method: 'GET' }), +}); diff --git a/src/products/v2/product-v2.test.ts b/src/products/v2/product-v2.test.ts new file mode 100644 index 00000000..16093f90 --- /dev/null +++ b/src/products/v2/product-v2.test.ts @@ -0,0 +1,167 @@ +import Salable from '../..'; +import { Plan, Product, ProductCapability, ProductCurrency, ProductFeature, ProductPricingTable, Version } from '../../types'; +import { testUuids } from '../../../test-utils/scripts/create-test-data'; + +describe('Products V2 Tests', () => { + const apiKey = testUuids.devApiKeyV2; + const version = Version.V2; + + const salable = new Salable(apiKey, version); + + const productUuid = testUuids.productUuid; + + it('getAll: should successfully fetch all products', async () => { + const data = await salable.products.getAll(); + + expect(data).toEqual(expect.arrayContaining([ProductSchema])); + }); + it('getOne: should successfully fetch a product', async () => { + const data = await salable.products.getOne(productUuid); + + expect(data).toEqual(ProductSchema); + }); + + it('getOne (w / search params): should successfully fetch a product', async () => { + const data = await salable.products.getOne(productUuid, { + expand: ['features', 'features.featureEnumOptions', 'capabilities', 'currencies', 'currencies.currency', 'organisationPaymentIntegration', 'plans', 'plans.capabilities', 'plans.features', 'plans.features.feature', 'plans.features.enumValue', 'plans.currencies', 'plans.currencies.currency'], + }); + + expect(data).toEqual({ + ...ProductSchema, + features: expect.toBeOneOf([expect.anything()]), + capabilities: expect.toBeOneOf([expect.anything()]), + currencies: expect.toBeOneOf([expect.anything()]), + organisationPaymentIntegration: expect.toBeOneOf([expect.anything()]), + plans: expect.toBeOneOf([expect.anything()]), + }); + }); + + it('getPricingTable: should successfully fetch a product pricing table', async () => { + const data = await salable.products.getPricingTable(productUuid); + + expect(data).toEqual(ProductPricingTableSchema); + }); + + it('getPricingTable (w / search params): should successfully fetch a product pricing table', async () => { + const data = await salable.products.getPricingTable(productUuid, { + granteeId: 'granteeid@email.com', + currency: 'GBP', + }); + + expect(data).toEqual(ProductPricingTableSchema); + }); + + it('getPlans: should successfully fetch a product plans', async () => { + const data = await salable.products.getPlans(productUuid); + + expect(data).toEqual(expect.arrayContaining([ProductPlanSchema])); + }); + + it('getFeatures: should successfully fetch a product features', async () => { + const data = await salable.products.getFeatures(productUuid); + + expect(data).toEqual(expect.arrayContaining([ProductFeatureSchema])); + }); + + it('getCapabilities: should successfully fetch a product capabilities', async () => { + const data = await salable.products.getCapabilities(productUuid); + + expect(data).toEqual(expect.arrayContaining([ProductCapabilitySchema])); + }); + + it('getCurrencies: should successfully fetch a product currencies', async () => { + const data = await salable.products.getCurrencies(productUuid); + + expect(data).toEqual(expect.arrayContaining([ProductCurrencySchema])); + }); +}); + +const ProductSchema: Product = { + uuid: expect.any(String), + name: expect.any(String), + slug: expect.any(String), + description: expect.toBeOneOf([expect.any(String), null]), + logoUrl: expect.toBeOneOf([expect.any(String), null]), + displayName: expect.toBeOneOf([expect.any(String), null]), + organisation: expect.any(String), + status: expect.any(String), + paid: expect.any(Boolean), + isTest: expect.any(Boolean), + organisationPaymentIntegrationUuid: expect.any(String), + paymentIntegrationProductId: expect.toBeOneOf([expect.any(String), null]), + appType: expect.any(String), + updatedAt: expect.any(String), +}; + +const ProductPricingTableSchema: ProductPricingTable = { + ...ProductSchema, + features: expect.toBeOneOf([expect.anything(), undefined]), + currencies: expect.toBeOneOf([expect.anything(), undefined]), + plans: expect.toBeOneOf([expect.anything(), undefined]), + status: expect.any(String), + updatedAt: expect.any(String), + uuid: expect.any(String), +}; +const ProductPlanSchema: Plan = { + uuid: expect.any(String), + name: expect.any(String), + slug: expect.any(String), + description: expect.toBeOneOf([expect.any(String), null]), + displayName: expect.any(String), + status: expect.any(String), + trialDays: expect.toBeOneOf([expect.any(Number), null]), + evaluation: expect.any(Boolean), + evalDays: expect.any(Number), + perSeatAmount: expect.any(Number), + maxSeatAmount: expect.any(Number), + organisation: expect.any(String), + visibility: expect.any(String), + licenseType: expect.any(String), + hasAcceptedTransaction: expect.any(Boolean), + interval: expect.any(String), + length: expect.any(Number), + active: expect.any(Boolean), + planType: expect.any(String), + pricingType: expect.any(String), + environment: expect.any(String), + isTest: expect.any(Boolean), + paddlePlanId: expect.toBeOneOf([expect.any(String), null]), + productUuid: expect.any(String), + salablePlan: expect.any(Boolean), + type: expect.toBeOneOf([expect.any(String), undefined]), + updatedAt: expect.any(String), + features: expect.toBeOneOf([expect.anything(), undefined]), +}; + +const ProductFeatureSchema: ProductFeature = { + defaultValue: expect.any(String), + description: expect.toBeOneOf([expect.any(String), null]), + displayName: expect.any(String), + featureEnumOptions: expect.toBeOneOf([expect.anything()]), + name: expect.any(String), + productUuid: expect.any(String), + showUnlimited: expect.any(Boolean), + sortOrder: expect.any(Number), + status: expect.any(String), + updatedAt: expect.any(String), + uuid: expect.any(String), + valueType: expect.any(String), + variableName: expect.any(String), + visibility: expect.any(String), +}; + +const ProductCapabilitySchema: ProductCapability = { + uuid: expect.any(String), + name: expect.any(String), + description: expect.any(String), + status: expect.any(String), + productUuid: expect.any(String), + updatedAt: expect.any(String), +}; + +const ProductCurrencySchema: ProductCurrency = { + productUuid: expect.any(String), + currencyUuid: expect.any(String), + defaultCurrency: expect.any(Boolean), + currency: expect.toBeOneOf([expect.anything()]), +}; diff --git a/src/rbac/index.ts b/src/rbac/index.ts deleted file mode 100644 index 4aa0cad4..00000000 --- a/src/rbac/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Base } from '../base'; -import Permissions from './permissions'; -import Roles from './roles'; -import Users from './users'; - -/** - * Salable Node SDK RBAC Class - * - * Contains the Salable RBAC methods - */ -export default class Rbac extends Base { - public permissions: Permissions = new Permissions(this._apiKey); - public roles: Roles = new Roles(this._apiKey); - public users: Users = new Users(this._apiKey); -} diff --git a/src/rbac/permissions.ts b/src/rbac/permissions.ts deleted file mode 100644 index c89ac5d9..00000000 --- a/src/rbac/permissions.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { Base } from '../base'; -import { RESOURCE_NAMES } from '../constants'; -import { ICreatePermissionInput, IPermission, IUpdatePermissionInput } from '../types'; - -/** - * Salable Node SDK RBAC Permissions Class - * - * Contains the Salable RBAC Permissions methods - * - * @deprecated - */ -export default class Permissions extends Base { - /** - * Get all permissions - * @deprecated - * @returns {Promise} All permissions - */ - public getAll(): Promise { - return this._request(RESOURCE_NAMES.RBAC.PERMISSIONS); - } - - /** - * Get a single permission - * - * @param {string} uuid - The UUID of the permission to get - * @deprecated - * @returns {Promise} The details for the permission UUID passed - */ - public getOne(uuid: string): Promise { - return this._request(`${RESOURCE_NAMES.RBAC.PERMISSIONS}/${uuid}`); - } - - /** - * Create a new permission - * - * @param {ICreatePermissionInput} permissionDetails - The details of the new permission to be created - * @deprecated - * @returns {Promise} The created permission - */ - public create(permissionDetails: ICreatePermissionInput): Promise { - return this._request(RESOURCE_NAMES.RBAC.PERMISSIONS, { - method: 'POST', - body: permissionDetails, - }); - } - - /** - * Deletes a permission - * - * @param {string} uuid - The UUID of the permission to delete - * @deprecated - * @returns {Promise} The created permission - */ - public delete(uuid: string): Promise { - return this._request(`${RESOURCE_NAMES.RBAC.PERMISSIONS}/${uuid}`, { - method: 'DELETE', - }); - } - - /** - * Updates a permission - * - * @param {string} uuid - The UUID of the permission to update - * @param {IUpdatePermissionInput} permissionDetails - The details to update the permission with - * @deprecated - * @returns {Promise} The updated permission - */ - public update(uuid: string, permissionDetails: IUpdatePermissionInput): Promise { - return this._request( - `${RESOURCE_NAMES.RBAC.PERMISSIONS}/${uuid}`, - { - method: 'PUT', - body: permissionDetails, - } - ); - } -} diff --git a/src/rbac/rbac.test.ts b/src/rbac/rbac.test.ts deleted file mode 100644 index f4dc8655..00000000 --- a/src/rbac/rbac.test.ts +++ /dev/null @@ -1,215 +0,0 @@ -import fetch from 'jest-fetch-mock'; -import { BaseRequest } from '../base'; -import Rbac from './index'; - -const api = new Rbac('test-key'); -const requestSpyOnUsers = jest.spyOn(api.users as unknown as { _request: BaseRequest }, '_request'); -const requestSpyOnPermissions = jest.spyOn( - api.permissions as unknown as { _request: BaseRequest }, - '_request' -); -const requestSpyOnRoles = jest.spyOn(api.roles as unknown as { _request: BaseRequest }, '_request'); - -fetch.enableMocks(); - -const mockResponse = { mockProperty: 'example' }; - -beforeEach(() => { - fetch.resetMocks(); - fetch.mockResponse(JSON.stringify(mockResponse), { - headers: { 'Content-Type': 'application/json' }, - }); -}); - -describe('Unit | ThirdPartyAPI | Plans', () => { - describe('Users', () => { - it('Get a user: should return the response unchanged', async () => { - const fetchedUser = await api.users.getOne('xxxxx'); - expect(fetchedUser).toStrictEqual(mockResponse); - expect(requestSpyOnUsers).toHaveBeenCalledWith('rbac/users/xxxxx'); - }); - it('Get all users: should return the response unchanged', async () => { - const fetchedUsers = await api.users.getAll(); - expect(fetchedUsers).toStrictEqual(mockResponse); - expect(requestSpyOnUsers).toHaveBeenCalledWith('rbac/users'); - }); - it('Create user: should return the response unchanged', async () => { - const createdUser = await api.users.create({ - id: 'xxxxx', - name: 'name', - role: 'role', - permissions: ['permission'], - }); - expect(createdUser).toStrictEqual(mockResponse); - expect(requestSpyOnUsers).toHaveBeenCalledWith('rbac/users', { - method: 'POST', - body: { - id: 'xxxxx', - name: 'name', - role: 'role', - permissions: ['permission'], - }, - }); - }); - it('Update user: should return the response unchanged', async () => { - const updatedUser = await api.users.update('aaaaa', { - id: 'xxxxx', - name: 'name', - role: 'role', - permissions: { - add: ['permission'], - remove: ['other-permission'], - }, - }); - expect(updatedUser).toStrictEqual(mockResponse); - expect(requestSpyOnUsers).toHaveBeenCalledWith('rbac/users/aaaaa', { - method: 'PUT', - body: { - id: 'xxxxx', - name: 'name', - role: 'role', - permissions: { - add: ['permission'], - remove: ['other-permission'], - }, - }, - }); - }); - it('Delete user: should return the response unchanged', async () => { - fetch.mockResponse('', { - headers: { 'Content-Type': 'text/plain' }, - }); - const updatedUser = await api.users.delete('aaaaa'); - expect(updatedUser).toStrictEqual(''); - expect(requestSpyOnUsers).toHaveBeenCalledWith('rbac/users/aaaaa', { method: 'DELETE' }); - }); - }); - - describe('Roles', () => { - it('Get a role: should return the response unchanged', async () => { - const fetchedRole = await api.roles.getOne('xxxxx'); - expect(fetchedRole).toStrictEqual(mockResponse); - expect(requestSpyOnRoles).toHaveBeenCalledWith('rbac/roles/xxxxx'); - }); - it('Get all role: should return the response unchanged', async () => { - const fetchedRoles = await api.roles.getAll(); - expect(fetchedRoles).toStrictEqual(mockResponse); - expect(requestSpyOnRoles).toHaveBeenCalledWith('rbac/roles'); - }); - it('Create role: should return the response unchanged', async () => { - const createdRole = await api.roles.create({ - name: 'name', - description: 'description', - permissions: ['permission'], - }); - expect(createdRole).toStrictEqual(mockResponse); - expect(requestSpyOnRoles).toHaveBeenCalledWith('rbac/roles', { - method: 'POST', - body: { - name: 'name', - description: 'description', - permissions: ['permission'], - }, - }); - }); - it('Update role: should return the response unchanged', async () => { - const updatedRoles = await api.roles.update('aaaaa', { - name: 'name', - description: 'description', - permissions: { - add: ['permission'], - remove: ['other-permission'], - }, - }); - expect(updatedRoles).toStrictEqual(mockResponse); - expect(requestSpyOnRoles).toHaveBeenCalledWith('rbac/roles/aaaaa', { - method: 'PUT', - body: { - name: 'name', - description: 'description', - permissions: { - add: ['permission'], - remove: ['other-permission'], - }, - }, - }); - }); - it('Delete role: should return the response unchanged', async () => { - fetch.mockResponse('', { - headers: { 'Content-Type': 'text/plain' }, - }); - const deleteRole = await api.roles.delete('aaaaa'); - expect(deleteRole).toStrictEqual(''); - expect(requestSpyOnRoles).toHaveBeenCalledWith('rbac/roles/aaaaa', { method: 'DELETE' }); - }); - }); - - describe('Permissions', () => { - it('Get a permission: should return the response unchanged', async () => { - const fetchedPermission = await api.permissions.getOne('xxxxx'); - expect(fetchedPermission).toStrictEqual(mockResponse); - expect(requestSpyOnPermissions).toHaveBeenCalledWith('rbac/permissions/xxxxx'); - }); - it('Get all permissions: should return the response unchanged', async () => { - const fetchedPermissions = await api.permissions.getAll(); - expect(fetchedPermissions).toStrictEqual(mockResponse); - expect(requestSpyOnPermissions).toHaveBeenCalledWith('rbac/permissions'); - }); - it('Create permission: should return the response unchanged', async () => { - const createdAt = new Date(); - const updatedAt = new Date(); - const createdPermission = await api.permissions.create({ - value: 'value', - type: 'type', - description: 'description', - dependencies: { dependency: 'xxxxx' }, - createdAt, - updatedAt, - rbacUsers: ['user'], - roles: ['role'], - }); - expect(createdPermission).toStrictEqual(mockResponse); - expect(requestSpyOnPermissions).toHaveBeenCalledWith('rbac/permissions', { - method: 'POST', - body: { - value: 'value', - type: 'type', - description: 'description', - dependencies: { dependency: 'xxxxx' }, - createdAt, - updatedAt, - rbacUsers: ['user'], - roles: ['role'], - }, - }); - }); - it('Update permission: should return the response unchanged', async () => { - const updatedPermissions = await api.permissions.update('aaaaa', { - value: 'value', - type: 'type', - description: 'description', - dependencies: ['xxxxx'], - }); - expect(updatedPermissions).toStrictEqual(mockResponse); - expect(requestSpyOnPermissions).toHaveBeenCalledWith('rbac/permissions/aaaaa', { - method: 'PUT', - body: { - value: 'value', - type: 'type', - description: 'description', - dependencies: ['xxxxx'], - }, - }); - }); - it('Delete permission: should return the response unchanged', async () => { - fetch.mockResponse('', { - headers: { 'Content-Type': 'text/plain' }, - }); - const deletePermission = await api.permissions.delete('aaaaa'); - expect(deletePermission).toStrictEqual(''); - expect(requestSpyOnPermissions).toHaveBeenCalledWith('rbac/permissions/aaaaa', { - method: 'DELETE', - }); - }); - }); -}); diff --git a/src/rbac/roles.ts b/src/rbac/roles.ts deleted file mode 100644 index 75b03f54..00000000 --- a/src/rbac/roles.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { Base } from '../base'; -import { RESOURCE_NAMES } from '../constants'; -import { ICreateRoleInput, IRole, IUpdateRoleInput } from '../types'; - -/** - * Salable Node SDK RBAC Roles Class - * - * Contains the Salable RBAC Roles methods - * - * @deprecated - */ -export default class Roles extends Base { - /** - * Get all roles - * @deprecated - * @returns {Promise} All roles - */ - public getAll(): Promise { - return this._request(RESOURCE_NAMES.RBAC.ROLES); - } - - /** - * Get a single role - * - * @param {string} uuid - The UUID of the role to get - * @deprecated - * @returns {Promise} The details for the role UUID passed - */ - public getOne(uuid: string): Promise { - return this._request(`${RESOURCE_NAMES.RBAC.ROLES}/${uuid}`); - } - - /** - * Create a new role - * - * @param {ICreateRoleInput} roleDetails - The details of the new role to be created - * @deprecated - * @returns {Promise} The created role - */ - public create(roleDetails: ICreateRoleInput): Promise { - return this._request(RESOURCE_NAMES.RBAC.ROLES, { - method: 'POST', - body: roleDetails, - }); - } - - /** - * Deletes a role - * - * @param {string} uuid - The UUID of the role to delete - * @deprecated - * @returns {Promise} The created role - */ - public delete(uuid: string): Promise { - return this._request(`${RESOURCE_NAMES.RBAC.ROLES}/${uuid}`, { - method: 'DELETE', - }); - } - - /** - * Updates a role - * - * @param {string} uuid - The UUID of the role to update - * @param {IUpdateRoleInput} roleDetails - The details to update the role with - * @deprecated - * @returns {Promise} The updated role - */ - public update(uuid: string, roleDetails: IUpdateRoleInput): Promise { - return this._request(`${RESOURCE_NAMES.RBAC.ROLES}/${uuid}`, { - method: 'PUT', - body: roleDetails, - }); - } -} diff --git a/src/rbac/users.ts b/src/rbac/users.ts deleted file mode 100644 index f3de05db..00000000 --- a/src/rbac/users.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { Base } from '../base'; -import { RESOURCE_NAMES } from '../constants'; -import { ICreateRbacUserInput, IRbacUser, IUpdateRbacUserInput } from '../types'; - -/** - * Salable Node SDK RBAC Users Class - * - * Contains the Salable RBAC Users methods - * @deprecated - */ -export default class Users extends Base { - /** - * Get all users - * @deprecated - * @returns {Promise} All users - */ - public getAll(): Promise { - return this._request(RESOURCE_NAMES.RBAC.USERS); - } - - /** - * Get a single user - * - * @param {string} uuid - The UUID of the user to get - * @deprecated - * @returns {Promise} The details for the user UUID passed - */ - public getOne(uuid: string): Promise { - return this._request(`${RESOURCE_NAMES.RBAC.USERS}/${uuid}`); - } - - /** - * Create a new user - * - * @param {ICreateRbacUserInput} userDetails - The details of the new user to be created - * @deprecated - * @returns {Promise} The created user - */ - public create(userDetails: ICreateRbacUserInput): Promise { - return this._request(RESOURCE_NAMES.RBAC.USERS, { - method: 'POST', - body: userDetails, - }); - } - - /** - * Deletes a user - * - * @param {string} uuid - The UUID of the user to delete - * @deprecated - * @returns {Promise} The created user - */ - public delete(uuid: string): Promise { - return this._request(`${RESOURCE_NAMES.RBAC.USERS}/${uuid}`, { - method: 'DELETE', - }); - } - - /** - * Updates a user - * - * @param {string} uuid - The UUID of the user to update - * @param {IUpdateRbacUserInput} userDetails - The details to update the user with - * @deprecated - * @returns {Promise} The updated user - */ - public update(uuid: string, userDetails: IUpdateRbacUserInput): Promise { - return this._request(`${RESOURCE_NAMES.RBAC.USERS}/${uuid}`, { - method: 'PUT', - body: userDetails, - }); - } -} diff --git a/src/subscriptions/index.ts b/src/subscriptions/index.ts index a6b44976..46ef9766 100644 --- a/src/subscriptions/index.ts +++ b/src/subscriptions/index.ts @@ -1,126 +1,188 @@ -import { Base } from '../base'; -import { RESOURCE_NAMES } from '../constants'; -import { - CancelWhen, - ISubscription, - ISubscriptionAddSeatsBody, - ISubscriptionAddSeatsParams, - ISubscriptionRemoveSeatsBody, - ISubscriptionRemoveSeatsParams, - ISubscriptionUpdatePlanInput, - SubscriptionsChangePlanBody, -} from '../types'; +import { GetAllLicensesResponse, Subscription, SubscriptionInvoice, SubscriptionPaymentLink, SubscriptionPaymentMethod, SubscriptionPlan, SubscriptionSeatResponse, SubscriptionStatus, ApiRequest, TVersion, Version } from '../types'; +import { v2SubscriptionMethods } from './v2'; -/** - * Salable Node SDK Subscription Class - * - * Contains the Salable subscription methods - */ -export default class Subscriptions extends Base { - /** - * Get a single subscription - * - * @param {string} subscriptionId The uuid of the subscription - * - * @returns {Promise} The data of the subscription requested - */ - public getOne(subscriptionId: string): Promise { - return this._request(`${RESOURCE_NAMES.SUBSCRIPTIONS}/${subscriptionId}`); - } +export type SubscriptionVersions = { + [Version.V2]: { + /** + * Retrieves a list of all subscriptions. + * + * @param {{ status?: SubscriptionStatus; email?: string; cursor?: string; take?: string; expand?: string[] }} options - Filter and pagination options + * + * Docs - https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptions + * + * @returns {Promise} The data of the subscription requested + */ + getAll: (options?: { status?: SubscriptionStatus; email?: string; cursor?: string; take?: string; expand?: string[] }) => Promise; - /** - * Update a subscription's plan (DEPRECATED) - * - * @param {string} newPlanId The uuid of the new plan - * @param {string} subscriptionId The uuid of the subscription - * - * @returns {Promise} - */ + /** + * Retrieves the subscription data based on the UUID. By default, the response does not contain any relational data. If you want to expand the relational data, you can do so with the `expand` query parameter. + * + * @param {string} subscriptionUuid - The UUID of the subscription + * + * Docs - https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionByUuid + * + * @returns {Promise} The data of the subscription requested + */ + getOne: ( + subscriptionUuid: string, + options?: { + expand: string[]; + }, + ) => Promise; - public updatePlan(newPlanId: string, subscriptionId: string): Promise { - return this._request( - `${RESOURCE_NAMES.SUBSCRIPTIONS}/${subscriptionId}/updateplan/${newPlanId}`, - { - method: 'PUT', - } - ); - } + /** + * Changes a subscription's plan based on UUID. If the subscription is usage based the requested subscription will be canceled and a new subscription will be created on the plan you are changing to. + * + * @param {string} subscriptionUuid - The UUID of the subscription + * + * Docs - https://docs.salable.app/api/v2#tag/Subscriptions/operation/changeSubscriptionsPlan + * + * @returns {Promise} + */ + changePlan: ( + subscriptionUuid: string, + options: { + planUuid: string; + proration?: string; + }, + ) => Promise; - /** - * Change a subscription's plan - * - * @param {subscriptionUuid} - Subscription uuid - * @param {SubscriptionsChangePlanBody} - Change subscription plan options - * - * @returns {Promise} - */ + /** + * Retrieves a list of invoices for a subscription + * + * @param {string} subscriptionUuid - The UUID of the subscription + * + * Docs - https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionInvoices + * + * @returns {Promise} + */ + getInvoices: (subscriptionUuid: string) => Promise; - public changePlan(subscriptionUuid: string, config: SubscriptionsChangePlanBody): Promise { - return this._request( - `${RESOURCE_NAMES.SUBSCRIPTIONS}/${subscriptionUuid}/change-plan`, - { - method: 'PUT', - body: config, - } - ); - } + /** + * Retrieves a list of available plans that a subscribed user can switch to + * + * @param {string} subscriptionUuid - The UUID of the subscription + * + * Docs - https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionUpdatablePlans + * + * @returns {Promise} + */ + getSwitchablePlans: (subscriptionUuid: string) => Promise; - /** - * Cancel's a subscription - * - * @param {string} subscriptionId The uuid of the subscription to cancel - * @param {CancelWhen} when Whether you want to cancel the subscription now or end of cycle - * - * @returns {Promise} - */ + /** + * Cancels a subscription by providing the `subscriptionUuid` It will cancel immediately or at the end of the Subscription based on value of the `when` query parameter. + * + * @param {string} subscriptionUuid - The UUID of the subscription to cancel + * + * Docs - https://docs.salable.app/api/v2#tag/Subscriptions/operation/cancelSubscription + * + * @returns {Promise} + */ + cancel: ( + subscriptionUuid: string, + options: { + when: 'now' | 'end'; + }, + ) => Promise; - public cancel(subscriptionId: string, when: CancelWhen): Promise { - return this._request( - `${RESOURCE_NAMES.SUBSCRIPTIONS}/${subscriptionId}/cancel?when=${when}`, - { - method: 'PUT', - } - ); - } + /** + * Retrieves the update payment link for a specific subscription. The link opens up a management portal for your payment integration that will have an option for the customer to update their payment details. + * + * @param {string} subscriptionUuid - The UUID of the subscription to cancel + * + * Docs - https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionUpdatePaymentLink + * + * @returns {Promise} + */ + getUpdatePaymentLink: (subscriptionUuid: string) => Promise; - /** - * Add Seats to a Subscription - * - * @param {string} subscriptionId The uuid of the subscription - * @param {ISubscriptionAddSeatsParams} config Config to be passed in to the add seats method - * - * @returns {Promise} - */ + /** + * Retrieves the customer portal link for a subscription. The link opens up a subscription management portal for your payment integration that will have an options for the customer to manage their subscription. + * + * @param {string} subscriptionUuid - The UUID of the subscription to cancel + * + * Docs - https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionCustomerPortalLink + * + * @returns {Promise} + */ + getPortalLink: (subscriptionUuid: string) => Promise; - public addSeats(subscriptionId: string, config: ISubscriptionAddSeatsParams): Promise { - return this._request( - `${RESOURCE_NAMES.SUBSCRIPTIONS}/${subscriptionId}/seats`, - { - method: 'POST', - body: config, - } - ); - } + /** + * Retrieves the cancel subscription link for a specific subscription. The link opens up a subscription management portal for your payment integration that will have an option for the customer to cancel the subscription. + * + * @param {string} subscriptionUuid - The UUID of the subscription to cancel + * + * Docs - https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionCancelLink + * + * @returns {Promise} + */ + getCancelSubscriptionLink: (subscriptionUuid: string) => Promise; + + /** + * Retrieves the payment method used to pay for a subscription. + * + * @param {string} subscriptionUuid - The UUID of the subscription to cancel + * + * Docs - https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionPaymentMethod + * + * @returns {Promise} + */ + getPaymentMethod: (subscriptionUuid: string) => Promise; + + /** + * Reactivate a Subscription's scheduled cancellation before the billing period has passed. If the billing period has passed and the Subscription has already been canceled please create a new Subscription. + * + * @param {string} subscriptionUuid - The UUID of the subscription to cancel + * + * Docs - https://docs.salable.app/api/v2#tag/Subscriptions/operation/getSubscriptionReactivate + * + * @returns {Promise} + */ + reactivateSubscription: (subscriptionUuid: string) => Promise; + + /** + * Incrementing will create unassigned licenses. + * + * @param {string} subscriptionUuid - The UUID of the subscription + * + * Docs - https://docs.salable.app/api/v2#tag/Subscriptions/operation/incrementSubscriptionSeats + * + * @returns {Promise} + */ + addSeats: ( + subscriptionUuid: string, + options: { + increment: number; + proration?: string; + }, + ) => Promise; + + /** + * Decrementing will only remove unassigned licenses. + * + * @param {string} subscriptionUuid - The UUID of the subscription + * + * Docs - https://docs.salable.app/api/v2#tag/Subscriptions/operation/decrementSubscriptionSeats + * + * @returns {Promise} + */ + removeSeats: ( + subscriptionUuid: string, + options: { + decrement: number; + proration?: string; + }, + ) => Promise; + }; +}; - /** - * Remove Seats from a Subscription - * - * @param {string} subscriptionId The uuid of the subscription - * @param {ISubscriptionRemoveSeatsParams} config Config to be passed in to the remove seats method - * - * @returns {Promise} - */ +export type SubscriptionVersionedMethods = V extends keyof SubscriptionVersions ? SubscriptionVersions[V] : never; - public removeSeats( - subscriptionId: string, - config: ISubscriptionRemoveSeatsParams - ): Promise { - return this._request( - `${RESOURCE_NAMES.SUBSCRIPTIONS}/${subscriptionId}/seats`, - { - method: 'PUT', - body: config, - } - ); +export const subscriptionsInit = (version: V, request: ApiRequest): SubscriptionVersionedMethods => { + switch (version) { + case Version.V2: + return v2SubscriptionMethods(request) as SubscriptionVersionedMethods; + default: + throw new Error('Unsupported version'); } -} +}; diff --git a/src/subscriptions/subscriptions.test.ts b/src/subscriptions/subscriptions.test.ts deleted file mode 100644 index 9d4a8ad5..00000000 --- a/src/subscriptions/subscriptions.test.ts +++ /dev/null @@ -1,84 +0,0 @@ -import fetch from 'jest-fetch-mock'; -import Subscriptions from './index'; -import { BaseRequest } from '../base'; - -const api = new Subscriptions('test-key'); -const requestSpyOn = jest.spyOn(api as unknown as { _request: BaseRequest }, '_request'); - -fetch.enableMocks(); - -const mockResponse = { mockProperty: 'example' }; - -beforeEach(() => { - fetch.resetMocks(); - fetch.mockResponse(JSON.stringify(mockResponse), { - headers: { 'Content-Type': 'application/json' }, - }); -}); - -describe('Unit | ThirdPartyAPI | Subscriptions', () => { - it('Get a subscription: should return the response unchanged', async () => { - const fetchedSubscription = await api.getOne('xxxxx'); - expect(fetchedSubscription).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('subscriptions/xxxxx'); - }); - - it("Update a subscription's plan: should return the response unchanged", async () => { - const fetchedSubscription = await api.updatePlan('aaaaa', 'xxxxx'); - expect(fetchedSubscription).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('subscriptions/xxxxx/updateplan/aaaaa', { - method: 'PUT', - }); - }); - - it("Change a subscription's plan: should return the response unchanged", async () => { - const fetchedSubscription = await api.changePlan('xxxxx', { - planUuid: 'aaaaa', - proration: 'always_invoice', - }); - expect(fetchedSubscription).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('subscriptions/xxxxx/change-plan', { - method: 'PUT', - body: { - planUuid: 'aaaaa', - proration: 'always_invoice', - }, - }); - }); - - it('Cancel a subscription: should call the endpoint with correct parameters', async () => { - const fetchedSubscription = await api.cancel('xxxxx', 'end'); - expect(fetchedSubscription).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('subscriptions/xxxxx/cancel?when=end', { - method: 'PUT', - }); - }); - - it('Add seats to a subscription: should call the endpoint with correct body and return the response unchanged', async () => { - const fetchedSubscription = await api.addSeats('xxxxx', { increment: 5 }); - expect(fetchedSubscription).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('subscriptions/xxxxx/seats', { - method: 'POST', - body: { increment: 5 }, - }); - }); - - it('Remove seats from a subscription: should call the endpoint with correct body and return the response unchanged', async () => { - const fetchedSubscription = await api.removeSeats('xxxxx', { decrement: 5 }); - expect(fetchedSubscription).toStrictEqual(mockResponse); - expect(requestSpyOn).toHaveBeenCalledWith('subscriptions/xxxxx/seats', { - method: 'PUT', - body: { decrement: 5 }, - }); - }); - - it('should return an error if subscription plan could not be changed', async () => { - fetch.mockReject(() => Promise.reject('Subscription failed to change')); - - await expect(async () => { - await api.updatePlan('test-sub-id', 'test-new-plan-id'); - }).rejects.toBe('Subscription failed to change'); - }); - - // TODO: Discuss what will be returned from change plan endpoint so test can be mocked -}); diff --git a/src/subscriptions/v2/index.ts b/src/subscriptions/v2/index.ts new file mode 100644 index 00000000..cbebda5d --- /dev/null +++ b/src/subscriptions/v2/index.ts @@ -0,0 +1,26 @@ +import { SubscriptionVersions } from '..'; +import { SubscriptionSeatResponse, ApiRequest } from '../../types'; +import { RESOURCE_NAMES, SALABLE_BASE_URL } from '../../constants'; +import getUrl from '../../utils/get-url'; + +const baseUrl = `${SALABLE_BASE_URL}/${RESOURCE_NAMES.SUBSCRIPTIONS}`; + +export const v2SubscriptionMethods = (request: ApiRequest): SubscriptionVersions['v2'] => ({ + getAll: (options) => request(getUrl(baseUrl, options), { method: 'GET' }), + getOne: (uuid, options) => request(getUrl(`${baseUrl}/${uuid}`, options), { method: 'GET' }), + changePlan: (uuid, options) => request(getUrl(`${baseUrl}/${uuid}/change-plan`, options), { method: 'PUT', body: JSON.stringify(options) }), + getInvoices: (uuid) => request(getUrl(`${baseUrl}/${uuid}/invoices`, {}), { method: 'GET' }), + getSwitchablePlans: (uuid) => request(getUrl(`${baseUrl}/${uuid}/updateplan/listplans`, {}), { method: 'GET' }), + cancel: (uuid, options) => request(getUrl(`${baseUrl}/${uuid}/cancel`, options), { method: 'PUT' }), + getUpdatePaymentLink: (uuid) => request(getUrl(`${baseUrl}/${uuid}/updatepaymentlink`, {}), { method: 'GET' }), + getPortalLink: (uuid) => request(getUrl(`${baseUrl}/${uuid}/customer-portal`, {}), { method: 'GET' }), + getCancelSubscriptionLink: (uuid) => request(getUrl(`${baseUrl}/${uuid}/cancelpaymentlink`, {}), { method: 'GET' }), + getPaymentMethod: (uuid) => request(getUrl(`${baseUrl}/${uuid}/payment-method`, {}), { method: 'GET' }), + reactivateSubscription: (uuid) => request(getUrl(`${baseUrl}/${uuid}/reactivate`, {}), { method: 'PUT' }), + addSeats: (uuid, options) => request(`${baseUrl}/${uuid}/seats`, { method: 'POST', body: JSON.stringify(options) }), + removeSeats: (uuid, options): Promise => + request(getUrl(`${baseUrl}/${uuid}/seats`, {}), { + method: 'PUT', + body: JSON.stringify(options), + }), +}); diff --git a/src/subscriptions/v2/subscriptions-v2.test.ts b/src/subscriptions/v2/subscriptions-v2.test.ts new file mode 100644 index 00000000..6678c9e4 --- /dev/null +++ b/src/subscriptions/v2/subscriptions-v2.test.ts @@ -0,0 +1,576 @@ +import prismaClient from '../../../test-utils/prisma/prisma-client'; +import Salable from '../..'; +import { Plan, Subscription, Version } from '../../types'; +import getEndTime from '../../../test-utils/helpers/get-end-time'; +import { v4 as uuidv4 } from 'uuid'; +import { testUuids } from '../../../test-utils/scripts/create-test-data'; + +const stripeEnvs = JSON.parse(process.env.stripEnvs || ''); + +const subscriptionUuid = uuidv4(); +const basicSubscriptionUuid = uuidv4(); +const proSubscriptionUuid = uuidv4(); +const perSeatSubscriptionUuid = uuidv4(); +const licenseUuid = uuidv4(); +const licenseTwoUuid = uuidv4(); +const licenseThreeUuid = uuidv4(); +const perSeatBasicLicenseUuids = [uuidv4(), uuidv4(), uuidv4(), uuidv4(), uuidv4(), uuidv4()]; +const testGrantee = '123456'; +const testEmail = 'tester@domain.com'; + +describe('Subscriptions V2 Tests', () => { + const apiKey = testUuids.devApiKeyV2; + const version = Version.V2; + + const salable = new Salable(apiKey, version); + + beforeAll(async () => { + await generateTestData(); + }); + + afterAll(async () => { + await deleteTestData(); + }); + + it('getAll: Should successfully fetch subscriptions', async () => { + const data = await salable.subscriptions.getAll(); + + expect(data).toEqual({ + first: expect.any(String), + last: expect.any(String), + data: expect.arrayContaining([subscriptionSchema]), + }); + }); + + it('getAll (w/ search params): Should successfully fetch subscriptions', async () => { + const dataWithSearchParams = await salable.subscriptions.getAll({ + status: 'ACTIVE', + take: '3', + email: testEmail, + expand: ['plan'], + }); + + expect(dataWithSearchParams).toEqual({ + first: expect.any(String), + last: expect.any(String), + data: expect.arrayContaining([{ ...subscriptionSchema, plan: planSchema }]), + }); + expect(dataWithSearchParams.data.length).toEqual(3); + expect(dataWithSearchParams.data).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + ...subscriptionSchema, + status: 'ACTIVE', + email: testEmail, + plan: planSchema, + }), + ]), + ); + }); + + it('getOne: Should successfully fetch the specified subscription', async () => { + const data = await salable.subscriptions.getOne(basicSubscriptionUuid); + + expect(data).toEqual(subscriptionSchema); + expect(data).not.toHaveProperty('plan'); + }); + + it('getOne (w/ search params): Should successfully fetch the specified subscription', async () => { + const dataWithSearchParams = await salable.subscriptions.getOne(basicSubscriptionUuid, { expand: ['plan'] }); + + expect(dataWithSearchParams).toEqual({ ...subscriptionSchema, plan: planSchema }); + expect(dataWithSearchParams).toHaveProperty('plan', planSchema); + }); + + it('getInvoices: Should successfully fetch a subscriptions invoices', async () => { + const data = await salable.subscriptions.getInvoices(basicSubscriptionUuid); + + expect(data).toEqual({ + first: expect.any(String), + last: expect.any(String), + hasMore: expect.any(Boolean), + data: expect.arrayContaining([stripeInvoiceSchema]), + }); + }); + + it('getSwitchablePlans: Should successfully fetch a subscriptions switchable plans', async () => { + const data = await salable.subscriptions.getSwitchablePlans(basicSubscriptionUuid); + expect(data).toEqual(expect.arrayContaining([planSchema])); + }); + + it('getUpdatePaymentLink: Should successfully fetch a subscriptions payment link', async () => { + const data = await salable.subscriptions.getUpdatePaymentLink(basicSubscriptionUuid); + + expect(data).toEqual(expect.objectContaining({ url: expect.any(String) })); + }); + + it('getPortalLink: Should successfully fetch a subscriptions portal link', async () => { + const data = await salable.subscriptions.getPortalLink(basicSubscriptionUuid); + + expect(data).toEqual(expect.objectContaining({ url: expect.any(String) })); + }); + + it('getCancelSubscriptionLink: Should successfully fetch a subscriptions cancel link', async () => { + const data = await salable.subscriptions.getCancelSubscriptionLink(basicSubscriptionUuid); + + expect(data).toEqual(expect.objectContaining({ url: expect.any(String) })); + }); + + it('getPaymentMethod: Should successfully fetch a subscriptions payment method', async () => { + const data = await salable.subscriptions.getPaymentMethod(basicSubscriptionUuid); + + expect(data).toEqual(expect.objectContaining(stripePaymentMethodSchema)); + }); + + it('changePlan: Should successfully change a subscriptions plan', async () => { + const data = await salable.subscriptions.changePlan(basicSubscriptionUuid, { + planUuid: testUuids.perSeatPaidPlanUuid, + }); + + expect(data).toBeUndefined(); + }); + + it('addSeats: Should successfully add seats to the subscription', async () => { + const data = await salable.subscriptions.addSeats(perSeatSubscriptionUuid, { + increment: 1, + }); + + expect(data).toEqual({ eventUuid: expect.any(String) }); + }); + + it('removeSeats: Should successfully remove seats from a subscription', async () => { + const data = await salable.subscriptions.removeSeats(perSeatSubscriptionUuid, { + decrement: 1, + }); + + expect(data).toEqual(expect.objectContaining({ eventUuid: expect.any(String) })); + }); + + it('cancel: Should successfully cancel the subscription', async () => { + const data = await salable.subscriptions.cancel(subscriptionUuid, { when: 'now' }); + + expect(data).toBeUndefined(); + }); +}); + +const planSchema: Plan = { + uuid: expect.any(String), + name: expect.any(String), + slug: expect.any(String), + description: expect.toBeOneOf([expect.any(String), null]), + displayName: expect.any(String), + status: expect.any(String), + trialDays: expect.toBeOneOf([expect.any(Number), null]), + evaluation: expect.any(Boolean), + evalDays: expect.any(Number), + perSeatAmount: expect.any(Number), + maxSeatAmount: expect.any(Number), + organisation: expect.any(String), + visibility: expect.any(String), + licenseType: expect.any(String), + hasAcceptedTransaction: expect.any(Boolean), + interval: expect.any(String), + length: expect.any(Number), + active: expect.any(Boolean), + planType: expect.any(String), + pricingType: expect.any(String), + environment: expect.any(String), + isTest: expect.any(Boolean), + paddlePlanId: expect.toBeOneOf([expect.any(String), null]), + productUuid: expect.any(String), + salablePlan: expect.any(Boolean), + type: expect.toBeOneOf([expect.any(String), undefined]), + updatedAt: expect.any(String), + features: expect.toBeOneOf([expect.anything(), undefined]), + currencies: expect.toBeOneOf([expect.anything(), undefined]), +}; + +const subscriptionSchema: Subscription = { + uuid: expect.any(String), + paymentIntegrationSubscriptionId: expect.any(String), + productUuid: expect.any(String), + type: expect.any(String), // Todo: use enum type + isTest: expect.any(Boolean), + cancelAtPeriodEnd: expect.any(Boolean), + email: expect.toBeOneOf([expect.any(String), null]), + organisation: expect.any(String), + quantity: expect.any(Number), + status: expect.any(String), + createdAt: expect.any(String), + updatedAt: expect.any(String), + expiryDate: expect.any(String), + lineItemIds: expect.toBeOneOf([expect.toBeArray(), null]), + planUuid: expect.any(String), +}; + +const stripeInvoiceSchema = { + id: expect.any(String), + object: expect.any(String), + account_country: expect.any(String), + account_name: expect.any(String), + account_tax_ids: expect.toBeOneOf([expect.toBeArray(), null]), + amount_due: expect.any(Number), + amount_paid: expect.any(Number), + amount_remaining: expect.any(Number), + amount_shipping: expect.any(Number), + application: expect.toBeOneOf([expect.any(String), null]), + application_fee_amount: expect.toBeOneOf([expect.any(Number), null]), + attempt_count: expect.any(Number), + attempted: expect.any(Boolean), + auto_advance: expect.any(Boolean), + automatic_tax: expect.toBeObject(), + automatically_finalizes_at: expect.toBeOneOf([expect.any(Number), null]), + billing_reason: expect.any(String), + charge: expect.any(String), + collection_method: expect.any(String), + created: expect.any(Number), + currency: expect.any(String), + custom_fields: expect.toBeOneOf([expect.toBeArray(), null]), + customer: expect.any(String), + customer_address: expect.toBeOneOf([expect.toBeObject(), null]), + customer_email: expect.any(String), + customer_name: expect.toBeOneOf([expect.any(String), null]), + customer_phone: expect.toBeOneOf([expect.any(String), null]), + customer_shipping: expect.toBeOneOf([expect.toBeObject, null]), + customer_tax_exempt: expect.any(String), + customer_tax_ids: expect.toBeOneOf([expect.toBeArray(), null]), + default_payment_method: expect.toBeOneOf([expect.any(String), null]), + default_source: expect.toBeOneOf([expect.any(String), null]), + default_tax_rates: expect.toBeOneOf([expect.toBeArray(), null]), + description: expect.toBeOneOf([expect.any(String), null]), + discount: expect.toBeOneOf([expect.toBeObject(), null]), + discounts: expect.toBeOneOf([expect.toBeArray(), null]), + due_date: expect.toBeOneOf([expect.any(Number), null]), + effective_at: expect.any(Number), + ending_balance: expect.any(Number), + footer: expect.toBeOneOf([expect.any(String), null]), + from_invoice: expect.toBeOneOf([expect.toBeObject(), null]), + hosted_invoice_url: expect.any(String), + invoice_pdf: expect.any(String), + issuer: expect.toBeObject(), + last_finalization_error: expect.toBeOneOf([expect.toBeObject(), null]), + latest_revision: expect.toBeOneOf([expect.any(String), null]), + lines: expect.toBeObject(), + livemode: expect.any(Boolean), + metadata: expect.toBeObject(), + next_payment_attempt: expect.toBeOneOf([expect.any(Number), null]), + number: expect.any(String), + on_behalf_of: expect.toBeOneOf([expect.any(String), null]), + paid: expect.any(Boolean), + paid_out_of_band: expect.any(Boolean), + payment_intent: expect.any(String), + payment_settings: expect.toBeObject(), + period_end: expect.any(Number), + period_start: expect.any(Number), + post_payment_credit_notes_amount: expect.any(Number), + pre_payment_credit_notes_amount: expect.any(Number), + quote: expect.toBeOneOf([expect.any(String), null]), + receipt_number: expect.toBeOneOf([expect.any(String), null]), + rendering: expect.toBeOneOf([expect.toBeObject(), null]), + rendering_options: expect.toBeOneOf([expect.toBeObject(), null]), + shipping_cost: expect.toBeOneOf([expect.toBeObject(), null]), + shipping_details: expect.toBeOneOf([expect.toBeObject(), null]), + starting_balance: expect.any(Number), + statement_descriptor: expect.toBeOneOf([expect.any(String), null]), + status: expect.any(String), + status_transitions: expect.toBeObject(), + subscription: expect.any(String), + subscription_details: expect.toBeObject(), + subtotal: expect.any(Number), + subtotal_excluding_tax: expect.any(Number), + tax: expect.toBeOneOf([expect.any(Number), null]), + test_clock: expect.toBeOneOf([expect.any(String), null]), + total: expect.any(Number), + total_discount_amounts: expect.toBeOneOf([expect.toBeArray(), null]), + total_excluding_tax: expect.any(Number), + total_pretax_credit_amounts: expect.toBeOneOf([expect.toBeArray(), null]), + total_tax_amounts: expect.toBeArray(), + transfer_data: expect.toBeOneOf([expect.toBeObject(), null]), + webhooks_delivered_at: expect.any(Number), +}; + +const stripePaymentMethodSchema = { + id: expect.any(String), + object: expect.any(String), + allow_redisplay: expect.any(String), + billing_details: expect.objectContaining({ + address: { + city: expect.toBeOneOf([expect.any(String), null]), + country: expect.toBeOneOf([expect.any(String), null]), + line1: expect.toBeOneOf([expect.any(String), null]), + line2: expect.toBeOneOf([expect.any(String), null]), + postal_code: expect.toBeOneOf([expect.any(String), null]), + state: expect.toBeOneOf([expect.any(String), null]), + }, + email: expect.toBeOneOf([expect.any(String), null]), + name: expect.toBeOneOf([expect.any(String), null]), + phone: expect.toBeOneOf([expect.any(String), null]), + }), + card: expect.objectContaining({ + brand: expect.any(String), + checks: { + address_line1_check: expect.toBeOneOf([expect.any(String), null]), + address_postal_code_check: expect.toBeOneOf([expect.any(String), null]), + cvc_check: expect.any(String), + }, + country: expect.any(String), + display_brand: expect.any(String), + exp_month: expect.any(Number), + exp_year: expect.any(Number), + fingerprint: expect.any(String), + funding: expect.any(String), + generated_from: expect.toBeOneOf([expect.any(String), null]), + last4: expect.any(String), + networks: expect.objectContaining({ + available: expect.toBeArray(), + preferred: expect.toBeOneOf([expect.any(String), null]), + }), + three_d_secure_usage: expect.objectContaining({ supported: expect.any(Boolean) }), + wallet: expect.toBeOneOf([expect.any(String), null]), + }), + created: expect.any(Number), + customer: expect.any(String), + livemode: expect.any(Boolean), + metadata: expect.toBeObject(), + type: expect.any(String), +}; + +const deleteTestData = async () => { + await prismaClient.license.deleteMany({}); + await prismaClient.subscription.deleteMany({}); +}; + +const generateTestData = async () => { + await prismaClient.license.create({ + data: { + name: null, + email: null, + status: 'ACTIVE', + granteeId: testGrantee, + paymentService: 'ad-hoc', + purchaser: 'tester@testing.com', + type: 'user', + uuid: licenseUuid, + metadata: undefined, + plan: { connect: { uuid: testUuids.paidPlanUuid } }, + product: { connect: { uuid: testUuids.productUuid } }, + startTime: undefined, + capabilities: [ + { + name: 'CapabilityOne', + uuid: '38e63e2a-1269-4e9d-b712-28cfbf087285', + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + { + name: 'CapabilityTwo', + uuid: '38e63e2a-1269-4e9d-b712-28cfbf087285', + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + ], + endTime: getEndTime(1, 'years'), + }, + }); + + await prismaClient.license.create({ + data: { + name: null, + email: null, + status: 'ACTIVE', + granteeId: testGrantee, + paymentService: 'ad-hoc', + purchaser: 'tester@testing.com', + type: 'user', + uuid: licenseTwoUuid, + metadata: undefined, + plan: { connect: { uuid: testUuids.freeMonthlyPlanUuid } }, + product: { connect: { uuid: testUuids.productUuid } }, + startTime: undefined, + capabilities: [ + { + name: 'CapabilityOne', + uuid: '38e63e2a-1269-4e9d-b712-28cfbf087285', + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + { + name: 'CapabilityTwo', + uuid: '38e63e2a-1269-4e9d-b712-28cfbf087285', + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + ], + endTime: getEndTime(1, 'years'), + }, + }); + + await prismaClient.license.create({ + data: { + name: null, + email: null, + status: 'ACTIVE', + granteeId: testGrantee, + paymentService: 'ad-hoc', + purchaser: 'tester@testing.com', + type: 'user', + uuid: licenseThreeUuid, + metadata: undefined, + plan: { connect: { uuid: testUuids.freeMonthlyPlanUuid } }, + product: { connect: { uuid: testUuids.productUuid } }, + startTime: undefined, + capabilities: [ + { + name: 'CapabilityOne', + uuid: '38e63e2a-1269-4e9d-b712-28cfbf087285', + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + { + name: 'CapabilityTwo', + uuid: '38e63e2a-1269-4e9d-b712-28cfbf087285', + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + ], + endTime: getEndTime(1, 'years'), + }, + }); + + await prismaClient.subscription.upsert({ + where: { + paymentIntegrationSubscriptionId: stripeEnvs.basicSubscriptionId, + }, + update: { + uuid: subscriptionUuid, + email: testEmail, + type: 'salable', + status: 'ACTIVE', + organisation: testUuids.organisationId, + license: { connect: [{ uuid: licenseUuid }] }, + product: { connect: { uuid: testUuids.productUuid } }, + plan: { connect: { uuid: testUuids.paidPlanUuid } }, + createdAt: new Date(), + updatedAt: new Date(), + expiryDate: new Date(Date.now() + 31536000000), + }, + create: { + lineItemIds: [stripeEnvs.basicSubscriptionLineItemId], + paymentIntegrationSubscriptionId: stripeEnvs.basicSubscriptionId, + uuid: subscriptionUuid, + email: testEmail, + type: 'salable', + status: 'ACTIVE', + organisation: testUuids.organisationId, + license: { connect: [{ uuid: licenseUuid }] }, + product: { connect: { uuid: testUuids.productUuid } }, + plan: { connect: { uuid: testUuids.paidPlanUuid } }, + createdAt: new Date(), + updatedAt: new Date(), + expiryDate: new Date(Date.now() + 31536000000), + }, + }); + + await prismaClient.subscription.create({ + data: { + lineItemIds: [stripeEnvs.basicSubscriptionTwoLineItemId], + paymentIntegrationSubscriptionId: stripeEnvs.basicSubscriptionIdTwo, + uuid: basicSubscriptionUuid, + email: testEmail, + type: 'salable', + status: 'ACTIVE', + organisation: testUuids.organisationId, + license: { connect: [{ uuid: licenseUuid }] }, + product: { connect: { uuid: testUuids.productUuid } }, + plan: { connect: { uuid: testUuids.paidPlanUuid } }, + createdAt: new Date(), + updatedAt: new Date(), + expiryDate: new Date(Date.now() + 31536000000), + }, + }); + + await prismaClient.subscription.create({ + data: { + lineItemIds: [stripeEnvs.proSubscriptionLineItemId], + paymentIntegrationSubscriptionId: stripeEnvs.proSubscriptionId, + uuid: proSubscriptionUuid, + email: testEmail, + type: 'salable', + status: 'ACTIVE', + organisation: testUuids.organisationId, + license: { connect: [{ uuid: licenseThreeUuid }, { uuid: licenseTwoUuid }] }, + product: { connect: { uuid: testUuids.productUuid } }, + plan: { connect: { uuid: testUuids.freeMonthlyPlanUuid } }, + createdAt: new Date(), + updatedAt: new Date(), + expiryDate: new Date(Date.now() + 31536000000), + }, + }); + + await prismaClient.subscription.create({ + data: { + lineItemIds: [stripeEnvs.perSeatBasicSubscriptionLineItemId], + paymentIntegrationSubscriptionId: stripeEnvs.perSeatBasicSubscriptionId, + uuid: perSeatSubscriptionUuid, + email: testEmail, + type: 'salable', + status: 'ACTIVE', + organisation: testUuids.organisationId, + license: { + createMany: { + data: perSeatBasicLicenseUuids.slice(3, 6).map((uuid, i) => ({ + name: null, + email: null, + status: 'ACTIVE', + paymentService: 'ad-hoc', + purchaser: 'tester@testing.com', + metadata: undefined, + startTime: undefined, + capabilities: [ + { + name: 'CapabilityOne', + uuid: '38e63e2a-1269-4e9d-b712-28cfbf087285', + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + { + name: 'CapabilityTwo', + uuid: '38e63e2a-1269-4e9d-b712-28cfbf087285', + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productUuid, + }, + ], + endTime: getEndTime(1, 'years'), + uuid, + granteeId: i < 2 ? `userId_${i}` : null, + type: 'perSeat', + planUuid: testUuids.perSeatMaxPlanUuid, + productUuid: testUuids.productUuid, + })), + }, + }, + product: { connect: { uuid: testUuids.productUuid } }, + plan: { connect: { uuid: testUuids.perSeatPaidPlanUuid } }, + createdAt: new Date(), + updatedAt: new Date(), + expiryDate: new Date(Date.now() + 31536000000), + quantity: 2, + }, + }); +}; diff --git a/src/types.ts b/src/types.ts index 1fbe5056..3284f119 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,42 +1,100 @@ -type INonBodyRequest = { - method: 'GET' | 'HEAD'; - body?: never; -}; +export const Version = { + V2: 'v2', +} as const; +export type TVersion = (typeof Version)[keyof typeof Version]; +export type ApiFetch = (apiKey: string, version: string) => ApiRequest; +export type ApiRequest = (input: string | URL | Request, init: RequestInit | undefined) => Promise; -type IBodyRequest = { - method: 'POST' | 'PUT' | 'DELETE'; - body?: T; -}; +export type Status = 'ACTIVE' | 'CANCELED'; +export type ProductStatus = 'ACTIVE' | 'DEPRECATED'; +export type LicenseStatus = 'ACTIVE' | 'CANCELED' | 'EVALUATION' | 'SCHEDULED' | 'TRIALING' | 'INACTIVE'; -export function isRequestWithBody(request: IRequestBase): request is IBodyRequest { - return (request as IBodyRequest).body !== undefined; -} +export type SearchParamOptions = Record; -export type IRequestBase = Omit & (INonBodyRequest | IBodyRequest); +export type SubscriptionStatus = 'ACTIVE' | 'CANCELED' | 'PAUSED' | 'TRIALING' | 'DELETED' | 'PAST_DUE' | 'INCOMPLETE'; -export type Status = 'ACTIVE' | 'CANCELED'; -export interface ICreateAdhocLicenseInput { +export type CreateAdhocLicenseInput = { planUuid: string; member: string; - granteeId: string; -} + granteeId?: string; + status?: 'ACTIVE' | 'TRIALING'; + endTime?: string; + cancelAtPeriodEnd?: boolean +}; + +export type GetLicenseOptions = { + status?: LicenseStatus; + cursor?: string; + take?: string; + subscriptionUuid?: string; + granteeId?: string; + planUuid?: string; + productUuid?: string; +}; -export interface IUpdateLicenseInput { +export type GetPurchasersLicensesOptions = { + purchaser: string; + productUuid: string; + status?: LicenseStatus; // Todo: define status types +}; + +export type GetGranteeIdLicensesInput = { expand: string[] }; + +export type CheckLicenseInput = { + productUuid: string; + granteeIds: string[]; + grace?: number; +}; + +export type GetLicenseCountOptions = { + subscriptionUuid?: string; + status?: LicenseStatus; +}; + +export type UpdateLicenseInput = { granteeId: string; -} +}; -export interface IUpdateManyLicenseInput { +export type UpdateManyLicenseInput = { granteeId: string; uuid: string; -} +}; -export interface ILicenseCountResponse { +export type GetLicenseCountResponse = { count: number; assigned: number; unassigned: number; +}; + +export type GetUsageOptions = { + type?: string; + status?: string; + planUuid?: string; + subscriptionUuid?: string; + sort?: 'asc' | 'desc'; + cursor?: string; + take?: string; +}; + +export type GetAllUsageRecordsResponse = { + first: string; + last: string; + data: UsageRecord[] +}; + +export type UsageRecord = { + uuid: string; + unitCount: number; + type: string; + recordedAt: string; + resetAt: string; + planUuid: string; + licenseUuid: string; + createdAt: string; + updatedAt: string; } -export interface ILicense { +export type License = { uuid: string; name: string; email: string; @@ -47,42 +105,63 @@ export interface ILicense { type: string; productUuid: string; planUuid: string; - capabilities: ICapability[]; + capabilities: Capability[]; metadata: IMetadata | null; startTime: string; endTime: string; updatedAt: string; + subscriptionUuid: string | null; isTest: boolean; -} + cancelAtPeriodEnd: boolean; +}; + +export type GetAllLicensesResponse = { + first: string; + last: string; + data: License[]; +}; -export interface ISubscription { +export type Subscription = { uuid: string; paymentIntegrationSubscriptionId: string; productUuid: string; type: string; email: string; + quantity: number; + lineItemIds: string[] | null; organisation: string; status: string; createdAt: string; updatedAt: string; expiryDate: string; - licenseUuid: string; planUuid: string; isTest: boolean; -} + cancelAtPeriodEnd: boolean; +}; + +export type AllSubscription = { + first: string; + last: string; + hasMore: boolean; + data: Subscription[]; +}; export type Proration = 'create_prorations' | 'none' | 'always_invoice'; -export type SubscriptionsChangePlanBody = { +export type SubscriptionsChangePlan = { planUuid: string; - proration?: Proration; + proration: Proration; }; -export interface IPlan { +export type Plan = { uuid: string; name: string; + slug: string; description?: string; + perSeatAmount: number; + maxSeatAmount: null; displayName: string; + hasAcceptedTransaction: boolean; status: string; trialDays: null; evaluation: false; @@ -96,15 +175,17 @@ export interface IPlan { planType: string; pricingType: string; environment: string; - type: string; + type?: string; paddlePlanId?: string; productUuid: string; salablePlan: boolean; updatedAt: string; isTest: boolean; -} + features: Feature; + currencies?: Currency; +}; -export interface IFeature { +export type IFeature = { uuid: string; name: string; description?: string; @@ -117,9 +198,16 @@ export interface IFeature { showUnlimited: boolean; productUuid?: string; updatedAt: string; -} +}; -export interface ICheckoutDefaultParams { +export type FeatureEnumOption = { + uuid: string; + name: string; + featureUuid: string; + updatedAt: string; +}; + +export type ICheckoutDefaultParams = { member: string; marketingConsent?: string; couponCode?: string; @@ -127,15 +215,15 @@ export interface ICheckoutDefaultParams { allowPromoCode?: string; customMessage?: string; currency?: SupportedCurrencies; -} +}; -export interface ICheckoutCustomerParams { +export type ICheckoutCustomerParams = { customerEmail?: string; customerCountry?: string; customerPostcode?: string; -} +}; -export interface ICheckoutVatParams { +export type ICheckoutVatParams = { vatNumber?: string; vatCompanyName?: string; vatStreet?: string; @@ -143,12 +231,26 @@ export interface ICheckoutVatParams { vatState?: string; vatCountry?: string; vatPostcode?: string; -} +}; + +export type PricingTableResponse = { + uuid: string; + name: string; + status: ProductStatus; + title: string | null; + text: string | null; + theme: 'light' | 'dark' | string; + featureOrder: string; + productUuid: string; + customTheme: string; + featuredPlanUuid: string; + updatedAt: string; + features: PricingTableFeature[]; + product: Product & { features: Feature[]; currencies: ProductCurrency[] }; + plans: PricingTablePlan[]; +}; -export interface IPlanCheckoutParams - extends ICheckoutDefaultParams, - ICheckoutCustomerParams, - ICheckoutVatParams { +export interface IPlanCheckoutParams extends ICheckoutDefaultParams, ICheckoutCustomerParams, ICheckoutVatParams { successUrl: string; cancelUrl: string; contactUsLink?: string; @@ -156,10 +258,7 @@ export interface IPlanCheckoutParams quantity?: number; } -export interface IPricingTableParams - extends ICheckoutDefaultParams, - ICheckoutCustomerParams, - ICheckoutVatParams { +export interface IPricingTableParams extends ICheckoutDefaultParams, ICheckoutCustomerParams, ICheckoutVatParams { globalSuccessUrl: string; globalCancelUrl: string; globalGranteeId: string; @@ -170,36 +269,7 @@ export type PlanCheckoutKey = keyof IPlanCheckoutParams; export type PricingTableCheckoutKey = keyof IPricingTableParams; export type SupportedCurrencies = 'USD' | 'EUR' | 'GBP'; -export interface IPlanCheckoutInputParams { - successUrl: string; - cancelUrl: string; - contactUsLink?: string; - granteeId: string; - member: string; - marketingConsent?: string; - couponCode?: string; - promoCode?: string; - allowPromoCode?: string; - quantity?: number; - currency?: SupportedCurrencies; - customer?: { - email?: string; - country?: string; - postcode?: string; - }; - vat?: { - number?: string; - companyName?: string; - street?: string; - city?: string; - state?: string; - country?: string; - postcode?: string; - }; - customMessage?: string; -} - -export interface IDefaultCheckoutInputParams { +export type IDefaultCheckoutInputParams = { marketingConsent?: string; couponCode?: string; promoCode?: string; @@ -220,58 +290,93 @@ export interface IDefaultCheckoutInputParams { country?: string; postcode?: string; }; -} +}; -export interface IPlanCheckoutResponse { +export type PlanCheckout = { checkoutUrl: string; -} +}; -export interface IPlanFeatureResponse { +export type GetPlanOptions = { + expand?: string[]; + successUrl?: string; + cancelUrl?: string; + granteeId?: string; + member?: string; + promoCode?: string; + allowPromoCode?: boolean; + customerEmail?: string; + customerId?: string; + currency?: string; + automaticTax?: string; +}; + +export type GetPlanCheckoutOptions = { + successUrl: string; + cancelUrl: string; + granteeId: string; + member: string; + promoCode?: string; + allowPromoCode?: boolean; + customerEmail?: string; + customerId?: string; + currency?: string; + automaticTax?: string; + quantity?: string; + changeQuantity?: string; + requirePaymentMethod?: boolean; +}; + +export type PlanFeature = { planUuid: string; featureUuid: string; value: string; enumValueUuid?: string; isUnlimited: boolean; + isUsage: boolean; + maxUsage: boolean; + minUsage: boolean; + pricePerUnit: number; updatedAt: string; feature: IFeature; - enumValue?: string; - sortOrder: number; -} + enumValue: string | null; +}; -export interface IPlanCapabilityResponse { +export type PlanCapability = { planUuid: string; capabilityUuid: string; updatedAt: string; - capability: ICapability; -} + capability: Capability; +}; -export interface IPlanCurrencyResponse { +export type PlanCurrency = { planUuid: string; currencyUuid: string; price: number; + hasAcceptedTransaction: boolean; paymentIntegrationPlanId: string; currency: ICurrency; -} +}; -export interface ICurrency { +export type ICurrency = { uuid: string; shortName: string; longName: string; symbol: string; -} +}; -export interface ICapability { +export type Capability = { uuid: string; name: string; status: string; updatedAt: string; description?: string; productUuid: string; -} +}; -export interface IProduct { +export type Product = { uuid: string; name: string; + slug: string; description?: string; logoUrl?: string; displayName: string; @@ -281,24 +386,63 @@ export interface IProduct { organisationPaymentIntegrationUuid: string; paymentIntegrationProductId?: string; updatedAt: string; + appType: string; isTest: boolean; -} +}; -export interface IProductCapabilityResponse { +export type ProductCapability = { uuid: string; name: string; description?: string; status: string; productUuid: string; updatedAt: string; -} +}; -export interface IProductCurrencyResponse { +export type ProductFeature = { + defaultValue: string; + description: string; + displayName: string; + featureEnumOptions: FeatureEnumOption | []; + name: string; + productUuid: string; + showUnlimited: boolean; + sortOrder: number; + status: string; + updatedAt: string; + uuid: string; + valueType: string; + variableName: string; + visibility: string; +}; + +export type ProductCurrency = { productUuid: string; currencyUuid: string; defaultCurrency: boolean; currency: ICurrency; -} +}; + +export type PricingTableFeature = { + pricingTableUuid: string; + featureUuid: string; + sortOrder: number; + updatedAt: string; + feature: Feature & { + featureEnumOptions: FeatureEnumOption[]; // Todo: fix type + }; +}; + +export type PricingTablePlan = { + planUuid: string; + pricingTableUuid: string; + sortOrder: number; + updatedAt: string; + plan: Plan & { + features: Feature & { featureEnumOptions: FeatureEnumOption[] }[]; + currencies: PlanCurrency[]; + }; +}; export type PricingTableParameters = { globalPlanOptions: { @@ -337,7 +481,7 @@ export type PricingTableParameters = { }; }; -export interface IOrganisationPaymentIntegration { +export type IOrganisationPaymentIntegration = { uuid: string; organisation: string; integrationName: string; @@ -349,58 +493,39 @@ export interface IOrganisationPaymentIntegration { accountId: string; updatedAt: string; isTest: boolean; -} +}; -export interface IProductPricingTableResponse extends IProduct { +export type ProductPricingTable = { features: IFeature[]; currencies: ICurrency[]; - organisationPaymentIntegration: IOrganisationPaymentIntegration; - plans: (IPlan & { features: IFeature[]; currencies: ICurrency[]; checkoutUrl: string })[]; -} - -export interface ICheckLicensesCapabilities { - capabilities: string[]; - publicHash: string; + plans: (Plan & { features: IFeature[]; currencies: ICurrency[]; checkoutUrl: string })[]; +} & Product; + +export type CheckLicensesCapabilitiesResponse = { + capabilities: { + capability: string; + expiry: string; + }[]; signature: string; - capsHashed: string; - capabilitiesEndDates: ICapabilitiesEndDates; -} +}; -export interface ICapabilitiesEndDates { +export type CapabilitiesEndDates = { [key: string]: string; -} +}; -export interface IMetadata { +export type IMetadata = { [key: string]: string; -} - -export interface IUsageUpdateCountOptions { - increment: number; -} - -export interface ISubscriptionUpdatePlanInput { - newPlanId: string; - subscriptionId: string; -} +}; -export interface ISubscriptionAddSeatsParams { +export type IUsageUpdateCountOptions = { increment: number; -} -export type ISubscriptionAddSeatsBody = ISubscriptionAddSeatsParams; - -export interface ISubscriptionRemoveSeatsParams { - decrement: number; -} - -export type ISubscriptionRemoveSeatsBody = ISubscriptionRemoveSeatsParams; - -export type CancelWhen = 'now' | 'end'; +}; -export interface IUsageUpdateInput { +export type IUsageUpdateInput = { licenseUuid: string; featureVariableName: string; countOptions: IUsageUpdateCountOptions; -} +}; export type LicenseCancelManyBody = { uuids: string[]; @@ -408,7 +533,6 @@ export type LicenseCancelManyBody = { export type LicenseGetByPurchaserOptions = { status?: Status; - cancelLink?: boolean; }; export type LicenseGetUsage = { @@ -418,91 +542,348 @@ export type LicenseGetUsage = { unitCount: number; }; -export interface IPermission { - uuid: string; - value: string; - type: string | null; - description: string | null; - dependencies: { [k: string]: string } | null; - organisation: string; - createdAt: Date; - updatedAt: Date; -} +export type SubscriptionInvoice = { + first: string; + last: string; + hasMore: boolean; + data: Invoice[]; +}; -export interface INestedPermission { - uuid: string; - value: string; - type: string | null; -} +type Invoice = { + id: string; + object: string; + account_country: string; + account_name: string; + account_tax_ids: string; + amount_due: number; + amount_paid: number; + amount_remaining: number; + amount_shipping: number; + application: string; + application_fee_amount: string; + attempt_count: number; + attempted: boolean; + auto_advance: boolean; + automatic_tax: { + enabled: boolean; + status: string; + }; + billing_reason: string; + charge: string; + collection_method: string; + created: number; + currency: string; + custom_fields: string; + customer: string; + customer_address: { + city: string; + country: string; + line1: string; + line2: string; + postal_code: string; + state: string; + }; + customer_email: string; + customer_name: string; + customer_phone: string; + customer_shipping: string; + customer_tax_exempt: string; + customer_tax_ids: string[]; + default_payment_method: string; + default_source: string; + default_tax_rates: string[]; + description: string; + discount: string; + discounts: string[]; + due_date: string; + effective_at: number; + ending_balance: number; + footer: string; + from_invoice: string; + hosted_invoice_url: string; + invoice_pdf: string; + last_finalization_error: string; + latest_revision: string; + lines: { + object: string; + data: LineItem[]; + has_more: boolean; + total_count: number; + url: string; + }; + livemode: boolean; + metadata: Record; + next_payment_attempt: string; + number: string; + on_behalf_of: string; + paid: boolean; + paid_out_of_band: boolean; + payment_intent: string; + payment_settings: { + default_mandate: string; + payment_method_options: { + acss_debit: string; + bancontact: string; + card: { + request_three_d_secure: string; + }; + customer_balance: string; + konbini: string; + sepa_debit: string; + us_bank_account: string; + }; + payment_method_types: string; + }; + period_end: number; + period_start: number; + post_payment_credit_notes_amount: number; + pre_payment_credit_notes_amount: number; + quote: string; + receipt_number: string; + rendering: string; + rendering_options: string; + shipping_cost: string; + shipping_details: string; + starting_balance: number; + statement_descriptor: string; + status: string; + status_transitions: { + finalized_at: number; + marked_uncollectible_at: string; + paid_at: number; + voided_at: string; + }; + subscription: string; + subscription_details: { + metadata: { + granteeId: string; + member: string; + }; + }; + subtotal: number; + subtotal_excluding_tax: number; + tax: string; + test_clock: string; + total: number; + total_discount_amounts: string[]; + total_excluding_tax: number; + total_tax_amounts: string[]; + transfer_data: string; + webhooks_delivered_at: number; +}; -export interface IRole { +type LineItem = { + id: string; + object: string; + amount: number; + amount_excluding_tax: number; + currency: string; + description: string; + discount_amounts: string[]; + discountable: boolean; + discounts: string[]; + invoice_item: string; + livemode: boolean; + metadata: Record; + period: { + end: number; + start: number; + }; + plan: { + id: string; + object: string; + active: boolean; + aggregate_usage: string; + amount: number; + amount_decimal: string; + billing_scheme: string; + created: number; + currency: string; + interval: string; + interval_count: number; + livemode: boolean; + metadata: Record; + nickname: string; + product: string; + tiers_mode: string; + transform_usage: string; + trial_period_days: string; + usage_type: string; + }; + price: { + id: string; + object: string; + active: boolean; + billing_scheme: string; + created: number; + currency: string; + custom_unit_amount: string; + livemode: boolean; + lookup_key: string; + metadata: Record; + nickname: string; + product: string; + recurring: { + aggregate_usage: string; + interval: string; + interval_count: number; + trial_period_days: string; + usage_type: string; + }; + tax_behavior: string; + tiers_mode: string; + transform_quantity: string; + type: string; + unit_amount: number; + unit_amount_decimal: string; + }; + proration: boolean; + proration_details: { + credited_items: { + invoice: string; + invoice_line_items: string[]; + }; + }; + quantity: number; + subscription: string; + subscription_item: string; + tax_amounts: string[]; + tax_rates: string[]; + type: string; + unit_amount_excluding_tax: string; +}; + +export type SubscriptionPlan = { uuid: string; name: string; - description: string | null; + description: string; + displayName: string; + status: 'ACTIVE' | string; + isTest: boolean; + trialDays: number; + evaluation: boolean; + evalDays: number; organisation: string; - permissions?: INestedPermission[]; - createdAt: Date; - updatedAt: Date; -} - -export interface INestedRole { - uuid: string; - name?: string; - description?: string; - permissions?: INestedPermission[]; - createdAt: Date; -} + visibility: string; + licenseType: string; + perSeatAmount: number; + interval: string; + length: number; + active: boolean; + planType: string; + pricingType: string; + environment: string; + paddlePlanId: string; + productUuid: string; + salablePlan: boolean; + updatedAt: string; + currencies: Currency[]; + features: Feature[]; +}; -export interface IRbacUser { - id: string; - name: string | null; - organisation: string; - role?: INestedRole; - permissions?: INestedPermission[]; - createdAt: Date; - updatedAt: Date; -} +type Currency = { + planUuid: string; + currencyUuid: string; + price: number; + paymentIntegrationPlanId: string; + currency: { + uuid: string; + shortName: string; + longName: string; + symbol: string; + }; +}; -export interface ICreatePermissionInput { +type Feature = { + planUuid: string; + featureUuid: string; value: string; - type?: string | null; - description?: string | null; - dependencies?: { [k: string]: string } | null; - createdAt?: Date | string; - updatedAt?: Date | string; - rbacUsers?: string[]; - roles?: string[]; -} + enumValueUuid: string; + isUnlimited: boolean; + isUsage: boolean; + pricePerUnit: number; + minUsage: number; + maxUsage: number; + updatedAt: string; + feature: { + uuid: string; + name: string; + description: string; + displayName: string; + variableName: string; + status: 'ACTIVE' | string; + visibility: string; + valueType: string; + defaultValue: string; + showUnlimited: boolean; + productUuid: string; + updatedAt: string; + sortOrder: number; + }; + enumValue: { + uuid: string; + name: string; + featureUuid: string; + updatedAt: string; + }; +}; -export interface IUpdatePermissionInput { - value?: string; - type?: string; - description?: string; - dependencies?: string[]; -} +export type SubscriptionPaymentLink = { + url: string; +}; + +export type SubscriptionPaymentMethod = { + id: string; + object: string; + billing_details: BillingDetails; + card: Card; + created: number; + customer: string; + livemode: boolean; + metadata: Record; + type: string; +}; -export interface ICreateRoleInput { +type BillingDetails = { + address: Address; + email: string; name: string; - description: string; - permissions: string[]; -} + phone: string; +}; -export interface IUpdateRoleInput { - name?: string; - description?: string; - permissions: { add?: string[]; remove?: string[] }; -} +type Address = { + city: string; + country: string; + line1: string; + line2: string; + postal_code: string; + state: string; +}; -export interface ICreateRbacUserInput { - id: string; - name?: string; - role?: string; - permissions?: string[]; -} +type Card = { + brand: string; + checks: { + address_line1_check: string; + address_postal_code_check: string; + cvc_check: string; + }; + country: string; + exp_month: number; + exp_year: number; + fingerprint: string; + funding: string; + generated_from: string; + last4: string; + networks: { + available: string[]; + preferred: string; + }; + three_d_secure_usage: { + supported: boolean; + }; + wallet: string; +}; -export interface IUpdateRbacUserInput { - id?: string; - name?: string; - role?: string; - permissions: { add?: string[]; remove?: string[] }; -} +export type SubscriptionSeatResponse = { + eventUuid: string; +}; diff --git a/src/usage/index.ts b/src/usage/index.ts index 1e920f0b..94468601 100644 --- a/src/usage/index.ts +++ b/src/usage/index.ts @@ -1,38 +1,49 @@ -import { Base } from '../base'; -import { RESOURCE_NAMES } from '../constants'; -import { IUsageUpdateCountOptions, IUsageUpdateInput } from '../types'; -import { v4 as uuidV4 } from 'uuid'; +import { ApiRequest, TVersion, Version } from '..'; +import { GetUsageOptions, GetAllUsageRecordsResponse } from '../../src/types'; +import { v2UsageMethods } from './v2'; -/** - * Salable Node SDK Usage Class - * - * Contains the Salable usage methods - */ -export default class Usage extends Base { - /** - * Update a plan's usage - * - * @param {string} licenseUuid The uuid of the license - * @param {string} featureVariableName The variable name of the feature - * @param {IUsageUpdateCountOptions} countOptions - The number to increment the usage of the plan by - * - * @returns {Promise} - */ - public update( - licenseUuid: string, - featureVariableName: string, - countOptions: IUsageUpdateCountOptions - ) { - return this._request(RESOURCE_NAMES.USAGE, { - method: 'PUT', - headers: { - 'unique-key': uuidV4(), - }, - body: { - licenseUuid, - featureVariableName, - countOptions, - }, - }); +export type UsageVersions = { + [Version.V2]: { + /** + * Gets all usage records for grantee's metered licenses. + * + * @param {string} granteeId - The granteeId for the licenses + * @param {GetUsageOptions} options - (Optional) Filter parameters. See https://docs.salable.app/api/v2#tag/Usage/operation/getLicenseUsage + * + * @returns {Promise} + */ + getAllUsageRecords: (granteeId: string, options?: GetUsageOptions) => Promise; + /** + * Gets current usage record for grantee on plan + * + * @param {string} granteeId - The granteeId of the license belongs + * @param {string} planUuid - The uuid of the plan the license belongs to + * + * @returns {Promise<{ unitCount: number, updatedAt: string }>} + */ + getCurrentUsageRecord: (granteeId: string, planUuid: string) => Promise<{ unitCount: number, updatedAt: string }>; + + /** + * Updates a license's usage + * + * @param {string} granteeId - The granteeId of the license belongs + * @param {string} planUuid - The uuid of the plan the license belongs to + * @param {string} increment - The value to increment the usage on the license. + * @param {string} idempotencyKey - A unique key for idempotent requests + * + * @returns {Promise} + */ + updateLicenseUsage: (granteeId: string, planUuid: string, increment: number, idempotencyKey: string) => Promise; + } +}; + +export type UsageVersionedMethods = V extends keyof UsageVersions ? UsageVersions[V] : never; + +export const usageInit = (version: V, request: ApiRequest): UsageVersionedMethods => { + switch (version) { + case Version.V2: + return v2UsageMethods(request) as UsageVersionedMethods; + default: + throw new Error('Unsupported version'); } -} +}; diff --git a/src/usage/usage.test.ts b/src/usage/usage.test.ts deleted file mode 100644 index 4f27a083..00000000 --- a/src/usage/usage.test.ts +++ /dev/null @@ -1,29 +0,0 @@ -import Usage from './index'; -import fetch from 'jest-fetch-mock'; - -const api = new Usage('test-key'); -fetch.enableMocks(); - -beforeEach(() => { - fetch.resetMocks(); - fetch.mockResponse(''); -}); - -describe('Unit | ThirdPartyAPI | Usage', () => { - it('should update the usage record via API', async () => { - const updateUsage = await api.update('license-id', 'feature-name', { - increment: 2, - }); - expect(fetch).toHaveBeenCalledTimes(1); - expect(updateUsage).toStrictEqual(''); - }); - it('should return an error when promise rejects', async () => { - fetch.mockReject(() => Promise.reject('API is down')); - - await expect(async () => { - await api.update('license-id', 'feature-name', { - increment: 2, - }); - }).rejects.toBe('API is down'); - }); -}); diff --git a/src/usage/v2/index.ts b/src/usage/v2/index.ts new file mode 100644 index 00000000..d3dd9b52 --- /dev/null +++ b/src/usage/v2/index.ts @@ -0,0 +1,12 @@ +import { ApiRequest } from '../../../src'; +import { SALABLE_BASE_URL } from '../../../src/constants'; +import getUrl from '../../../src/utils/get-url'; +import { UsageVersions } from '../index'; + +const baseUrl = `${SALABLE_BASE_URL}/usage`; + +export const v2UsageMethods = (request: ApiRequest): UsageVersions['v2'] => ({ + getAllUsageRecords: (granteeId, options) => request(getUrl(baseUrl, { granteeId, ...options }), { method: 'GET' }), + getCurrentUsageRecord: (granteeId, planUuid) => request(getUrl(`${baseUrl}/current`, { granteeId, planUuid }), { method: 'GET' }), + updateLicenseUsage: (granteeId, planUuid, increment, idempotencyKey) => request(baseUrl, { method: 'PUT', headers: { 'unique-key': idempotencyKey }, body: JSON.stringify({ granteeId, planUuid, countOptions: { increment } }) }), +}); diff --git a/src/usage/v2/usage-v2.test.ts b/src/usage/v2/usage-v2.test.ts new file mode 100644 index 00000000..0ff3699e --- /dev/null +++ b/src/usage/v2/usage-v2.test.ts @@ -0,0 +1,156 @@ +import Salable, { Version } from '../..'; +import { UsageRecord } from '../../types'; +import prismaClient from '../../../test-utils/prisma/prisma-client'; +import { testUuids } from '../../../test-utils/scripts/create-test-data'; +import { v4 as uuidv4 } from 'uuid'; + +const version = Version.V2; + +const stripeEnvs = JSON.parse(process.env.stripEnvs || ''); +const meteredLicenseUuid = uuidv4(); +const usageSubscriptionUuid = uuidv4(); +const testGrantee = 'userId_metered'; + +describe('Usage V2 Tests', () => { + const salable = new Salable(testUuids.devApiKeyV2, version); + + beforeAll(async () => { + await generateTestData(); + }); + + it('getAllUsageRecords: Should successfully fetch the grantees usage records', async () => { + const data = await salable.usage.getAllUsageRecords(testGrantee); + + expect(data).toEqual( + expect.objectContaining({ + first: expect.toBeOneOf([expect.any(String), null]), + last: expect.toBeOneOf([expect.any(String), null]), + data: expect.arrayContaining([usageRecordSchema]), + }), + ); + }); + + it('getAllUsageRecords (w/ search params): Should successfully fetch the grantees usage records', async () => { + const data = await salable.usage.getAllUsageRecords(testGrantee, { type: 'recorded' }); + + expect(data).toEqual( + expect.objectContaining({ + first: expect.toBeOneOf([expect.any(String), null]), + last: expect.toBeOneOf([expect.any(String), null]), + data: expect.arrayContaining([ + { + ...usageRecordSchema, + type: 'recorded', + }, + ]), + }), + ); + }); + + it('getCurrentUsageRecord: Should successfully fetch the current usage record for the grantee on plan', async () => { + const data = await salable.usage.getCurrentUsageRecord(testGrantee, testUuids.usageBasicMonthlyPlanUuid); + + expect(data).toEqual( + expect.objectContaining({ + unitCount: expect.any(Number), + updatedAt: expect.any(String), + }), + ); + }); + + it('updateLicenseUsage: Should successfully update the usage of the specified grantee', async () => { + const data = await salable.usage.updateLicenseUsage(testGrantee, testUuids.usageBasicMonthlyPlanUuid, 10, uuidv4()); + + expect(data).toBeUndefined(); + }); +}); + +const usageRecordSchema: UsageRecord = { + uuid: expect.any(String), + unitCount: expect.any(Number), + type: expect.any(String), + recordedAt: expect.toBeOneOf([expect.any(String), null]), + resetAt: expect.toBeOneOf([expect.any(String), null]), + planUuid: expect.any(String), + licenseUuid: expect.any(String), + createdAt: expect.any(String), + updatedAt: expect.any(String), +}; + +const generateTestData = async () => { + await prismaClient.subscription.create({ + data: { + lineItemIds: [stripeEnvs.usageBasicSubscriptionLineItemId], + paymentIntegrationSubscriptionId: stripeEnvs.usageBasicSubscriptionId, + uuid: usageSubscriptionUuid, + email: 'tester@testing.com', + type: 'salable', + status: 'ACTIVE', + organisation: testUuids.organisationId, + license: { + create: { + name: null, + email: null, + status: 'ACTIVE', + purchaser: 'tester@testing.com', + metadata: undefined, + paymentService: 'salable', + uuid: meteredLicenseUuid, + granteeId: 'userId_metered', + type: 'metered', + planUuid: testUuids.usageBasicMonthlyPlanUuid, + productUuid: testUuids.productTwoUuid, + usage: { + create: { + planUuid: testUuids.usageBasicMonthlyPlanUuid, + unitCount: 10, + }, + }, + capabilities: [ + { + name: 'CapabilityOne', + uuid: 'ce0a4397-0c0f-4a99-909f-82fd1c8d6d6d', + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productTwoUuid, + }, + { + name: 'CapabilityTwo', + uuid: '0a0650a8-4516-44ab-a190-2ba02d276cbc', + status: 'ACTIVE', + updatedAt: '2022-10-17T11:41:11.626Z', + description: null, + productUuid: testUuids.productTwoUuid, + }, + ], + startTime: undefined, + endTime: new Date(), + }, + }, + product: { connect: { uuid: testUuids.productTwoUuid } }, + plan: { connect: { uuid: testUuids.usageBasicMonthlyPlanUuid } }, + createdAt: new Date(), + updatedAt: new Date(), + expiryDate: new Date(Date.now() + 31536000000), + quantity: 1, + }, + }); + + await prismaClient.licensesUsage.create({ + data: { + licenseUuid: meteredLicenseUuid, + planUuid: testUuids.usageBasicMonthlyPlanUuid, + unitCount: 10, + type: 'recorded', + }, + }); + await prismaClient.licensesUsage.create({ + data: { + licenseUuid: meteredLicenseUuid, + planUuid: testUuids.usageBasicMonthlyPlanUuid, + unitCount: 20, + type: 'current', + }, + }); +}; diff --git a/src/utils/default-parameters-checkout-factory.ts b/src/utils/default-parameters-checkout-factory.ts deleted file mode 100644 index 79fec432..00000000 --- a/src/utils/default-parameters-checkout-factory.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { - ICheckoutCustomerParams, - ICheckoutVatParams, - IDefaultCheckoutInputParams, - SupportedCurrencies, -} from '../types'; - -export interface ICheckoutDefaultParameters extends ICheckoutCustomerParams, ICheckoutVatParams { - marketingConsent?: string; - couponCode?: string; - promoCode?: string; - allowPromoCode?: string; - customMessage?: string; - currency?: SupportedCurrencies; -} - -const defaultParametersCheckoutFactory = ( - queryParams: IDefaultCheckoutInputParams -): ICheckoutDefaultParameters => { - const { vat, customer } = queryParams; - let params: ICheckoutDefaultParameters = { - marketingConsent: queryParams.marketingConsent, - couponCode: queryParams.couponCode, - promoCode: queryParams.promoCode, - allowPromoCode: queryParams.allowPromoCode, - customMessage: queryParams.customMessage, - currency: queryParams.currency, - }; - if (customer) { - params = Object.assign(params, { - customerEmail: customer.email, - customerCountry: customer.country, - customerPostcode: customer.postcode, - }); - } - if (vat) { - params = Object.assign(params, { - vatCompanyName: vat.companyName, - vatCity: vat.city, - vatNumber: vat.number, - vatPostcode: vat.postcode, - vatState: vat.state, - vatStreet: vat.street, - vatCountry: vat.country, - }); - } - return params; -}; - -export default defaultParametersCheckoutFactory; diff --git a/src/utils/get-url.ts b/src/utils/get-url.ts new file mode 100644 index 00000000..d9ca2ee1 --- /dev/null +++ b/src/utils/get-url.ts @@ -0,0 +1,9 @@ +function getUrl(url: string, params?: Record) { + if (!params) return url; + const paramList = Object.entries(params); + if (!paramList.length) return url; + const searchParams = paramList.map(([k, v]) => (Array.isArray(v) ? `${k}=${v.join(',')}` : `${k}=${v}`)); + return `${url}?${searchParams.join('&')}`; +} + +export default getUrl; diff --git a/test-utils/helpers/console-loading-wheel.ts b/test-utils/helpers/console-loading-wheel.ts new file mode 100644 index 00000000..97261ba5 --- /dev/null +++ b/test-utils/helpers/console-loading-wheel.ts @@ -0,0 +1,8 @@ +export default function getConsoleLoader(message: string) { + const P = ['\\', '|', '/', '-']; + let x = 0; + return setInterval(() => { + process.stdout.write(`\r${P[x++]} ${message}`); + x %= P.length; + }, 100); +}; \ No newline at end of file diff --git a/test-utils/helpers/get-end-time.ts b/test-utils/helpers/get-end-time.ts new file mode 100644 index 00000000..99acae5e --- /dev/null +++ b/test-utils/helpers/get-end-time.ts @@ -0,0 +1,7 @@ +import { add } from "date-fns"; + +function getEndTime(interval: number, type: 'days' | 'weeks' | 'months' | 'years') { + return add(new Date(), { [type]: interval }); +}; + +export default getEndTime; \ No newline at end of file diff --git a/test-utils/kms/kms-client.ts b/test-utils/kms/kms-client.ts new file mode 100644 index 00000000..512146e7 --- /dev/null +++ b/test-utils/kms/kms-client.ts @@ -0,0 +1,16 @@ +import { KMSClient } from '@aws-sdk/client-kms'; + +if (!process.env.AWS_THIRD_PARTY_API_REGION) throw Error('Missing environment variable AWS_THIRD_PARTY_API_REGION'); +if (!process.env.AWS_ACCESS_KEY_ID) throw Error('Missing environment variable AWS_ACCESS_KEY_ID'); +if (!process.env.AWS_SECRET_ACCESS_KEY) throw Error('Missing environment variable AWS_SECRET_ACCESS_KEY'); + +const kmsClient = new KMSClient({ + region: process.env.AWS_THIRD_PARTY_API_REGION, + credentials: { + accessKeyId: process.env.AWS_ACCESS_KEY_ID, + secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, + ...(process.env.AWS_SESSION_TOKEN && { sessionToken: process.env.AWS_SESSION_TOKEN }), + }, +}); + +export default kmsClient; diff --git a/test-utils/kms/kms-symmetric-decrypt.ts b/test-utils/kms/kms-symmetric-decrypt.ts new file mode 100644 index 00000000..f5120f02 --- /dev/null +++ b/test-utils/kms/kms-symmetric-decrypt.ts @@ -0,0 +1,29 @@ +import { DecryptCommandInput, DecryptCommand, KMSClient } from '@aws-sdk/client-kms'; + +export default async function kmsSymmetricDecrypt(data: Uint8Array): Promise { + if (!process.env.AWS_THIRD_PARTY_API_REGION) throw Error('Missing environment variable AWS_THIRD_PARTY_API_REGION'); + if (!process.env.AWS_ACCESS_KEY_ID) throw Error('Missing environment variable AWS_ACCESS_KEY_ID'); + if (!process.env.AWS_SECRET_ACCESS_KEY) throw Error('Missing environment variable AWS_SECRET_ACCESS_KEY'); + + const kmsClient = new KMSClient({ + region: process.env.AWS_THIRD_PARTY_API_REGION, + credentials: { + accessKeyId: process.env.AWS_ACCESS_KEY_ID, + secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, + ...(process.env.AWS_SESSION_TOKEN && { sessionToken: process.env.AWS_SESSION_TOKEN }), + }, + }); + + try { + const input: DecryptCommandInput = { + KeyId: process.env.KMS_ENCRYPTION_KEY_ARN, + CiphertextBlob: data, + }; + + const command = new DecryptCommand(input); + const response = await kmsClient.send(command); + return new TextDecoder().decode(response.Plaintext); + } catch (err) { + console.log(err); + } +} diff --git a/test-utils/kms/kms-symmetric-encrypt.ts b/test-utils/kms/kms-symmetric-encrypt.ts new file mode 100644 index 00000000..2566cd18 --- /dev/null +++ b/test-utils/kms/kms-symmetric-encrypt.ts @@ -0,0 +1,36 @@ +import { EncryptCommand, EncryptCommandInput, KMSClient } from '@aws-sdk/client-kms'; + +export default async function kmsSymmetricEncrypt(data: string): Promise { + if (!process.env.AWS_THIRD_PARTY_API_REGION) throw Error('Missing environment variable AWS_THIRD_PARTY_API_REGION'); + if (!process.env.AWS_ACCESS_KEY_ID) throw Error('Missing environment variable AWS_ACCESS_KEY_ID'); + if (!process.env.AWS_SECRET_ACCESS_KEY) throw Error('Missing environment variable AWS_SECRET_ACCESS_KEY'); + + const kmsClient = new KMSClient({ + region: process.env.AWS_THIRD_PARTY_API_REGION, + credentials: { + accessKeyId: process.env.AWS_ACCESS_KEY_ID, + secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, + ...(process.env.AWS_SESSION_TOKEN && { sessionToken: process.env.AWS_SESSION_TOKEN }), + }, + }); + + const input: EncryptCommandInput = { + KeyId: process.env.KMS_ENCRYPTION_KEY_ARN, + Plaintext: new TextEncoder().encode(data), + }; + + const command = new EncryptCommand(input); + let encryptedData: Uint8Array | undefined; + + try { + const response = await kmsClient.send(command); + encryptedData = response.CiphertextBlob; + } catch (err) { + console.log('KMS encryption error: ', err); + throw new Error('Failed to encrypt data'); + } + + if (!encryptedData) throw new Error('Failed to encrypt data'); + + return encryptedData; +} diff --git a/test-utils/prisma/prisma-client.ts b/test-utils/prisma/prisma-client.ts new file mode 100644 index 00000000..5b33da0a --- /dev/null +++ b/test-utils/prisma/prisma-client.ts @@ -0,0 +1,35 @@ +import { PrismaClient } from '@prisma/client' + +const prismaClient = new PrismaClient({ + datasources: { db: { url: process.env.DATABASE_URL } } +}); + +export default prismaClient; + +export const prismaClientWithLogs = new PrismaClient({ + datasources: { db: { url: process.env.DATABASE_URL } }, + log: [ + { + emit: 'event', + level: 'query', + }, + { + emit: 'stdout', + level: 'error', + }, + { + emit: 'stdout', + level: 'info', + }, + { + emit: 'stdout', + level: 'warn', + }, + ], +}); + +prismaClientWithLogs.$on('query', (e) => { + console.log('Query: ' + e.query); + console.log('Params: ' + e.params); + console.log('Duration: ' + e.duration + 'ms') +}); \ No newline at end of file diff --git a/test-utils/scripts/create-test-data.ts b/test-utils/scripts/create-test-data.ts new file mode 100644 index 00000000..5e4986ef --- /dev/null +++ b/test-utils/scripts/create-test-data.ts @@ -0,0 +1,989 @@ +import prismaClient from '../../test-utils/prisma/prisma-client'; +import { generateKeyPairSync } from 'crypto'; +import kmsSymmetricEncrypt from '../kms/kms-symmetric-encrypt'; +import getConsoleLoader from '../helpers/console-loading-wheel'; +import { config } from 'dotenv'; +import { StripeEnvsTypes } from '../stripe/create-stripe-test-data'; + +config({ path: '.env.test' }); + +export type TestDbData = { + organisationId: string; + devApiKeyV2: string; + productUuid: string; + productTwoUuid: string; + freeMonthlyPlanUuid: string; + paidPlanUuid: string; + perSeatPaidPlanUuid: string; + paidYearlyPlanUuid: string; + freeYearlyPlanUuid: string; + meteredPaidPlanUuid: string; + meteredPaidPlanTwoUuid: string; + comingSoonPlanUuid: string; + perSeatUnlimitedPlanUuid: string; + perSeatMaxPlanUuid: string; + perSeatMinPlanUuid: string; + perSeatRangePlanUuid: string; + usageBasicMonthlyPlanUuid: string; + usageProMonthlyPlanUuid: string; + currencyUuids: { + gbp: string; + usd: string; + }; +}; + +const organisationId = 'test-org'; +const devApiKeyV2 = 'dddf2aa585c285478dae404803335c0013e795aa'; +const productUuid = '29c9a7c8-9a41-4e87-9e7e-7c62d293c131'; +const productTwoUuid = '2e0ac383-ee7e-44ba-90cb-ab3eabd56722'; +const freeMonthlyPlanUuid = '5a866dba-20c9-466f-88ac-e05c8980c90b'; +const paidPlanUuid = '351eefac-9b21-4299-8cde-302249d6fb1e'; +const perSeatPaidPlanUuid = 'cee50a36-c012-4a78-8e1a-b2bab93830ba'; +const paidYearlyPlanUuid = '111eefac-9b21-4299-8cde-302249d6f111'; +const freeYearlyPlanUuid = '22266dba-20c9-466f-88ac-e05c8980c222'; +const meteredPaidPlanUuid = 'a770ac97-4a36-4815-870c-396586b2d565'; +const meteredPaidPlanTwoUuid = '07cebad1-e2dc-44e0-8585-1ba4c91c032b'; +const comingSoonPlanUuid = '50238f96-4f2e-4fe9-a9a2-f2e917ae78bf'; +const perSeatUnlimitedPlanUuid = 'cab9b1b0-4b0f-4d6e-9dbb-a647ef1f8834'; +const perSeatMaxPlanUuid = 'fe8c96eb-88ea-4261-876c-951cec530e63'; +const perSeatMinPlanUuid = '9cbaf4e7-166a-447d-91ed-662b569b111d'; +const perSeatRangePlanUuid = '4606094a-0cec-40f3-b733-10cf65fdd5ce'; +const usageBasicMonthlyPlanUuid = '14f0c504-489f-4123-8f8d-1612e389c457'; +const usageProMonthlyPlanUuid = '447f2a62-5634-467d-83bb-1b7cead08779'; +const currencyUuids = { + gbp: 'b1b12bc9-6da7-4fd9-97e5-401d996c261c', + usd: '6ebfb42a-a78b-481c-bd79-9e857b432af9', +}; +export const testUuids: TestDbData = { + organisationId, + devApiKeyV2, + productUuid, + productTwoUuid, + freeMonthlyPlanUuid, + paidPlanUuid, + perSeatPaidPlanUuid, + paidYearlyPlanUuid, + freeYearlyPlanUuid, + meteredPaidPlanUuid, + meteredPaidPlanTwoUuid, + comingSoonPlanUuid, + perSeatUnlimitedPlanUuid, + perSeatMaxPlanUuid, + perSeatMinPlanUuid, + perSeatRangePlanUuid, + usageBasicMonthlyPlanUuid, + usageProMonthlyPlanUuid, + currencyUuids, +}; + +const features = [ + { + name: 'boolean', + displayName: 'Boolean', + sortOrder: 0, + variableName: 'boolean', + defaultValue: 'true', + visibility: 'public', + showUnlimited: false, + status: 'ACTIVE', + }, + { + name: 'text options', + displayName: 'Text options', + sortOrder: 1, + variableName: 'text_options', + valueType: 'enum', + defaultValue: 'Access', + visibility: 'public', + showUnlimited: false, + status: 'ACTIVE', + }, + { + name: 'numerical', + displayName: 'Numerical', + sortOrder: 2, + variableName: 'numerical', + valueType: 'numerical', + defaultValue: '50', + visibility: 'public', + showUnlimited: false, + status: 'ACTIVE', + }, + { + name: 'Unlimited numerical', + displayName: 'Numerical unlimited', + sortOrder: 3, + variableName: 'unlimited_numerical', + valueType: 'numerical', + defaultValue: 'unlimited', + visibility: 'public', + showUnlimited: false, + status: 'ACTIVE', + }, +]; + +const capabilities = [ + { + name: 'test_capability_1', + status: 'ACTIVE', + description: 'Capability description', + }, + { + name: 'test_capability_2', + status: 'ACTIVE', + description: 'Capability description', + }, + { + name: 'test_capability_3', + status: 'ACTIVE', + description: 'Capability description', + }, +]; + +const apiKeyScopesV2 = [ + 'events:read', + 'licenses:read', + 'licenses:write', + 'billing:read', + 'billing:write', + 'organisations:read', + 'organisations:write', + 'subscriptions:read', + 'subscriptions:write', + 'write:usage', + 'pricing-tables:read', + 'plans:read', + 'currencies:read', + 'capabilities:read', + 'features:read', + 'products:read', + 'sessions:write', + 'usage:read', + 'usage:write', +]; + +const { publicKey, privateKey } = generateKeyPairSync('ec', { + namedCurve: 'P-256', + publicKeyEncoding: { type: 'spki', format: 'pem' }, + privateKeyEncoding: { type: 'pkcs8', format: 'pem' }, +}); + +export default async function createTestData(stripeEnvs: StripeEnvsTypes) { + const loadingWheel = getConsoleLoader('CREATING TEST DATA'); + + const encryptedPrivateKey = await kmsSymmetricEncrypt(privateKey); + + await prismaClient.currency.create({ + data: { + uuid: currencyUuids.gbp, + shortName: 'USD', + longName: 'United States Dollar', + symbol: '$', + }, + }); + + await prismaClient.currency.create({ + data: { + uuid: currencyUuids.usd, + shortName: 'GBP', + longName: 'British Pound', + symbol: '£', + }, + }); + + await prismaClient.organisation.create({ + data: { + clerkOrgId: organisationId, + salablePlanUuid: organisationId, + svixAppId: organisationId, + logoUrl: 'https://example.com/xxxxx.png', + billingEmailId: 'xxxxx', + addressDetails: {}, + signingKeys: { + create: { + publicKey, + privateKey: Buffer.from(encryptedPrivateKey), + }, + }, + }, + }); + + await prismaClient.apiKey.create({ + data: { + name: 'Sample API Key', + organisation: organisationId, + value: devApiKeyV2, + scopes: JSON.stringify(apiKeyScopesV2), + status: 'ACTIVE', + }, + }); + + const product = await prismaClient.product.create({ + data: { + name: 'Sample Product', + description: 'This is a sample product for testing purposes', + logoUrl: 'https://example.com/logo.png', + displayName: 'Sample Product', + organisation: organisationId, + status: 'ACTIVE', + paid: false, + appType: 'CUSTOM', + isTest: false, + uuid: productUuid, + organisationPaymentIntegration: { + create: { + organisation: organisationId, + accountId: process.env.STRIPE_ACCOUNT_ID, + accountName: 'Widgy Widgets', + integrationName: 'salable', + isTest: true, + accountData: {}, + }, + }, + currencies: { + create: [ + { + defaultCurrency: true, + currency: { connect: { uuid: currencyUuids.gbp } }, + }, + { + defaultCurrency: false, + currency: { connect: { uuid: currencyUuids.usd } }, + }, + ], + }, + features: { + create: features, + }, + capabilities: { + create: capabilities, + }, + }, + include: { + features: true, + currencies: { include: { currency: true } }, + capabilities: true, + }, + }); + + const productTwo = await prismaClient.product.create({ + data: { + name: 'Sample Product Two', + description: 'This is a sample product for testing purposes', + logoUrl: 'https://example.com/logo.png', + displayName: 'Sample Product Two', + organisation: organisationId, + status: 'ACTIVE', + paid: false, + appType: 'CUSTOM', + isTest: false, + uuid: productTwoUuid, + organisationPaymentIntegration: { + create: { + organisation: organisationId, + accountId: process.env.STRIPE_ACCOUNT_ID, + accountName: 'Widgy Widgets Two', + integrationName: 'salable', + isTest: true, + accountData: {}, + }, + }, + currencies: { + create: [ + { + defaultCurrency: true, + currency: { connect: { uuid: currencyUuids.gbp } }, + }, + ], + }, + features: { + create: features, + }, + capabilities: { + create: capabilities, + }, + }, + include: { + features: true, + currencies: { include: { currency: true } }, + capabilities: true, + }, + }); + + await prismaClient.plan.create({ + data: { + organisation: organisationId, + pricingType: 'paid', + licenseType: 'perSeat', + perSeatAmount: 2, + name: 'Per Seat Basic Monthly Plan Name', + description: 'Per Seat Basic Monthly Plan description', + displayName: 'Per Seat Basic Monthly Plan Display Name', + uuid: perSeatPaidPlanUuid, + product: { connect: { uuid: product.uuid } }, + status: 'ACTIVE', + trialDays: 0, + evaluation: false, + evalDays: 0, + interval: 'month', + length: 1, + active: true, + planType: 'Standard', + environment: 'dev', + paddlePlanId: null, + maxSeatAmount: -1, + visibility: 'public', + currencies: { + create: product.currencies.map((c) => ({ + currency: { connect: { uuid: c.currencyUuid } }, + price: 1500, + paymentIntegrationPlanId: stripeEnvs.planPerSeatBasicMonthlyGbpId, + })), + }, + features: { + create: product.features.map((f) => ({ + feature: { connect: { uuid: f.uuid } }, + enumValue: { + create: { name: 'Access', feature: { connect: { uuid: f.uuid } } }, + }, + value: getFeatureValue(f.variableName!), + isUnlimited: undefined as boolean | undefined, + isUsage: undefined as boolean | undefined, + pricePerUnit: 10, + minUsage: 1, + maxUsage: 100, + })), + }, + }, + include: { features: { include: { feature: true, enumValue: true } } }, + }); + + await prismaClient.plan.create({ + data: { + organisation: organisationId, + pricingType: 'paid', + licenseType: 'licensed', + name: 'Basic Monthly Plan Name', + description: 'Basic Monthly Plan description', + displayName: 'Basic Monthly Plan Display Name', + uuid: paidPlanUuid, + product: { connect: { uuid: product.uuid } }, + status: 'ACTIVE', + trialDays: 0, + evaluation: false, + evalDays: 7, + interval: 'month', + length: 1, + active: true, + planType: 'Standard', + environment: 'dev', + paddlePlanId: null, + maxSeatAmount: -1, + visibility: 'public', + currencies: { + create: product.currencies.map((c) => ({ + currency: { connect: { uuid: c.currencyUuid } }, + price: 1000, + paymentIntegrationPlanId: c.currency.shortName === 'GBP' ? stripeEnvs.planBasicMonthlyGbpId : stripeEnvs.planBasicMonthlyUsdId, + })), + }, + features: { + create: product.features.map((f) => ({ + feature: { connect: { uuid: f.uuid } }, + enumValue: { + create: { name: 'Access', feature: { connect: { uuid: f.uuid } } }, + }, + value: getFeatureValue(f.variableName!), + isUnlimited: undefined as boolean | undefined, + isUsage: undefined as boolean | undefined, + pricePerUnit: 10, + minUsage: 1, + maxUsage: 100, + })), + }, + }, + include: { features: { include: { feature: true, enumValue: true } } }, + }); + + await prismaClient.plan.create({ + data: { + organisation: organisationId, + pricingType: 'free', + licenseType: 'licensed', + name: 'Free Monthly Plan Name', + description: 'Free Monthly Plan description', + displayName: 'Free Monthly Plan Display Name', + uuid: freeMonthlyPlanUuid, + product: { connect: { uuid: product.uuid } }, + status: 'ACTIVE', + trialDays: 0, + evaluation: false, + evalDays: 0, + interval: 'month', + length: 1, + active: true, + planType: 'Standard', + environment: 'dev', + paddlePlanId: null, + maxSeatAmount: -1, + visibility: 'public', + features: { + create: product.features.map((f) => ({ + feature: { connect: { uuid: f.uuid } }, + enumValue: { + create: { name: 'Access', feature: { connect: { uuid: f.uuid } } }, + }, + value: getFeatureValue(f.variableName!), + isUnlimited: undefined as boolean | undefined, + isUsage: undefined as boolean | undefined, + pricePerUnit: 10, + minUsage: 1, + maxUsage: 100, + })), + }, + }, + include: { features: { include: { feature: true, enumValue: true } } }, + }); + + await prismaClient.plan.create({ + data: { + organisation: organisationId, + pricingType: 'paid', + licenseType: 'licensed', + name: 'Basic Yearly Plan Name', + description: 'Basic Yearly Plan description', + displayName: 'Basic Yearly Plan Display Name', + uuid: paidYearlyPlanUuid, + product: { connect: { uuid: product.uuid } }, + status: 'ACTIVE', + trialDays: 0, + evaluation: false, + evalDays: 0, + interval: 'year', + length: 1, + active: true, + planType: 'Standard', + environment: 'dev', + paddlePlanId: null, + maxSeatAmount: -1, + visibility: 'public', + currencies: { + create: product.currencies.map((c) => ({ + currency: { connect: { uuid: c.currencyUuid } }, + price: 1000, + paymentIntegrationPlanId: stripeEnvs.planBasicYearlyGbpId, + })), + }, + features: { + create: product.features.map((f) => ({ + feature: { connect: { uuid: f.uuid } }, + enumValue: { + create: { name: 'Access', feature: { connect: { uuid: f.uuid } } }, + }, + value: getFeatureValue(f.variableName!), + isUnlimited: undefined as boolean | undefined, + isUsage: undefined as boolean | undefined, + pricePerUnit: 10, + minUsage: 1, + maxUsage: 100, + })), + }, + }, + include: { features: { include: { feature: true, enumValue: true } } }, + }); + + await prismaClient.plan.create({ + data: { + organisation: organisationId, + pricingType: 'free', + licenseType: 'licensed', + name: 'Free Yearly Plan Name', + description: 'Free Yearly Plan description', + displayName: 'Free Yearly Plan Display Name', + uuid: freeYearlyPlanUuid, + product: { connect: { uuid: product.uuid } }, + status: 'ACTIVE', + trialDays: 0, + evaluation: false, + evalDays: 0, + interval: 'year', + length: 1, + active: true, + planType: 'Standard', + environment: 'dev', + paddlePlanId: null, + maxSeatAmount: -1, + visibility: 'public', + features: { + create: product.features.map((f) => ({ + feature: { connect: { uuid: f.uuid } }, + enumValue: { + create: { name: 'Access', feature: { connect: { uuid: f.uuid } } }, + }, + value: getFeatureValue(f.variableName!), + isUnlimited: undefined as boolean | undefined, + isUsage: undefined as boolean | undefined, + pricePerUnit: 10, + minUsage: 1, + maxUsage: 100, + })), + }, + }, + include: { features: { include: { feature: true, enumValue: true } } }, + }); + + await prismaClient.plan.create({ + data: { + organisation: organisationId, + pricingType: 'paid', + licenseType: 'metered', + name: 'Usage Basic Monthly Plan Name', + description: 'Usage Basic Monthly Plan description', + displayName: 'Usage Basic Monthly Plan Display Name', + uuid: meteredPaidPlanUuid, + product: { connect: { uuid: productTwoUuid } }, + status: 'ACTIVE', + trialDays: 0, + evaluation: false, + evalDays: 0, + interval: 'month', + length: 1, + active: true, + planType: 'Standard', + environment: 'dev', + paddlePlanId: null, + maxSeatAmount: -1, + visibility: 'public', + currencies: { + create: productTwo.currencies.map((c) => ({ + currency: { connect: { uuid: c.currencyUuid } }, + price: 20, + paymentIntegrationPlanId: stripeEnvs.planUsageBasicMonthlyGbpId, + })), + }, + features: { + create: productTwo.features.map((f) => ({ + feature: { connect: { uuid: f.uuid } }, + enumValue: { + create: { name: 'Access', feature: { connect: { uuid: f.uuid } } }, + }, + value: getFeatureValue(f.variableName!), + isUnlimited: undefined as boolean | undefined, + isUsage: undefined as boolean | undefined, + pricePerUnit: 10, + minUsage: 1, + maxUsage: 100, + })), + }, + }, + include: { features: { include: { feature: true, enumValue: true } } }, + }); + + await prismaClient.plan.create({ + data: { + organisation: organisationId, + pricingType: 'paid', + licenseType: 'metered', + name: 'Usage Pro Monthly Plan Name', + description: 'Usage Pro Monthly Plan description', + displayName: 'Usage Pro Monthly Plan Display Name', + uuid: meteredPaidPlanTwoUuid, + product: { connect: { uuid: productTwoUuid } }, + status: 'ACTIVE', + trialDays: 0, + evaluation: false, + evalDays: 0, + interval: 'month', + length: 1, + active: true, + planType: 'Standard', + environment: 'dev', + paddlePlanId: null, + maxSeatAmount: -1, + visibility: 'public', + currencies: { + create: productTwo.currencies.map((c) => ({ + currency: { connect: { uuid: c.currencyUuid } }, + price: 50, + paymentIntegrationPlanId: stripeEnvs.planUsageProMonthlyGbpId, + })), + }, + features: { + create: productTwo.features.map((f) => ({ + feature: { connect: { uuid: f.uuid } }, + enumValue: { + create: { name: 'Access', feature: { connect: { uuid: f.uuid } } }, + }, + value: getFeatureValue(f.variableName!), + isUnlimited: undefined as boolean | undefined, + isUsage: undefined as boolean | undefined, + pricePerUnit: 10, + minUsage: 1, + maxUsage: 100, + })), + }, + }, + include: { features: { include: { feature: true, enumValue: true } } }, + }); + + await prismaClient.plan.create({ + data: { + organisation: organisationId, + pricingType: 'free', + licenseType: 'licensed', + name: 'Future Plan Name', + description: 'Future Plan description', + displayName: 'Future Plan Display Name', + uuid: comingSoonPlanUuid, + product: { connect: { uuid: productTwoUuid } }, + status: 'ACTIVE', + trialDays: 0, + evaluation: false, + evalDays: 0, + interval: 'month', + length: 1, + active: true, + planType: 'Coming soon', + environment: 'dev', + paddlePlanId: null, + maxSeatAmount: -1, + visibility: 'public', + features: { + create: productTwo.features.map((f) => ({ + feature: { connect: { uuid: f.uuid } }, + enumValue: { + create: { name: 'Access', feature: { connect: { uuid: f.uuid } } }, + }, + value: getFeatureValue(f.variableName!), + isUnlimited: undefined as boolean | undefined, + isUsage: undefined as boolean | undefined, + pricePerUnit: 10, + minUsage: 1, + maxUsage: 100, + })), + }, + }, + include: { features: { include: { feature: true, enumValue: true } } }, + }); + + await prismaClient.plan.create({ + data: { + organisation: organisationId, + pricingType: 'paid', + licenseType: 'perSeat', + name: 'Per Seat Unlimited Plan', + description: 'Per Seat Unlimited Plan description', + displayName: 'Per Seat Unlimited Plan', + uuid: perSeatUnlimitedPlanUuid, + product: { connect: { uuid: productTwoUuid } }, + status: 'ACTIVE', + trialDays: 0, + evaluation: false, + evalDays: 0, + interval: 'month', + length: 1, + active: true, + planType: 'Standard', + environment: 'dev', + paddlePlanId: null, + perSeatAmount: 1, + maxSeatAmount: -1, + visibility: 'public', + currencies: { + create: productTwo.currencies.map((c) => ({ + currency: { connect: { uuid: c.currencyUuid } }, + price: 100, + paymentIntegrationPlanId: stripeEnvs.planPerSeatUnlimitedMonthlyGbpId, + })), + }, + features: { + create: productTwo.features.map((f) => ({ + feature: { connect: { uuid: f.uuid } }, + enumValue: { + create: { name: 'Access', feature: { connect: { uuid: f.uuid } } }, + }, + value: getFeatureValue(f.variableName!), + isUnlimited: undefined as boolean | undefined, + isUsage: undefined as boolean | undefined, + pricePerUnit: 10, + minUsage: 1, + maxUsage: 100, + })), + }, + }, + include: { features: { include: { feature: true, enumValue: true } } }, + }); + + await prismaClient.plan.create({ + data: { + organisation: organisationId, + pricingType: 'paid', + licenseType: 'perSeat', + name: 'Per Seat Maximum Plan', + description: 'Per Seat Maximum Plan description', + displayName: 'Per Seat Maximum Plan', + uuid: perSeatMaxPlanUuid, + product: { connect: { uuid: productTwoUuid } }, + status: 'ACTIVE', + trialDays: 0, + evaluation: false, + evalDays: 0, + interval: 'month', + length: 1, + active: true, + planType: 'Standard', + environment: 'dev', + paddlePlanId: null, + perSeatAmount: 1, + maxSeatAmount: 5, + visibility: 'public', + currencies: { + create: productTwo.currencies.map((c) => ({ + currency: { connect: { uuid: c.currencyUuid } }, + price: 100, + paymentIntegrationPlanId: stripeEnvs.planPerSeatMaximumMonthlyGbpId, + })), + }, + features: { + create: productTwo.features.map((f) => ({ + feature: { connect: { uuid: f.uuid } }, + enumValue: { + create: { name: 'Access', feature: { connect: { uuid: f.uuid } } }, + }, + value: getFeatureValue(f.variableName!), + isUnlimited: undefined as boolean | undefined, + isUsage: undefined as boolean | undefined, + pricePerUnit: 10, + minUsage: 1, + maxUsage: 100, + })), + }, + }, + include: { features: { include: { feature: true, enumValue: true } } }, + }); + + await prismaClient.plan.create({ + data: { + organisation: organisationId, + pricingType: 'paid', + licenseType: 'perSeat', + name: 'Per Seat Minimum Plan', + description: 'Per Seat Minimum Plan description', + displayName: 'Per Seat Minimum Plan', + uuid: perSeatMinPlanUuid, + product: { connect: { uuid: productTwoUuid } }, + status: 'ACTIVE', + trialDays: 0, + evaluation: false, + evalDays: 0, + interval: 'month', + length: 1, + active: true, + planType: 'Standard', + environment: 'dev', + paddlePlanId: null, + perSeatAmount: 10, + maxSeatAmount: -1, + visibility: 'public', + currencies: { + create: productTwo.currencies.map((c) => ({ + currency: { connect: { uuid: c.currencyUuid } }, + price: 400, + paymentIntegrationPlanId: stripeEnvs.planPerSeatMinimumMonthlyGbpId, + })), + }, + features: { + create: productTwo.features.map((f) => ({ + feature: { connect: { uuid: f.uuid } }, + enumValue: { + create: { name: 'Access', feature: { connect: { uuid: f.uuid } } }, + }, + value: getFeatureValue(f.variableName!), + isUnlimited: undefined as boolean | undefined, + isUsage: undefined as boolean | undefined, + pricePerUnit: 10, + minUsage: 1, + maxUsage: 100, + })), + }, + }, + include: { features: { include: { feature: true, enumValue: true } } }, + }); + + await prismaClient.plan.create({ + data: { + organisation: organisationId, + pricingType: 'paid', + licenseType: 'perSeat', + name: 'Per Seat Range Plan', + description: 'Per Seat Range Plan description', + displayName: 'Per Seat Range Plan', + uuid: perSeatRangePlanUuid, + product: { connect: { uuid: productTwoUuid } }, + status: 'ACTIVE', + trialDays: 0, + evaluation: false, + evalDays: 0, + interval: 'month', + length: 1, + active: true, + planType: 'Standard', + environment: 'dev', + paddlePlanId: null, + perSeatAmount: 6, + maxSeatAmount: 10, + visibility: 'public', + currencies: { + create: productTwo.currencies.map((c) => ({ + currency: { connect: { uuid: c.currencyUuid } }, + price: 100, + paymentIntegrationPlanId: stripeEnvs.planPerSeatRangeMonthlyGbpId, + })), + }, + features: { + create: productTwo.features.map((f) => ({ + feature: { connect: { uuid: f.uuid } }, + enumValue: { + create: { name: 'Access', feature: { connect: { uuid: f.uuid } } }, + }, + value: getFeatureValue(f.variableName!), + isUnlimited: undefined as boolean | undefined, + isUsage: undefined as boolean | undefined, + pricePerUnit: 10, + minUsage: 1, + maxUsage: 100, + })), + }, + }, + include: { features: { include: { feature: true, enumValue: true } } }, + }); + + await prismaClient.plan.create({ + data: { + organisation: organisationId, + pricingType: 'paid', + licenseType: 'metered', + name: 'Usage Basic Monthly Plan Name', + description: 'Usage Basic Monthly Plan description', + displayName: 'Usage Basic Monthly Plan Display Name', + uuid: usageBasicMonthlyPlanUuid, + product: { connect: { uuid: productTwoUuid } }, + status: 'ACTIVE', + trialDays: 0, + evaluation: false, + evalDays: 0, + interval: 'month', + length: 1, + active: true, + planType: 'Standard', + environment: 'dev', + paddlePlanId: null, + perSeatAmount: 6, + maxSeatAmount: 10, + visibility: 'public', + currencies: { + create: productTwo.currencies.map((c) => ({ + currency: { connect: { uuid: c.currencyUuid } }, + price: 20, + paymentIntegrationPlanId: stripeEnvs.planUsageBasicMonthlyGbpId, + })), + }, + features: { + create: productTwo.features.map((f) => ({ + feature: { connect: { uuid: f.uuid } }, + enumValue: { + create: { name: 'Access', feature: { connect: { uuid: f.uuid } } }, + }, + value: getFeatureValue(f.variableName!), + isUnlimited: undefined as boolean | undefined, + isUsage: undefined as boolean | undefined, + pricePerUnit: 10, + minUsage: 1, + maxUsage: 100, + })), + }, + }, + include: { features: { include: { feature: true, enumValue: true } } }, + }); + + await prismaClient.plan.create({ + data: { + organisation: organisationId, + pricingType: 'paid', + licenseType: 'metered', + name: 'Usage Pro Monthly Plan Name', + description: 'Usage Pro Monthly Plan description', + displayName: 'Usage Pro Monthly Plan Display Name', + uuid: usageProMonthlyPlanUuid, + product: { connect: { uuid: productTwoUuid } }, + status: 'ACTIVE', + trialDays: 0, + evaluation: false, + evalDays: 0, + interval: 'month', + length: 1, + active: true, + planType: 'Standard', + environment: 'dev', + paddlePlanId: null, + perSeatAmount: 6, + maxSeatAmount: 10, + visibility: 'public', + currencies: { + create: productTwo.currencies.map((c) => ({ + currency: { connect: { uuid: c.currencyUuid } }, + price: 50, + paymentIntegrationPlanId: stripeEnvs.planUsageProMonthlyGbpId, + })), + }, + features: { + create: productTwo.features.map((f) => ({ + feature: { connect: { uuid: f.uuid } }, + enumValue: { + create: { name: 'Access', feature: { connect: { uuid: f.uuid } } }, + }, + value: getFeatureValue(f.variableName!), + isUnlimited: undefined as boolean | undefined, + isUsage: undefined as boolean | undefined, + pricePerUnit: 10, + minUsage: 1, + maxUsage: 100, + })), + }, + }, + include: { features: { include: { feature: true, enumValue: true } } }, + }); + + await prismaClient.capabilitiesOnPlans.createMany({ + data: [ + { capabilityUuid: product.capabilities[0].uuid, planUuid: paidPlanUuid }, + { capabilityUuid: product.capabilities[0].uuid, planUuid: freeMonthlyPlanUuid }, + { + capabilityUuid: product.capabilities[0].uuid, + planUuid: paidYearlyPlanUuid, + }, + { capabilityUuid: product.capabilities[0].uuid, planUuid: freeYearlyPlanUuid }, + { + capabilityUuid: product.capabilities[0].uuid, + planUuid: perSeatPaidPlanUuid, + }, + ], + }); + + clearInterval(loadingWheel); +} + +function getFeatureValue(variableName: string) { + switch (variableName) { + case 'unlimited_numerical': + return 'Unlimited'; + case 'numerical': + return '100'; + case 'enum': + return 'Access'; + case 'boolean': + return 'true'; + default: + return ''; + } +} diff --git a/test-utils/stripe/create-stripe-custom-account.ts b/test-utils/stripe/create-stripe-custom-account.ts new file mode 100644 index 00000000..8c7b6b0e --- /dev/null +++ b/test-utils/stripe/create-stripe-custom-account.ts @@ -0,0 +1,130 @@ +import Stripe from 'stripe'; + +const STRIPE_KEY = process.env.STRIPE_KEY; + +export default async function createStripeCustomAccount() { + const stripe = new Stripe(STRIPE_KEY!, { apiVersion: '2023-10-16' }); + + let account = await stripe.accounts.create({ + country: 'US', + type: 'custom', + business_type: 'company', + capabilities: { + card_payments: { + requested: true, + }, + transfers: { + requested: true, + }, + }, + external_account: 'btok_us', + tos_acceptance: { + service_agreement: 'full', + date: 1547923073, + ip: '172.18.80.19', + }, + }); + + account = await stripe.accounts.update(account.id, { + business_profile: { + mcc: '5045', + url: 'https://bestcookieco.com', + }, + company: { + address: { + city: 'Schenectady', + line1: 'address_full_match', + postal_code: '12345', + state: 'NY', + }, + tax_id: '000000000', + name: 'The Best Cookie Co', + phone: '8888675309', + }, + }); + + const representative = await stripe.accounts.createPerson(account.id, { + first_name: 'Jenny', + last_name: 'Rosen', + relationship: { + representative: true, + title: 'CEO', + }, + }); + + await stripe.accounts.updatePerson(account.id, representative.id, { + address: { + city: 'Schenectady', + line1: 'address_full_match', + postal_code: '12345', + state: 'NY', + }, + dob: { + day: 1, + month: 1, + year: 1902, + }, + ssn_last_4: '0000', + phone: '8888675309', + email: 'jenny@bestcookieco.com', + relationship: { + executive: true, + }, + id_number: '000-00-0000', + }); + + const owner = await stripe.accounts.createPerson(account.id, { + first_name: 'Kathleen', + last_name: 'Banks', + email: 'kathleen@bestcookieco.com', + relationship: { + owner: true, + percent_ownership: 80, + }, + id_number: '000-00-0000', + }); + + await stripe.accounts.updatePerson(account.id, owner.id, { + address: { + city: 'Schenectady', + line1: 'address_full_match', + postal_code: '12345', + state: 'NY', + }, + dob: { + day: 1, + month: 1, + year: 1902, + }, + ssn_last_4: '0000', + phone: '8888675309', + email: 'kathleen@bestcookieco.com', + relationship: { + owner: true, + percent_ownership: 80, + }, + }); + + account = await stripe.accounts.update(account.id, { + company: { + owners_provided: true, + }, + }); + + const stripeConnect = new Stripe(STRIPE_KEY!, { + apiVersion: '2023-10-16', + stripeAccount: account.id, + }); + + // Note: poll account until stripe has completed account verification + while (true) { + const connectedAccount = await stripeConnect.accounts.retrieve(); + console.log('Pending requirements: ', connectedAccount.requirements?.pending_verification?.length); + if (connectedAccount.requirements?.pending_verification?.length === 0) break; + await new Promise((r) => setTimeout(r, 2000)); + } + + console.log('Account ID:', account.id); + + return account; +} diff --git a/test-utils/stripe/create-stripe-test-data.ts b/test-utils/stripe/create-stripe-test-data.ts new file mode 100644 index 00000000..019a1eb9 --- /dev/null +++ b/test-utils/stripe/create-stripe-test-data.ts @@ -0,0 +1,337 @@ +import Stripe from 'stripe'; +import createStripeCustomAccount from '../../test-utils/stripe/create-stripe-custom-account'; +import getConsoleLoader from '../helpers/console-loading-wheel'; +import { config } from 'dotenv'; + +config({ path: '.env.test' }); + +const STRIPE_KEY = process.env.STRIPE_KEY; + +export interface StripeEnvsTypes { + paymentMethodId: string; + customerId: string; + productWidgetOneId: string; + planBasicMonthlyGbpId: string; + planBasicYearlyGbpId: string; + planPerSeatBasicMonthlyGbpId: string; + planUsageProMonthlyGbpId: string; + planUsageBasicMonthlyGbpId: string; + usageBasicSubscriptionLineItemId: string; + usageBasicSubscriptionId: string; + planProMonthlyGbpId: string; + planBasicMonthlyUsdId: string; + planProMonthlyUsdId: string; + basicSubscriptionId: string; + basicSubscriptionIdTwo: string; + basicSubscriptionLineItemId: string; + basicSubscriptionTwoLineItemId: string; + perSeatBasicSubscriptionId: string; + perSeatBasicSubscriptionLineItemId: string; + proSubscriptionId: string; + proSubscriptionLineItemId: string; + planPerSeatUnlimitedMonthlyGbpId: string; + planPerSeatMaximumMonthlyGbpId: string; + planPerSeatMinimumMonthlyGbpId: string; + planPerSeatRangeMonthlyGbpId: string; +} + +export default async function createStripeData() { + if (!STRIPE_KEY) throw new Error('Missing STRIPE_KEY'); + + const loadingWheel = getConsoleLoader('CREATING STRIPE ACCOUNT DATA'); + + const stripeCustomerEmail = 'tester@domain.com'; + + const obj = { + paymentMethodId: '', + customerId: '', + productWidgetOneId: '', + planBasicMonthlyGbpId: '', + planBasicYearlyGbpId: '', + planPerSeatBasicMonthlyGbpId: '', + planUsageProMonthlyGbpId: '', + planUsageBasicMonthlyGbpId: '', + usageBasicSubscriptionLineItemId: '', + usageBasicSubscriptionId: '', + planProMonthlyGbpId: '', + planBasicMonthlyUsdId: '', + planProMonthlyUsdId: '', + basicSubscriptionId: '', + basicSubscriptionIdTwo: '', + basicSubscriptionLineItemId: '', + basicSubscriptionTwoLineItemId: '', + perSeatBasicSubscriptionId: '', + perSeatBasicSubscriptionLineItemId: '', + proSubscriptionId: '', + proSubscriptionLineItemId: '', + planPerSeatUnlimitedMonthlyGbpId: '', + planPerSeatMaximumMonthlyGbpId: '', + planPerSeatMinimumMonthlyGbpId: '', + planPerSeatRangeMonthlyGbpId: '', + }; + + if (!process.env.STRIPE_ACCOUNT_ID) { + const account = await createStripeCustomAccount(); + process.env.STRIPE_ACCOUNT_ID = account.id; + } + + const stripeConnect = new Stripe(STRIPE_KEY, { + apiVersion: '2023-10-16', + stripeAccount: process.env.STRIPE_ACCOUNT_ID, + }); + + if (!obj.paymentMethodId) { + const stripePaymentMethod = await stripeConnect.paymentMethods.create({ + type: 'card', + card: { token: 'tok_visa' }, + }); + obj.paymentMethodId = stripePaymentMethod.id; + } + + if (!obj.customerId) { + const stripeCustomer = await stripeConnect.customers.create({ + email: stripeCustomerEmail, + payment_method: obj.paymentMethodId, + }); + obj.customerId = stripeCustomer.id; + } + + if (!obj.productWidgetOneId) { + const stripeProductWidgetOne = await stripeConnect.products.create({ + name: 'Widget One', + }); + obj.productWidgetOneId = stripeProductWidgetOne.id; + } + + if (!obj.planUsageProMonthlyGbpId) { + const stripePlanUsageProMonthlyGbp = await stripeConnect.plans.create({ + nickname: 'Usage Basic', + currency: 'gbp', + interval: 'month', + product: obj.productWidgetOneId, + amount: 50, + usage_type: 'metered', + }); + obj.planUsageProMonthlyGbpId = stripePlanUsageProMonthlyGbp.id; + } + + if (!obj.planUsageBasicMonthlyGbpId) { + const stripePlanUsageBasicMonthlyGbp = await stripeConnect.plans.create({ + nickname: 'Usage Basic', + currency: 'gbp', + interval: 'month', + product: obj.productWidgetOneId, + amount: 20, + usage_type: 'metered', + }); + obj.planUsageBasicMonthlyGbpId = stripePlanUsageBasicMonthlyGbp.id; + } + + if (!obj.usageBasicSubscriptionId) { + const stripeUsageBasicSubscription = await stripeConnect.subscriptions.create({ + customer: obj.customerId, + items: [ + { + price: obj.planUsageBasicMonthlyGbpId, + }, + ], + default_payment_method: obj.paymentMethodId, + }); + obj.usageBasicSubscriptionId = stripeUsageBasicSubscription.id; + obj.usageBasicSubscriptionLineItemId = stripeUsageBasicSubscription.items.data[0].id; + } + + if (!obj.planPerSeatBasicMonthlyGbpId) { + const stripePlanPerSeatBasicMonthlyGbp = await stripeConnect.plans.create({ + nickname: 'Per Seat Basic', + currency: 'gbp', + interval: 'month', + product: obj.productWidgetOneId, + amount: 1500, + }); + obj.planPerSeatBasicMonthlyGbpId = stripePlanPerSeatBasicMonthlyGbp.id; + } + + if (!obj.planPerSeatUnlimitedMonthlyGbpId) { + const stripePlanPerSeatUnlimitedMonthlyGbp = await stripeConnect.plans.create({ + nickname: 'Per Seat Unlimited', + currency: 'gbp', + interval: 'month', + product: obj.productWidgetOneId, + amount: 100, + }); + obj.planPerSeatUnlimitedMonthlyGbpId = stripePlanPerSeatUnlimitedMonthlyGbp.id; + } + + if (!obj.planPerSeatMaximumMonthlyGbpId) { + const stripePlanPerSeatMaximumMonthlyGbp = await stripeConnect.plans.create({ + nickname: 'Per Seat Maximum', + currency: 'gbp', + interval: 'month', + product: obj.productWidgetOneId, + amount: 200, + }); + obj.planPerSeatMaximumMonthlyGbpId = stripePlanPerSeatMaximumMonthlyGbp.id; + } + + if (!obj.planPerSeatRangeMonthlyGbpId) { + const stripePlanPerSeatRangeMonthlyGbp = await stripeConnect.plans.create({ + nickname: 'Per Seat Range', + currency: 'gbp', + interval: 'month', + product: obj.productWidgetOneId, + amount: 300, + }); + obj.planPerSeatRangeMonthlyGbpId = stripePlanPerSeatRangeMonthlyGbp.id; + } + + if (!obj.planPerSeatMinimumMonthlyGbpId) { + const stripePlanPerSeatMinimumMonthlyGbp = await stripeConnect.plans.create({ + nickname: 'Per Seat Minimum', + currency: 'gbp', + interval: 'month', + product: obj.productWidgetOneId, + amount: 400, + }); + obj.planPerSeatMinimumMonthlyGbpId = stripePlanPerSeatMinimumMonthlyGbp.id; + } + + if (!obj.perSeatBasicSubscriptionId) { + const stripePerSeatBasicSubscription = await stripeConnect.subscriptions.create({ + customer: obj.customerId, + items: [ + { + quantity: 3, + price: obj.planPerSeatBasicMonthlyGbpId, + }, + ], + default_payment_method: obj.paymentMethodId, + }); + obj.perSeatBasicSubscriptionId = stripePerSeatBasicSubscription.id; + obj.perSeatBasicSubscriptionLineItemId = stripePerSeatBasicSubscription.items.data[0].id; + } + + if (!obj.planBasicMonthlyGbpId) { + const stripePlanBasicMonthlyGbp = await stripeConnect.plans.create({ + currency: 'gbp', + interval: 'month', + product: obj.productWidgetOneId, + amount: 10000, + }); + obj.planBasicMonthlyGbpId = stripePlanBasicMonthlyGbp.id; + } + + if (!obj.planBasicYearlyGbpId) { + const stripePlanBasicYearlyGbp = await stripeConnect.plans.create({ + currency: 'gbp', + interval: 'year', + product: obj.productWidgetOneId, + amount: 1000, + }); + obj.planBasicYearlyGbpId = stripePlanBasicYearlyGbp.id; + } + + if (!obj.basicSubscriptionId) { + const stripeBasicSubscription = await stripeConnect.subscriptions.create({ + customer: obj.customerId, + items: [ + { + quantity: 1, + price: obj.planBasicMonthlyGbpId, + }, + ], + default_payment_method: obj.paymentMethodId, + }); + obj.basicSubscriptionId = stripeBasicSubscription.id; + obj.basicSubscriptionLineItemId = stripeBasicSubscription.items.data[0].id; + } + + if (!obj.basicSubscriptionIdTwo) { + const stripeBasicSubscription = await stripeConnect.subscriptions.create({ + customer: obj.customerId, + items: [ + { + quantity: 1, + price: obj.planBasicMonthlyGbpId, + }, + ], + default_payment_method: obj.paymentMethodId, + }); + obj.basicSubscriptionIdTwo = stripeBasicSubscription.id; + obj.basicSubscriptionTwoLineItemId = stripeBasicSubscription.items.data[0].id; + } + + if (!obj.planProMonthlyGbpId) { + const stripePlanProGbpMonthly = await stripeConnect.plans.create({ + currency: 'gbp', + interval: 'month', + product: obj.productWidgetOneId, + amount: 2500, + }); + obj.planProMonthlyGbpId = stripePlanProGbpMonthly.id; + } + + if (!obj.proSubscriptionId) { + const stripeProSubscription = await stripeConnect.subscriptions.create({ + customer: obj.customerId, + items: [ + { + quantity: 2, + price: obj.planProMonthlyGbpId, + }, + ], + default_payment_method: obj.paymentMethodId, + }); + obj.proSubscriptionId = stripeProSubscription.id; + obj.proSubscriptionLineItemId = stripeProSubscription.items.data[0].id; + } + + if (!obj.planBasicMonthlyUsdId) { + const stripePlanBasicUsdMonthly = await stripeConnect.plans.create({ + currency: 'usd', + interval: 'month', + product: obj.productWidgetOneId, + amount: 1000, + }); + obj.planBasicMonthlyUsdId = stripePlanBasicUsdMonthly.id; + } + + if (!obj.planProMonthlyUsdId) { + const stripePlanProUsdMonthly = await stripeConnect.plans.create({ + currency: 'usd', + interval: 'month', + product: obj.productWidgetOneId, + amount: 2500, + }); + obj.planProMonthlyUsdId = stripePlanProUsdMonthly.id; + obj.planProMonthlyUsdId = stripePlanProUsdMonthly.id; + } + + for (let i = 10; i < 10; i++) { + await stripeConnect.invoiceItems.create({ + customer: obj.customerId, + subscription: obj.basicSubscriptionId, + amount: 1000, + currency: 'gbp', + description: 'Charge for past period', + }); + + const invoice = await stripeConnect.invoices.create({ + customer: obj.customerId, + subscription: obj.basicSubscriptionId, + auto_advance: true, + collection_method: 'send_invoice', + due_date: Math.floor(Date.now() / 1000) + 2592000 * (i + 1), + }); + + await stripeConnect.invoices.finalizeInvoice(invoice.id); + + if (i < 5) await stripeConnect.invoices.pay(invoice.id); + if (i === 6) await stripeConnect.invoices.voidInvoice(invoice.id); + if (i === 8) await stripeConnect.invoices.voidInvoice(invoice.id); + } + + clearInterval(loadingWheel); + + return obj; +} diff --git a/tsconfig.json b/tsconfig.json index a38a2aa3..8d8abd06 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,11 +1,8 @@ { "compilerOptions": { "baseUrl": ".", - "paths": { - "@/*": ["*"] - }, - "target": "es5", - "lib": ["dom", "esnext"], + "target": "ES2022", + "lib": ["esnext"], "allowJs": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, @@ -16,7 +13,6 @@ "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "react-jsx", "declaration": true, "noImplicitReturns": false, "outDir": "dist",