From 40424ef9d5fe787893089fbb7a79f9086e670992 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Wed, 10 Jan 2024 00:06:35 +0000 Subject: [PATCH] ci: regenerated with OpenAPI Doc 3.0.1, Speakeasy CLI 1.134.1 --- .eslintrc.js | 28 + .eslintrc.yml | 17 - .gitignore | 9 + .npmignore | 8 + .speakeasy/gen.lock | 161 + README.md | 176 +- RELEASES.md | 12 +- USAGE.md | 10 +- .../components/accounttestcreationdata.md | 3 +- docs/models/components/addresslisting.md | 2 +- docs/models/components/addresslistinginput.md | 2 +- docs/models/components/identifier.md | 9 - docs/models/components/identifiertype.md | 11 - docs/models/errors/dottag.md | 13 - docs/models/errors/errort.md | 11 - .../accountaddpaymentmethodresponse.md | 12 +- .../accountaddresscreateresponse.md | 2 +- .../accountaddressdeleteresponse.md | 10 +- .../operations/accountaddresseditresponse.md | 2 +- .../models/operations/accountexistsrequest.md | 9 - .../operations/accountexistsresponse.md | 10 - docs/models/operations/accountgetresponse.md | 12 +- .../accountpaymentmethoddeleteresponse.md | 10 +- .../operations/guestpaymentsactionresponse.md | 12 +- .../guestpaymentsinitializeresponse.md | 2 +- .../operations/guestpaymentsupdateresponse.md | 12 +- .../operations/oauthgettokenresponse.md | 2 +- .../operations/paymentsactionresponse.md | 12 +- .../operations/paymentsinitializeresponse.md | 2 +- .../operations/paymentsupdateresponse.md | 12 +- .../testingaccountcreateresponse.md | 2 +- .../testingcreditcardgetresponse.md | 2 +- docs/sdks/account/README.md | 274 +- docs/sdks/guest/README.md | 334 +- docs/sdks/loggedin/README.md | 304 +- docs/sdks/oauth/README.md | 25 +- docs/sdks/testing/README.md | 75 +- gen.yaml | 27 +- jest.config.js | 8 - package-lock.json | 9895 ++++------------- package.json | 53 +- src/index.ts | 1 + src/internal/utils/contenttype.ts | 33 - src/internal/utils/headers.ts | 138 - src/internal/utils/index.ts | 12 - src/internal/utils/pathparams.ts | 79 - src/internal/utils/queryparams.ts | 248 - src/internal/utils/requestbody.ts | 357 - src/internal/utils/retries.ts | 182 - src/internal/utils/security.ts | 259 - src/internal/utils/utils.ts | 367 - src/lib/base64.ts | 37 + src/lib/config.ts | 71 + src/lib/encodings.ts | 384 + src/lib/http.ts | 203 + src/lib/retries.ts | 207 + src/lib/sdks.ts | 107 + src/lib/security.ts | 165 + src/lib/url.ts | 31 + src/models/components/account.ts | 66 +- .../accounttestcreationdataoutput.ts | 159 +- src/models/components/addresslisting.ts | 313 +- src/models/components/amount.ts | 50 +- src/models/components/cart.ts | 128 +- src/models/components/cartdiscount.ts | 63 +- src/models/components/cartitem.ts | 99 +- src/models/components/cartshipment.ts | 65 +- .../components/getaccesstokenrequest.ts | 86 +- .../components/getaccesstokenresponse.ts | 116 +- .../guestpaymentinitializerequest.ts | 63 +- src/models/components/identifier.ts | 27 - src/models/components/index.ts | 1 - src/models/components/paymentactionrequest.ts | 52 +- .../components/paymentinitializerequest.ts | 50 +- src/models/components/paymentupdaterequest.ts | 45 +- src/models/components/profile.ts | 67 +- src/models/components/profilecreationdata.ts | 76 +- src/models/components/security.ts | 13 +- src/models/components/testcreditcard.ts | 81 +- src/models/errors/error.ts | 52 - src/models/errors/index.ts | 1 - src/models/errors/sdkerror.ts | 19 +- .../operations/accountaddpaymentmethod.ts | 121 +- src/models/operations/accountaddresscreate.ts | 115 +- src/models/operations/accountaddressdelete.ts | 101 +- src/models/operations/accountaddressedit.ts | 123 +- src/models/operations/accountexists.ts | 45 - src/models/operations/accountget.ts | 103 +- .../operations/accountpaymentmethoddelete.ts | 117 +- src/models/operations/guestpaymentsaction.ts | 128 +- .../operations/guestpaymentsinitialize.ts | 128 +- src/models/operations/guestpaymentsupdate.ts | 128 +- src/models/operations/index.ts | 1 - src/models/operations/oauthgettoken.ts | 72 +- src/models/operations/paymentsaction.ts | 123 +- src/models/operations/paymentsinitialize.ts | 115 +- src/models/operations/paymentsupdate.ts | 123 +- src/models/operations/testingaccountcreate.ts | 126 +- src/models/operations/testingcreditcardget.ts | 76 +- src/sdk/account.ts | 874 +- src/sdk/guest.ts | 462 +- src/sdk/loggedin.ts | 482 +- src/sdk/oauth.ts | 172 +- src/sdk/payments.ts | 32 +- src/sdk/sdk.ts | 147 +- src/sdk/testing.ts | 282 +- src/types/blobs.ts | 30 + src/types/decimal.ts | 5 + src/types/index.ts | 6 +- src/types/operations.ts | 25 + src/types/rfcdate.ts | 66 +- tsconfig.json | 51 +- 112 files changed, 7758 insertions(+), 12786 deletions(-) create mode 100644 .eslintrc.js delete mode 100644 .eslintrc.yml create mode 100644 .npmignore create mode 100755 .speakeasy/gen.lock delete mode 100644 docs/models/components/identifier.md delete mode 100644 docs/models/components/identifiertype.md delete mode 100644 docs/models/errors/dottag.md delete mode 100644 docs/models/errors/errort.md delete mode 100644 docs/models/operations/accountexistsrequest.md delete mode 100644 docs/models/operations/accountexistsresponse.md delete mode 100644 jest.config.js delete mode 100644 src/internal/utils/contenttype.ts delete mode 100644 src/internal/utils/headers.ts delete mode 100644 src/internal/utils/index.ts delete mode 100644 src/internal/utils/pathparams.ts delete mode 100644 src/internal/utils/queryparams.ts delete mode 100644 src/internal/utils/requestbody.ts delete mode 100644 src/internal/utils/retries.ts delete mode 100644 src/internal/utils/security.ts delete mode 100644 src/internal/utils/utils.ts create mode 100644 src/lib/base64.ts create mode 100644 src/lib/config.ts create mode 100644 src/lib/encodings.ts create mode 100644 src/lib/http.ts create mode 100644 src/lib/retries.ts create mode 100644 src/lib/sdks.ts create mode 100644 src/lib/security.ts create mode 100644 src/lib/url.ts delete mode 100644 src/models/components/identifier.ts delete mode 100644 src/models/errors/error.ts delete mode 100644 src/models/operations/accountexists.ts create mode 100644 src/types/blobs.ts create mode 100644 src/types/decimal.ts create mode 100644 src/types/operations.ts diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..4d160bd --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,28 @@ +/* eslint-env node */ +module.exports = { + root: true, + extends: [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:import/recommended", + "plugin:import/typescript", + ], + parser: "@typescript-eslint/parser", + plugins: ["@typescript-eslint"], + settings: { + "import/resolver": { + typescript: true, + node: true, + }, + }, + rules: { + // Handled by typescript compiler + "@typescript-eslint/no-unused-vars": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/no-namespace": "off", + "@typescript-eslint/no-explicit-any": "off", + "import/no-named-as-default-member": "off", + + "import/no-default-export": "error", + }, +}; diff --git a/.eslintrc.yml b/.eslintrc.yml deleted file mode 100644 index 565e624..0000000 --- a/.eslintrc.yml +++ /dev/null @@ -1,17 +0,0 @@ -env: - browser: true - es2021: true - node: true -extends: - - eslint:recommended - - plugin:@typescript-eslint/recommended -overrides: [] -parser: "@typescript-eslint/parser" -parserOptions: - ecmaVersion: latest - sourceType: module -plugins: - - "@typescript-eslint" -rules: - "@typescript-eslint/no-explicit-any": "off" - "no-prototype-builtins": "off" diff --git a/.gitignore b/.gitignore index a33b78f..b1d0547 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,12 @@ +/models +/models/errors +/types +/lib +/sdk +/index.* +/cjs +/node_modules +/.tsbuildinfo dist/ node_modules/ .idea/ diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..e8a556c --- /dev/null +++ b/.npmignore @@ -0,0 +1,8 @@ +/* +/docs/**/*.md +!/**/*.ts +!/**/*.js +!/**/*.map + +/.eslintrc.js +/cjs diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock new file mode 100755 index 0000000..f53b8ee --- /dev/null +++ b/.speakeasy/gen.lock @@ -0,0 +1,161 @@ +lockVersion: 2.0.0 +id: 79fa0df9-852a-493c-b998-1d82654b5f18 +management: + docChecksum: 62753fde5be1f94d492210a95b671a45 + docVersion: 3.0.1 + speakeasyVersion: internal + generationVersion: 2.230.3 + releaseVersion: 0.4.0 + configChecksum: d65c440b4991499653ecbe5ea753d142 + repoURL: https://github.com/BoltApp/Bolt-Typescript-SDK.git + repoSubDirectory: . + installationURL: https://github.com/BoltApp/Bolt-Typescript-SDK + published: true +features: + typescript: + core: 3.4.5 + flattening: 2.81.1 + globalSecurity: 2.82.2 + globalServerURLs: 2.82.1 + groups: 2.81.2 + ignores: 2.81.1 + inputOutputModels: 2.83.0 + methodSecurity: 2.82.0 + nameOverrides: 2.81.1 +generatedFiles: + - src/sdk/account.ts + - src/sdk/guest.ts + - src/sdk/loggedin.ts + - src/sdk/payments.ts + - src/sdk/oauth.ts + - src/sdk/testing.ts + - src/sdk/sdk.ts + - .eslintrc.js + - .npmignore + - package-lock.json + - package.json + - src/index.ts + - src/lib/base64.ts + - src/lib/config.ts + - src/lib/encodings.ts + - src/lib/http.ts + - src/lib/retries.ts + - src/lib/sdks.ts + - src/lib/security.ts + - src/lib/url.ts + - src/sdk/index.ts + - src/models/errors/sdkerror.ts + - src/types/blobs.ts + - src/types/decimal.ts + - src/types/index.ts + - src/types/operations.ts + - src/types/rfcdate.ts + - tsconfig.json + - src/models/operations/accountget.ts + - src/models/operations/accountaddresscreate.ts + - src/models/operations/accountaddressedit.ts + - src/models/operations/accountaddressdelete.ts + - src/models/operations/accountaddpaymentmethod.ts + - src/models/operations/accountpaymentmethoddelete.ts + - src/models/operations/guestpaymentsinitialize.ts + - src/models/operations/guestpaymentsupdate.ts + - src/models/operations/guestpaymentsaction.ts + - src/models/operations/paymentsinitialize.ts + - src/models/operations/paymentsupdate.ts + - src/models/operations/paymentsaction.ts + - src/models/operations/oauthgettoken.ts + - src/models/operations/testingaccountcreate.ts + - src/models/operations/testingcreditcardget.ts + - src/models/components/account.ts + - src/models/components/profile.ts + - src/models/components/addresslisting.ts + - src/models/components/guestpaymentinitializerequest.ts + - src/models/components/cart.ts + - src/models/components/amount.ts + - src/models/components/cartitem.ts + - src/models/components/cartdiscount.ts + - src/models/components/cartshipment.ts + - src/models/components/profilecreationdata.ts + - src/models/components/paymentupdaterequest.ts + - src/models/components/paymentactionrequest.ts + - src/models/components/paymentinitializerequest.ts + - src/models/components/getaccesstokenresponse.ts + - src/models/components/getaccesstokenrequest.ts + - src/models/components/accounttestcreationdataoutput.ts + - src/models/components/testcreditcard.ts + - src/models/components/security.ts + - src/models/errors/index.ts + - src/models/operations/index.ts + - src/models/components/index.ts + - docs/models/operations/accountgetrequest.md + - docs/models/operations/accountgetresponse.md + - docs/models/operations/accountaddresscreaterequest.md + - docs/models/operations/accountaddresscreateresponse.md + - docs/models/operations/accountaddresseditrequest.md + - docs/models/operations/accountaddresseditresponse.md + - docs/models/operations/accountaddressdeleterequest.md + - docs/models/operations/accountaddressdeleteresponse.md + - docs/models/operations/accountaddpaymentmethodrequest.md + - docs/models/operations/accountaddpaymentmethodresponse.md + - docs/models/operations/accountpaymentmethoddeleterequest.md + - docs/models/operations/accountpaymentmethoddeleteresponse.md + - docs/models/operations/guestpaymentsinitializesecurity.md + - docs/models/operations/guestpaymentsinitializerequest.md + - docs/models/operations/guestpaymentsinitializeresponse.md + - docs/models/operations/guestpaymentsupdatesecurity.md + - docs/models/operations/guestpaymentsupdaterequest.md + - docs/models/operations/guestpaymentsupdateresponse.md + - docs/models/operations/guestpaymentsactionsecurity.md + - docs/models/operations/guestpaymentsactionrequest.md + - docs/models/operations/guestpaymentsactionresponse.md + - docs/models/operations/paymentsinitializerequest.md + - docs/models/operations/paymentsinitializeresponse.md + - docs/models/operations/paymentsupdaterequest.md + - docs/models/operations/paymentsupdateresponse.md + - docs/models/operations/paymentsactionrequest.md + - docs/models/operations/paymentsactionresponse.md + - docs/models/operations/oauthgettokenresponse.md + - docs/models/operations/testingaccountcreatesecurity.md + - docs/models/operations/testingaccountcreaterequest.md + - docs/models/operations/testingaccountcreateresponse.md + - docs/models/operations/testingcreditcardgetsecurity.md + - docs/models/operations/testingcreditcardgetresponse.md + - docs/models/components/account.md + - docs/models/components/profile.md + - docs/models/components/countrycode.md + - docs/models/components/addresslisting.md + - docs/models/components/addresslistinginput.md + - docs/models/components/guestpaymentinitializerequest.md + - docs/models/components/cart.md + - docs/models/components/currency.md + - docs/models/components/amount.md + - docs/models/components/cartitem.md + - docs/models/components/cartdiscount.md + - docs/models/components/cartshipment.md + - docs/models/components/profilecreationdata.md + - docs/models/components/paymentupdaterequest.md + - docs/models/components/dottag.md + - docs/models/components/paymentactionrequest.md + - docs/models/components/paymentinitializerequest.md + - docs/models/components/refreshtokenscope.md + - docs/models/components/getaccesstokenresponsescope.md + - docs/models/components/getaccesstokenresponse.md + - docs/models/components/granttype.md + - docs/models/components/scope.md + - docs/models/components/getaccesstokenrequest.md + - docs/models/components/emailstate.md + - docs/models/components/phonestate.md + - docs/models/components/accounttestcreationdataoutput.md + - docs/models/components/accounttestcreationdata.md + - docs/models/components/network.md + - docs/models/components/testcreditcard.md + - docs/models/components/security.md + - docs/sdks/bolttypescriptsdk/README.md + - docs/sdks/account/README.md + - docs/sdks/payments/README.md + - docs/sdks/guest/README.md + - docs/sdks/loggedin/README.md + - docs/sdks/oauth/README.md + - docs/sdks/testing/README.md + - USAGE.md + - .gitattributes diff --git a/README.md b/README.md index 4cca1fb..c55a456 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,6 @@ yarn add @boltpay/bolt-typescript-sdk ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { AccountGetRequest } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; async function run() { const sdk = new BoltTypescriptSDK({ @@ -45,13 +44,16 @@ async function run() { oauth: "Bearer ", }, }); - const xPublishableKey: string = "string"; + + const xPublishableKey = "string"; const res = await sdk.account.getDetails(xPublishableKey); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -68,7 +70,6 @@ run(); * [addAddress](docs/sdks/account/README.md#addaddress) - Add an address * [updateAddress](docs/sdks/account/README.md#updateaddress) - Edit an existing address * [deleteAddress](docs/sdks/account/README.md#deleteaddress) - Delete an existing address -* [detect](docs/sdks/account/README.md#detect) - Determine the existence of a Bolt account * [addPaymentMethod](docs/sdks/account/README.md#addpaymentmethod) - Add a payment method to a shopper's Bolt account Wallet. * [deletePaymentMethod](docs/sdks/account/README.md#deletepaymentmethod) - Delete an existing payment method @@ -98,18 +99,17 @@ run(); ## Error Handling -Handling errors in this SDK should largely match your expectations. All operations return a response object or throw an error. If Error objects are specified in your OpenAPI Spec, the SDK will throw the appropriate Error type. +All SDK methods return a response object or throw an error. If Error objects are specified in your OpenAPI Spec, the SDK will throw the appropriate Error type. -| Error Object | Status Code | Content Type | -| ---------------- | ---------------- | ---------------- | -| errors.ErrorT | 4XX | application/json | -| errors.SDKError | 400-600 | */* | +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4xx-5xx | */* | Example ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { AccountGetRequest } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; +import * as errors from "@boltpay/bolt-typescript-sdk/models/errors"; async function run() { const sdk = new BoltTypescriptSDK({ @@ -117,24 +117,18 @@ async function run() { oauth: "Bearer ", }, }); - const xPublishableKey: string = "string"; - - let res; - try { - res = await sdk.account.getDetails(xPublishableKey); - } catch (err) { - if (err instanceof errors.ErrorT) { - console.error(err); // handle exception - throw err; - } else if (err instanceof errors.SDKError) { - console.error(err); // handle exception - throw err; - } - } - if (res.statusCode == 200) { - // handle response + const xPublishableKey = "string"; + + const res = await sdk.account.getDetails(xPublishableKey).catch((err) => { + throw err; + }); + + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -153,31 +147,7 @@ You can override the default server globally by passing a server index to the `s | - | ------ | --------- | | 0 | `https://{environment}.bolt.com/v3` | `environment` (default is `api-sandbox`) | -#### Example - -```typescript -import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { AccountGetRequest } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; - -async function run() { - const sdk = new BoltTypescriptSDK({ - serverIdx: 0, - security: { - oauth: "Bearer ", - }, - }); - const xPublishableKey: string = "string"; - - const res = await sdk.account.getDetails(xPublishableKey); - if (res.statusCode == 200) { - // handle response - } -} - -run(); - -``` #### Variables @@ -187,47 +157,54 @@ Some of the server options above contain variables. If you want to set the value ### Override Server URL Per-Client The default server can also be overridden globally by passing a URL to the `serverURL: str` optional parameter when initializing the SDK client instance. For example: -```typescript -import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { AccountGetRequest } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; + -async function run() { - const sdk = new BoltTypescriptSDK({ - serverURL: "https://{environment}.bolt.com/v3", - security: { - oauth: "Bearer ", - }, - }); - const xPublishableKey: string = "string"; + +## Custom HTTP Client - const res = await sdk.account.getDetails(xPublishableKey); +The TypeScript SDK makes API calls using an `HTTPClient` that wraps the native +[Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API). This +client is a thin wrapper around `fetch` and provides the ability to attach hooks +around the request lifecycle that can be used to modify the request or handle +errors and response. - if (res.statusCode == 200) { - // handle response - } -} +The `HTTPClient` constructor takes an optional `fetcher` argument that can be +used to integrate a third-party HTTP client or when writing tests to mock out +the HTTP client and feed in fixtures. -run(); +The following example shows how to use the `"beforeRequest"` hook to to add a +custom header and a timeout to requests and how to use the `"requestError"` hook +to log errors: -``` - +```typescript +import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; +import { HTTPClient } from "@boltpay/bolt-typescript-sdk/lib/http"; - -## Custom HTTP Client +const httpClient = new HTTPClient({ + // fetcher takes a function that has the same signature as native `fetch`. + fetcher: (request) => { + return fetch(request); + } +}); -The Typescript SDK makes API calls using the [axios](https://axios-http.com/docs/intro) HTTP library. In order to provide a convenient way to configure timeouts, cookies, proxies, custom headers, and other low-level configuration, you can initialize the SDK client with a custom `AxiosInstance` object. +httpClient.addHook("beforeRequest", (request) => { + const nextRequest = new Request(request, { + signal: request.signal || AbortSignal.timeout(5000); + }); -For example, you could specify a header for every request that your sdk makes as follows: + nextRequest.headers.set("x-custom-header", "custom value"); -```typescript -import { @boltpay/bolt-typescript-sdk } from "BoltTypescriptSDK"; -import axios from "axios"; + return nextRequest; +}); -const httpClient = axios.create({ - headers: {'x-custom-header': 'someValue'} -}) +httpClient.addHook("requestError", (error, request) => { + console.group("Request Error"); + console.log("Reason:", `${error}`); + console.log("Endpoint:", `${request.method} ${request.url}`); + console.groupEnd(); +}); -const sdk = new BoltTypescriptSDK({defaultClient: httpClient}); +const sdk = new BoltTypescriptSDK({ httpClient }); ``` @@ -246,7 +223,6 @@ This SDK supports the following security schemes globally: You can set the security parameters through the `security` optional parameter when initializing the SDK client instance. The selected scheme will be used by default to authenticate with the API for all operations that support it. For example: ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { AccountGetRequest } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; async function run() { const sdk = new BoltTypescriptSDK({ @@ -254,13 +230,16 @@ async function run() { oauth: "Bearer ", }, }); - const xPublishableKey: string = "string"; + + const xPublishableKey = "string"; const res = await sdk.account.getDetails(xPublishableKey); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -272,25 +251,14 @@ run(); Some operations in this SDK require the security scheme to be specified at the request level. For example: ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { - Amount, - Cart, - CartDiscount, - CartItem, - CartShipment, - Currency, - GuestPaymentInitializeRequest, - ProfileCreationData, -} from "@boltpay/bolt-typescript-sdk/dist/models/components"; -import { - GuestPaymentsInitializeRequest, - GuestPaymentsInitializeSecurity, -} from "@boltpay/bolt-typescript-sdk/dist/models/operations"; +import { Currency } from "@boltpay/bolt-typescript-sdk/models/components"; +import { GuestPaymentsInitializeSecurity } from "@boltpay/bolt-typescript-sdk/models/operations"; async function run() { const sdk = new BoltTypescriptSDK(); - const xPublishableKey: string = "string"; - const guestPaymentInitializeRequest: GuestPaymentInitializeRequest = { + + const xPublishableKey = "string"; + const guestPaymentInitializeRequest = { profile: { createAccount: true, firstName: "Alice", @@ -355,9 +323,11 @@ async function run() { guestPaymentInitializeRequest ); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); diff --git a/RELEASES.md b/RELEASES.md index 7da39a8..14cbb7a 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -68,4 +68,14 @@ Based on: ### Generated - [typescript v0.3.0] . ### Releases -- [NPM v0.3.0] https://www.npmjs.com/package/@boltpay/bolt-typescript-sdk/v/0.3.0 - . \ No newline at end of file +- [NPM v0.3.0] https://www.npmjs.com/package/@boltpay/bolt-typescript-sdk/v/0.3.0 - . + +## 2024-01-10 00:06:18 +### Changes +Based on: +- OpenAPI Doc 3.0.1 +- Speakeasy CLI 1.134.1 (2.230.3) https://github.com/speakeasy-api/speakeasy +### Generated +- [typescript v0.4.0] . +### Releases +- [NPM v0.4.0] https://www.npmjs.com/package/@boltpay/bolt-typescript-sdk/v/0.4.0 - . \ No newline at end of file diff --git a/USAGE.md b/USAGE.md index 4cae58b..d570746 100644 --- a/USAGE.md +++ b/USAGE.md @@ -1,7 +1,6 @@ ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { AccountGetRequest } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; async function run() { const sdk = new BoltTypescriptSDK({ @@ -9,13 +8,16 @@ async function run() { oauth: "Bearer ", }, }); - const xPublishableKey: string = "string"; + + const xPublishableKey = "string"; const res = await sdk.account.getDetails(xPublishableKey); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); diff --git a/docs/models/components/accounttestcreationdata.md b/docs/models/components/accounttestcreationdata.md index 8a71762..3a7322e 100644 --- a/docs/models/components/accounttestcreationdata.md +++ b/docs/models/components/accounttestcreationdata.md @@ -8,4 +8,5 @@ | `emailState` | [components.EmailState](../../models/components/emailstate.md) | :heavy_check_mark: | N/A | unverified | | `phoneState` | [components.PhoneState](../../models/components/phonestate.md) | :heavy_check_mark: | N/A | verified | | `isMigrated` | *boolean* | :heavy_minus_sign: | N/A | true | -| `hasAddress` | *boolean* | :heavy_minus_sign: | N/A | true | \ No newline at end of file +| `hasAddress` | *boolean* | :heavy_minus_sign: | N/A | true | +| `hasCreditCard` | *boolean* | :heavy_minus_sign: | N/A | true | \ No newline at end of file diff --git a/docs/models/components/addresslisting.md b/docs/models/components/addresslisting.md index ad7d7cc..5fc8d23 100644 --- a/docs/models/components/addresslisting.md +++ b/docs/models/components/addresslisting.md @@ -1,6 +1,6 @@ # AddressListing -A physical address. +An address saved on an account, i.e. a physical address plus any additional account-specific metadata. ## Fields diff --git a/docs/models/components/addresslistinginput.md b/docs/models/components/addresslistinginput.md index 4fde71e..b78b5ac 100644 --- a/docs/models/components/addresslistinginput.md +++ b/docs/models/components/addresslistinginput.md @@ -1,6 +1,6 @@ # AddressListingInput -A physical address. +An address saved on an account, i.e. a physical address plus any additional account-specific metadata. ## Fields diff --git a/docs/models/components/identifier.md b/docs/models/components/identifier.md deleted file mode 100644 index 826eb81..0000000 --- a/docs/models/components/identifier.md +++ /dev/null @@ -1,9 +0,0 @@ -# Identifier - - -## Fields - -| Field | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | -| `identifierType` | [components.IdentifierType](../../models/components/identifiertype.md) | :heavy_check_mark: | The type of identifier | email | -| `identifierValue` | *string* | :heavy_check_mark: | The value of the identifier. The value must be valid for the specified `identifier_type` | alice@example.com | \ No newline at end of file diff --git a/docs/models/components/identifiertype.md b/docs/models/components/identifiertype.md deleted file mode 100644 index e3150d3..0000000 --- a/docs/models/components/identifiertype.md +++ /dev/null @@ -1,11 +0,0 @@ -# IdentifierType - -The type of identifier - - -## Values - -| Name | Value | -| ------------- | ------------- | -| `Email` | email | -| `EmailSha256` | email_sha256 | \ No newline at end of file diff --git a/docs/models/errors/dottag.md b/docs/models/errors/dottag.md deleted file mode 100644 index 23a788f..0000000 --- a/docs/models/errors/dottag.md +++ /dev/null @@ -1,13 +0,0 @@ -# DotTag - -The type of error returned - - -## Values - -| Name | Value | -| ----------------------- | ----------------------- | -| `UnprocessableRequest` | unprocessable_request | -| `MissingInputParameter` | missing_input_parameter | -| `InvalidInputParameter` | invalid_input_parameter | -| `NotFound` | not_found | \ No newline at end of file diff --git a/docs/models/errors/errort.md b/docs/models/errors/errort.md deleted file mode 100644 index 376dd4c..0000000 --- a/docs/models/errors/errort.md +++ /dev/null @@ -1,11 +0,0 @@ -# ErrorT - -An error has occurred, and further details are contained in the response - - -## Fields - -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | -| `dotTag` | [errors.DotTag](../../models/errors/dottag.md) | :heavy_check_mark: | The type of error returned | unprocessable_request | -| `message` | *string* | :heavy_check_mark: | A human-readable error message, which might include information specific to
the request that was made.
| We were unable to process your request. | \ No newline at end of file diff --git a/docs/models/operations/accountaddpaymentmethodresponse.md b/docs/models/operations/accountaddpaymentmethodresponse.md index 4ddf36a..92eafdc 100644 --- a/docs/models/operations/accountaddpaymentmethodresponse.md +++ b/docs/models/operations/accountaddpaymentmethodresponse.md @@ -3,9 +3,9 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | -| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | -| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | -| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | -| `paymentMethod` | *any* | :heavy_minus_sign: | The payment method was successfully added | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `paymentMethod` | *any* | :heavy_minus_sign: | The payment method was successfully added | \ No newline at end of file diff --git a/docs/models/operations/accountaddresscreateresponse.md b/docs/models/operations/accountaddresscreateresponse.md index 7dd5f85..56b424b 100644 --- a/docs/models/operations/accountaddresscreateresponse.md +++ b/docs/models/operations/accountaddresscreateresponse.md @@ -7,5 +7,5 @@ | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | | `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | | `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | -| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `rawResponse` | [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | | `addressListing` | [components.AddressListing](../../models/components/addresslisting.md) | :heavy_minus_sign: | The address was successfully added | \ No newline at end of file diff --git a/docs/models/operations/accountaddressdeleteresponse.md b/docs/models/operations/accountaddressdeleteresponse.md index ae9908c..7180e7f 100644 --- a/docs/models/operations/accountaddressdeleteresponse.md +++ b/docs/models/operations/accountaddressdeleteresponse.md @@ -3,8 +3,8 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | -| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | -| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | -| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/accountaddresseditresponse.md b/docs/models/operations/accountaddresseditresponse.md index 79b52a9..50ea08e 100644 --- a/docs/models/operations/accountaddresseditresponse.md +++ b/docs/models/operations/accountaddresseditresponse.md @@ -7,5 +7,5 @@ | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | | `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | | `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | -| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `rawResponse` | [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | | `addressListing` | [components.AddressListing](../../models/components/addresslisting.md) | :heavy_minus_sign: | The address was successfully edited | \ No newline at end of file diff --git a/docs/models/operations/accountexistsrequest.md b/docs/models/operations/accountexistsrequest.md deleted file mode 100644 index 5cb0b96..0000000 --- a/docs/models/operations/accountexistsrequest.md +++ /dev/null @@ -1,9 +0,0 @@ -# AccountExistsRequest - - -## Fields - -| Field | Type | Required | Description | -| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `identifier` | [components.Identifier](../../models/components/identifier.md) | :heavy_check_mark: | A type and value combination that defines the identifier used to detect
the existence of an account.
| -| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | \ No newline at end of file diff --git a/docs/models/operations/accountexistsresponse.md b/docs/models/operations/accountexistsresponse.md deleted file mode 100644 index b61aeaa..0000000 --- a/docs/models/operations/accountexistsresponse.md +++ /dev/null @@ -1,10 +0,0 @@ -# AccountExistsResponse - - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | -| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | -| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | -| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/accountgetresponse.md b/docs/models/operations/accountgetresponse.md index 9882ed4..3086880 100644 --- a/docs/models/operations/accountgetresponse.md +++ b/docs/models/operations/accountgetresponse.md @@ -3,9 +3,9 @@ ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | -| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | -| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | -| `account` | [components.Account](../../models/components/account.md) | :heavy_minus_sign: | The account details were successfully retrieved | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `account` | [components.Account](../../models/components/account.md) | :heavy_minus_sign: | The account details were successfully retrieved | \ No newline at end of file diff --git a/docs/models/operations/accountpaymentmethoddeleteresponse.md b/docs/models/operations/accountpaymentmethoddeleteresponse.md index 29d4591..aa243b9 100644 --- a/docs/models/operations/accountpaymentmethoddeleteresponse.md +++ b/docs/models/operations/accountpaymentmethoddeleteresponse.md @@ -3,8 +3,8 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | -| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | -| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | -| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/guestpaymentsactionresponse.md b/docs/models/operations/guestpaymentsactionresponse.md index d4c9f32..9c2eec6 100644 --- a/docs/models/operations/guestpaymentsactionresponse.md +++ b/docs/models/operations/guestpaymentsactionresponse.md @@ -3,9 +3,9 @@ ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | -| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | -| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | -| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | -| `paymentResponse` | *any* | :heavy_minus_sign: | The action was successfully applied to the pending guest payment | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `paymentResponse` | *any* | :heavy_minus_sign: | The action was successfully applied to the pending guest payment | \ No newline at end of file diff --git a/docs/models/operations/guestpaymentsinitializeresponse.md b/docs/models/operations/guestpaymentsinitializeresponse.md index d7ea483..1a1bcd4 100644 --- a/docs/models/operations/guestpaymentsinitializeresponse.md +++ b/docs/models/operations/guestpaymentsinitializeresponse.md @@ -7,5 +7,5 @@ | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | | `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | | `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | -| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `rawResponse` | [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | | `paymentResponse` | *any* | :heavy_minus_sign: | The payment was successfully initialized, and was either immediately finalized or is pending | \ No newline at end of file diff --git a/docs/models/operations/guestpaymentsupdateresponse.md b/docs/models/operations/guestpaymentsupdateresponse.md index 1ab0b69..292c03e 100644 --- a/docs/models/operations/guestpaymentsupdateresponse.md +++ b/docs/models/operations/guestpaymentsupdateresponse.md @@ -3,9 +3,9 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | -| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | -| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | -| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | -| `paymentResponse` | *any* | :heavy_minus_sign: | The pending payment was successfully updated | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `paymentResponse` | *any* | :heavy_minus_sign: | The pending payment was successfully updated | \ No newline at end of file diff --git a/docs/models/operations/oauthgettokenresponse.md b/docs/models/operations/oauthgettokenresponse.md index caa5581..3b43377 100644 --- a/docs/models/operations/oauthgettokenresponse.md +++ b/docs/models/operations/oauthgettokenresponse.md @@ -7,5 +7,5 @@ | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | | `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | | `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | -| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `rawResponse` | [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | | `getAccessTokenResponse` | [components.GetAccessTokenResponse](../../models/components/getaccesstokenresponse.md) | :heavy_minus_sign: | Access token is successfully fetched | \ No newline at end of file diff --git a/docs/models/operations/paymentsactionresponse.md b/docs/models/operations/paymentsactionresponse.md index 1dae658..734ce73 100644 --- a/docs/models/operations/paymentsactionresponse.md +++ b/docs/models/operations/paymentsactionresponse.md @@ -3,9 +3,9 @@ ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | -| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | -| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | -| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | -| `paymentResponse` | *any* | :heavy_minus_sign: | The action was successfully applied to the pending payment | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `paymentResponse` | *any* | :heavy_minus_sign: | The action was successfully applied to the pending payment | \ No newline at end of file diff --git a/docs/models/operations/paymentsinitializeresponse.md b/docs/models/operations/paymentsinitializeresponse.md index 1b2c39c..d85413f 100644 --- a/docs/models/operations/paymentsinitializeresponse.md +++ b/docs/models/operations/paymentsinitializeresponse.md @@ -7,5 +7,5 @@ | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | | `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | | `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | -| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `rawResponse` | [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | | `paymentResponse` | *any* | :heavy_minus_sign: | The payment was successfully initialized, and was either immediately finalized or is pending | \ No newline at end of file diff --git a/docs/models/operations/paymentsupdateresponse.md b/docs/models/operations/paymentsupdateresponse.md index a217762..9606c59 100644 --- a/docs/models/operations/paymentsupdateresponse.md +++ b/docs/models/operations/paymentsupdateresponse.md @@ -3,9 +3,9 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | -| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | -| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | -| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | -| `paymentResponse` | *any* | :heavy_minus_sign: | The pending payment was successfully updated | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | +| `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | +| `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | +| `rawResponse` | [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `paymentResponse` | *any* | :heavy_minus_sign: | The pending payment was successfully updated | \ No newline at end of file diff --git a/docs/models/operations/testingaccountcreateresponse.md b/docs/models/operations/testingaccountcreateresponse.md index 0bdb569..4049b73 100644 --- a/docs/models/operations/testingaccountcreateresponse.md +++ b/docs/models/operations/testingaccountcreateresponse.md @@ -7,5 +7,5 @@ | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | | `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | | `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | -| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `rawResponse` | [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | | `accountTestCreationData` | [components.AccountTestCreationDataOutput](../../models/components/accounttestcreationdataoutput.md) | :heavy_minus_sign: | The account was successfully created | \ No newline at end of file diff --git a/docs/models/operations/testingcreditcardgetresponse.md b/docs/models/operations/testingcreditcardgetresponse.md index ea8105a..789a211 100644 --- a/docs/models/operations/testingcreditcardgetresponse.md +++ b/docs/models/operations/testingcreditcardgetresponse.md @@ -7,5 +7,5 @@ | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | | `contentType` | *string* | :heavy_check_mark: | HTTP response content type for this operation | | `statusCode` | *number* | :heavy_check_mark: | HTTP response status code for this operation | -| `rawResponse` | [AxiosResponse](https://axios-http.com/docs/res_schema) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `rawResponse` | [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | | `testCreditCard` | [components.TestCreditCard](../../models/components/testcreditcard.md) | :heavy_minus_sign: | Successfully generated test credit card details | \ No newline at end of file diff --git a/docs/sdks/account/README.md b/docs/sdks/account/README.md index 91171e9..103dba6 100644 --- a/docs/sdks/account/README.md +++ b/docs/sdks/account/README.md @@ -13,7 +13,6 @@ you can add or remove addresses and payment information. * [addAddress](#addaddress) - Add an address * [updateAddress](#updateaddress) - Edit an existing address * [deleteAddress](#deleteaddress) - Delete an existing address -* [detect](#detect) - Determine the existence of a Bolt account * [addPaymentMethod](#addpaymentmethod) - Add a payment method to a shopper's Bolt account Wallet. * [deletePaymentMethod](#deletepaymentmethod) - Delete an existing payment method @@ -25,7 +24,6 @@ Retrieve a shopper's account details, such as addresses and payment information ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { AccountGetRequest } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; async function run() { const sdk = new BoltTypescriptSDK({ @@ -33,13 +31,16 @@ async function run() { oauth: "Bearer ", }, }); -const xPublishableKey: string = "string"; + const xPublishableKey = "string"; + const res = await sdk.account.getDetails(xPublishableKey); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -47,10 +48,11 @@ run(); ### Parameters -| Parameter | Type | Required | Description | -| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | -| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | ### Response @@ -58,10 +60,9 @@ run(); **Promise<[operations.AccountGetResponse](../../models/operations/accountgetresponse.md)>** ### Errors -| Error Object | Status Code | Content Type | -| ---------------- | ---------------- | ---------------- | -| errors.ErrorT | 4XX | application/json | -| errors.SDKError | 400-600 | */* | +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4xx-5xx | */* | ## addAddress @@ -71,8 +72,7 @@ Add an address to the shopper's account ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { AddressListingInput, CountryCode } from "@boltpay/bolt-typescript-sdk/dist/models/components"; -import { AccountAddressCreateRequest } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; +import { CountryCode } from "@boltpay/bolt-typescript-sdk/models/components"; async function run() { const sdk = new BoltTypescriptSDK({ @@ -80,27 +80,30 @@ async function run() { oauth: "Bearer ", }, }); -const xPublishableKey: string = "string"; -const addressListing: AddressListingInput = { - firstName: "Alice", - lastName: "Baker", - company: "ACME Corporation", - streetAddress1: "535 Mission St, Ste 1401", - streetAddress2: "c/o Shipping Department", - locality: "San Francisco", - postalCode: "94105", - region: "CA", - countryCode: CountryCode.Us, - email: "alice@example.com", - phone: "+14155550199", - isDefault: true, -}; + const xPublishableKey = "string"; + const addressListing = { + firstName: "Alice", + lastName: "Baker", + company: "ACME Corporation", + streetAddress1: "535 Mission St, Ste 1401", + streetAddress2: "c/o Shipping Department", + locality: "San Francisco", + postalCode: "94105", + region: "CA", + countryCode: CountryCode.Us, + email: "alice@example.com", + phone: "+14155550199", + isDefault: true, + }; + const res = await sdk.account.addAddress(xPublishableKey, addressListing); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -108,11 +111,12 @@ run(); ### Parameters -| Parameter | Type | Required | Description | -| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | -| `addressListing` | [components.AddressListingInput](../../models/components/addresslistinginput.md) | :heavy_check_mark: | N/A | -| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | +| `addressListing` | [components.AddressListingInput](../../models/components/addresslistinginput.md) | :heavy_check_mark: | N/A | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | ### Response @@ -122,7 +126,7 @@ run(); | Error Object | Status Code | Content Type | | --------------- | --------------- | --------------- | -| errors.SDKError | 400-600 | */* | +| errors.SDKError | 4xx-5xx | */* | ## updateAddress @@ -135,8 +139,7 @@ shipments. ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { AddressListingInput, CountryCode } from "@boltpay/bolt-typescript-sdk/dist/models/components"; -import { AccountAddressEditRequest } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; +import { CountryCode } from "@boltpay/bolt-typescript-sdk/models/components"; async function run() { const sdk = new BoltTypescriptSDK({ @@ -144,28 +147,31 @@ async function run() { oauth: "Bearer ", }, }); -const id: string = "D4g3h5tBuVYK9"; -const xPublishableKey: string = "string"; -const addressListing: AddressListingInput = { - firstName: "Alice", - lastName: "Baker", - company: "ACME Corporation", - streetAddress1: "535 Mission St, Ste 1401", - streetAddress2: "c/o Shipping Department", - locality: "San Francisco", - postalCode: "94105", - region: "CA", - countryCode: CountryCode.Us, - email: "alice@example.com", - phone: "+14155550199", - isDefault: true, -}; + const id = "D4g3h5tBuVYK9"; + const xPublishableKey = "string"; + const addressListing = { + firstName: "Alice", + lastName: "Baker", + company: "ACME Corporation", + streetAddress1: "535 Mission St, Ste 1401", + streetAddress2: "c/o Shipping Department", + locality: "San Francisco", + postalCode: "94105", + region: "CA", + countryCode: CountryCode.Us, + email: "alice@example.com", + phone: "+14155550199", + isDefault: true, + }; + const res = await sdk.account.updateAddress(id, xPublishableKey, addressListing); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -173,12 +179,13 @@ run(); ### Parameters -| Parameter | Type | Required | Description | Example | -| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -| `id` | *string* | :heavy_check_mark: | The ID of the address to edit | D4g3h5tBuVYK9 | -| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | | -| `addressListing` | [components.AddressListingInput](../../models/components/addresslistinginput.md) | :heavy_check_mark: | N/A | | -| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | | +| Parameter | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `id` | *string* | :heavy_check_mark: | The ID of the address to edit | [object Object] | +| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | | +| `addressListing` | [components.AddressListingInput](../../models/components/addresslistinginput.md) | :heavy_check_mark: | N/A | | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | | ### Response @@ -188,7 +195,7 @@ run(); | Error Object | Status Code | Content Type | | --------------- | --------------- | --------------- | -| errors.SDKError | 400-600 | */* | +| errors.SDKError | 4xx-5xx | */* | ## deleteAddress @@ -200,7 +207,6 @@ shipments that are associated with it. ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { AccountAddressDeleteRequest } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; async function run() { const sdk = new BoltTypescriptSDK({ @@ -208,14 +214,17 @@ async function run() { oauth: "Bearer ", }, }); -const id: string = "D4g3h5tBuVYK9"; -const xPublishableKey: string = "string"; + const id = "D4g3h5tBuVYK9"; + const xPublishableKey = "string"; + const res = await sdk.account.deleteAddress(id, xPublishableKey); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -223,11 +232,12 @@ run(); ### Parameters -| Parameter | Type | Required | Description | Example | -| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `id` | *string* | :heavy_check_mark: | The ID of the address to delete | D4g3h5tBuVYK9 | -| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | | -| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | | +| Parameter | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `id` | *string* | :heavy_check_mark: | The ID of the address to delete | [object Object] | +| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | | ### Response @@ -235,62 +245,9 @@ run(); **Promise<[operations.AccountAddressDeleteResponse](../../models/operations/accountaddressdeleteresponse.md)>** ### Errors -| Error Object | Status Code | Content Type | -| ---------------- | ---------------- | ---------------- | -| errors.ErrorT | 4XX | application/json | -| errors.SDKError | 400-600 | */* | - -## detect - -Determine whether or not an identifier is associated with an existing Bolt account. - -### Example Usage - -```typescript -import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { Identifier, IdentifierType } from "@boltpay/bolt-typescript-sdk/dist/models/components"; -import { AccountExistsRequest } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; - -async function run() { - const sdk = new BoltTypescriptSDK({ - security: { - oauth: "Bearer ", - }, - }); -const identifier: Identifier = { - identifierType: IdentifierType.Email, - identifierValue: "alice@example.com", -}; -const xPublishableKey: string = "string"; - - const res = await sdk.account.detect(identifier, xPublishableKey); - - if (res.statusCode == 200) { - // handle response - } -} - -run(); -``` - -### Parameters - -| Parameter | Type | Required | Description | -| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | -| `identifier` | [components.Identifier](../../models/components/identifier.md) | :heavy_check_mark: | A type and value combination that defines the identifier used to detect
the existence of an account.
| -| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | -| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | - - -### Response - -**Promise<[operations.AccountExistsResponse](../../models/operations/accountexistsresponse.md)>** -### Errors - -| Error Object | Status Code | Content Type | -| ---------------- | ---------------- | ---------------- | -| errors.ErrorT | 4XX | application/json | -| errors.SDKError | 400-600 | */* | +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4xx-5xx | */* | ## addPaymentMethod @@ -304,7 +261,6 @@ which is documented in [Install the Bolt Tokenizer](https://help.bolt.com/develo ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { AccountAddPaymentMethodRequest } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; async function run() { const sdk = new BoltTypescriptSDK({ @@ -312,14 +268,17 @@ async function run() { oauth: "Bearer ", }, }); -const xPublishableKey: string = "string"; -const requestBody: any = "string"; + const xPublishableKey = "string"; + const requestBody = "string"; + const res = await sdk.account.addPaymentMethod(xPublishableKey, requestBody); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -327,11 +286,12 @@ run(); ### Parameters -| Parameter | Type | Required | Description | -| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | -| `requestBody` | *any* | :heavy_check_mark: | N/A | -| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | +| `requestBody` | *any* | :heavy_check_mark: | N/A | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | ### Response @@ -341,7 +301,7 @@ run(); | Error Object | Status Code | Content Type | | --------------- | --------------- | --------------- | -| errors.SDKError | 400-600 | */* | +| errors.SDKError | 4xx-5xx | */* | ## deletePaymentMethod @@ -353,7 +313,6 @@ orders that are associated with it. ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { AccountPaymentMethodDeleteRequest } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; async function run() { const sdk = new BoltTypescriptSDK({ @@ -361,14 +320,17 @@ async function run() { oauth: "Bearer ", }, }); -const id: string = "D4g3h5tBuVYK9"; -const xPublishableKey: string = "string"; + const id = "D4g3h5tBuVYK9"; + const xPublishableKey = "string"; + const res = await sdk.account.deletePaymentMethod(id, xPublishableKey); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -376,11 +338,12 @@ run(); ### Parameters -| Parameter | Type | Required | Description | Example | -| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `id` | *string* | :heavy_check_mark: | The ID of the payment method to delete | D4g3h5tBuVYK9 | -| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | | -| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | | +| Parameter | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `id` | *string* | :heavy_check_mark: | The ID of the payment method to delete | [object Object] | +| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | | ### Response @@ -388,7 +351,6 @@ run(); **Promise<[operations.AccountPaymentMethodDeleteResponse](../../models/operations/accountpaymentmethoddeleteresponse.md)>** ### Errors -| Error Object | Status Code | Content Type | -| ---------------- | ---------------- | ---------------- | -| errors.ErrorT | 4XX | application/json | -| errors.SDKError | 400-600 | */* | +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4xx-5xx | */* | diff --git a/docs/sdks/guest/README.md b/docs/sdks/guest/README.md index 4d3e304..1a7da21 100644 --- a/docs/sdks/guest/README.md +++ b/docs/sdks/guest/README.md @@ -17,85 +17,79 @@ Bolt when it is updated or finalized for guest shoppers. ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { - Amount, - Cart, - CartDiscount, - CartItem, - CartShipment, - Currency, - GuestPaymentInitializeRequest, - ProfileCreationData, -} from "@boltpay/bolt-typescript-sdk/dist/models/components"; -import { GuestPaymentsInitializeRequest, GuestPaymentsInitializeSecurity } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; +import { Currency } from "@boltpay/bolt-typescript-sdk/models/components"; +import { GuestPaymentsInitializeSecurity } from "@boltpay/bolt-typescript-sdk/models/operations"; async function run() { const sdk = new BoltTypescriptSDK(); -const xPublishableKey: string = "string"; -const guestPaymentInitializeRequest: GuestPaymentInitializeRequest = { - profile: { - createAccount: true, - firstName: "Alice", - lastName: "Baker", - email: "alice@example.com", - phone: "+14155550199", - }, - cart: { - orderReference: "order_100", - orderDescription: "Order #1234567890", - displayId: "215614191", - shipments: [ - { - address: "string", - cost: { - currency: Currency.Usd, - units: 900, + + const xPublishableKey = "string"; + const guestPaymentInitializeRequest = { + profile: { + createAccount: true, + firstName: "Alice", + lastName: "Baker", + email: "alice@example.com", + phone: "+14155550199", + }, + cart: { + orderReference: "order_100", + orderDescription: "Order #1234567890", + displayId: "215614191", + shipments: [ + { + address: "string", + cost: { + currency: Currency.Usd, + units: 900, + }, + carrier: "FedEx", }, - carrier: "FedEx", - }, - ], - discounts: [ - { - amount: { - currency: Currency.Usd, - units: 900, + ], + discounts: [ + { + amount: { + currency: Currency.Usd, + units: 900, + }, + code: "SUMMER10DISCOUNT", + detailsUrl: "https://www.example.com/SUMMER-SALE", }, - code: "SUMMER10DISCOUNT", - detailsUrl: "https://www.example.com/SUMMER-SALE", - }, - ], - items: [ - { - name: "Bolt Swag Bag", - reference: "item_100", - description: "Large tote with Bolt logo.", - totalAmount: { - currency: Currency.Usd, - units: 900, + ], + items: [ + { + name: "Bolt Swag Bag", + reference: "item_100", + description: "Large tote with Bolt logo.", + totalAmount: { + currency: Currency.Usd, + units: 900, + }, + unitPrice: 1000, + quantity: 1, + imageUrl: "https://www.example.com/products/123456/images/1.png", }, - unitPrice: 1000, - quantity: 1, - imageUrl: "https://www.example.com/products/123456/images/1.png", + ], + total: { + currency: Currency.Usd, + units: 900, + }, + tax: { + currency: Currency.Usd, + units: 900, }, - ], - total: { - currency: Currency.Usd, - units: 900, - }, - tax: { - currency: Currency.Usd, - units: 900, }, - }, - paymentMethod: "string", -}; -const operationSecurity: GuestPaymentsInitializeSecurity = ""; - + paymentMethod: "string", + }; + const operationSecurity: GuestPaymentsInitializeSecurity = ""; + const res = await sdk.payments.guest.initialize(operationSecurity, xPublishableKey, guestPaymentInitializeRequest); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -103,12 +97,13 @@ run(); ### Parameters -| Parameter | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -| `security` | [operations.GuestPaymentsInitializeSecurity](../../models/operations/guestpaymentsinitializesecurity.md) | :heavy_check_mark: | The security requirements to use for the request. | -| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | -| `guestPaymentInitializeRequest` | [components.GuestPaymentInitializeRequest](../../models/components/guestpaymentinitializerequest.md) | :heavy_check_mark: | N/A | -| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `security` | [operations.GuestPaymentsInitializeSecurity](../../models/operations/guestpaymentsinitializesecurity.md) | :heavy_check_mark: | The security requirements to use for the request. | +| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | +| `guestPaymentInitializeRequest` | [components.GuestPaymentInitializeRequest](../../models/components/guestpaymentinitializerequest.md) | :heavy_check_mark: | N/A | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | ### Response @@ -116,10 +111,9 @@ run(); **Promise<[operations.GuestPaymentsInitializeResponse](../../models/operations/guestpaymentsinitializeresponse.md)>** ### Errors -| Error Object | Status Code | Content Type | -| ---------------- | ---------------- | ---------------- | -| errors.ErrorT | 4XX | application/json | -| errors.SDKError | 400-600 | */* | +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4xx-5xx | */* | ## update @@ -130,77 +124,72 @@ Update a pending guest payment ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { - Amount, - Cart, - CartDiscount, - CartItem, - CartShipment, - Currency, - PaymentUpdateRequest, -} from "@boltpay/bolt-typescript-sdk/dist/models/components"; -import { GuestPaymentsUpdateRequest, GuestPaymentsUpdateSecurity } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; +import { Currency } from "@boltpay/bolt-typescript-sdk/models/components"; +import { GuestPaymentsUpdateSecurity } from "@boltpay/bolt-typescript-sdk/models/operations"; async function run() { const sdk = new BoltTypescriptSDK(); -const id: string = "iKv7t5bgt1gg"; -const xPublishableKey: string = "string"; -const paymentUpdateRequest: PaymentUpdateRequest = { - cart: { - orderReference: "order_100", - orderDescription: "Order #1234567890", - displayId: "215614191", - shipments: [ - { - address: "string", - cost: { - currency: Currency.Usd, - units: 900, + + const id = "iKv7t5bgt1gg"; + const xPublishableKey = "string"; + const paymentUpdateRequest = { + cart: { + orderReference: "order_100", + orderDescription: "Order #1234567890", + displayId: "215614191", + shipments: [ + { + address: "string", + cost: { + currency: Currency.Usd, + units: 900, + }, + carrier: "FedEx", }, - carrier: "FedEx", - }, - ], - discounts: [ - { - amount: { - currency: Currency.Usd, - units: 900, + ], + discounts: [ + { + amount: { + currency: Currency.Usd, + units: 900, + }, + code: "SUMMER10DISCOUNT", + detailsUrl: "https://www.example.com/SUMMER-SALE", }, - code: "SUMMER10DISCOUNT", - detailsUrl: "https://www.example.com/SUMMER-SALE", - }, - ], - items: [ - { - name: "Bolt Swag Bag", - reference: "item_100", - description: "Large tote with Bolt logo.", - totalAmount: { - currency: Currency.Usd, - units: 900, + ], + items: [ + { + name: "Bolt Swag Bag", + reference: "item_100", + description: "Large tote with Bolt logo.", + totalAmount: { + currency: Currency.Usd, + units: 900, + }, + unitPrice: 1000, + quantity: 1, + imageUrl: "https://www.example.com/products/123456/images/1.png", }, - unitPrice: 1000, - quantity: 1, - imageUrl: "https://www.example.com/products/123456/images/1.png", + ], + total: { + currency: Currency.Usd, + units: 900, + }, + tax: { + currency: Currency.Usd, + units: 900, }, - ], - total: { - currency: Currency.Usd, - units: 900, - }, - tax: { - currency: Currency.Usd, - units: 900, }, - }, -}; -const operationSecurity: GuestPaymentsUpdateSecurity = ""; - + }; + const operationSecurity: GuestPaymentsUpdateSecurity = ""; + const res = await sdk.payments.guest.update(operationSecurity, id, xPublishableKey, paymentUpdateRequest); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -208,13 +197,14 @@ run(); ### Parameters -| Parameter | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | -| `security` | [operations.GuestPaymentsUpdateSecurity](../../models/operations/guestpaymentsupdatesecurity.md) | :heavy_check_mark: | The security requirements to use for the request. | | -| `id` | *string* | :heavy_check_mark: | The ID of the guest payment to update | iKv7t5bgt1gg | -| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | | -| `paymentUpdateRequest` | [components.PaymentUpdateRequest](../../models/components/paymentupdaterequest.md) | :heavy_check_mark: | N/A | | -| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | | +| Parameter | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `security` | [operations.GuestPaymentsUpdateSecurity](../../models/operations/guestpaymentsupdatesecurity.md) | :heavy_check_mark: | The security requirements to use for the request. | | +| `id` | *string* | :heavy_check_mark: | The ID of the guest payment to update | [object Object] | +| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | | +| `paymentUpdateRequest` | [components.PaymentUpdateRequest](../../models/components/paymentupdaterequest.md) | :heavy_check_mark: | N/A | | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | | ### Response @@ -222,10 +212,9 @@ run(); **Promise<[operations.GuestPaymentsUpdateResponse](../../models/operations/guestpaymentsupdateresponse.md)>** ### Errors -| Error Object | Status Code | Content Type | -| ---------------- | ---------------- | ---------------- | -| errors.ErrorT | 4XX | application/json | -| errors.SDKError | 400-600 | */* | +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4xx-5xx | */* | ## performAction @@ -236,24 +225,27 @@ Perform an irreversible action on a pending guest payment, such as finalizing it ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { DotTag, PaymentActionRequest } from "@boltpay/bolt-typescript-sdk/dist/models/components"; -import { GuestPaymentsActionRequest, GuestPaymentsActionSecurity } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; +import { DotTag } from "@boltpay/bolt-typescript-sdk/models/components"; +import { GuestPaymentsActionSecurity } from "@boltpay/bolt-typescript-sdk/models/operations"; async function run() { const sdk = new BoltTypescriptSDK(); -const id: string = "iKv7t5bgt1gg"; -const xPublishableKey: string = "string"; -const paymentActionRequest: PaymentActionRequest = { - dotTag: DotTag.Finalize, - redirectResult: "eyJ0cmFuc", -}; -const operationSecurity: GuestPaymentsActionSecurity = ""; + const id = "iKv7t5bgt1gg"; + const xPublishableKey = "string"; + const paymentActionRequest = { + dotTag: DotTag.Finalize, + redirectResult: "eyJ0cmFuc", + }; + const operationSecurity: GuestPaymentsActionSecurity = ""; + const res = await sdk.payments.guest.performAction(operationSecurity, id, xPublishableKey, paymentActionRequest); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -261,13 +253,14 @@ run(); ### Parameters -| Parameter | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | -| `security` | [operations.GuestPaymentsActionSecurity](../../models/operations/guestpaymentsactionsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. | | -| `id` | *string* | :heavy_check_mark: | The ID of the guest payment to operate on | iKv7t5bgt1gg | -| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | | -| `paymentActionRequest` | [components.PaymentActionRequest](../../models/components/paymentactionrequest.md) | :heavy_check_mark: | N/A | | -| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | | +| Parameter | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `security` | [operations.GuestPaymentsActionSecurity](../../models/operations/guestpaymentsactionsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. | | +| `id` | *string* | :heavy_check_mark: | The ID of the guest payment to operate on | [object Object] | +| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | | +| `paymentActionRequest` | [components.PaymentActionRequest](../../models/components/paymentactionrequest.md) | :heavy_check_mark: | N/A | | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | | ### Response @@ -275,7 +268,6 @@ run(); **Promise<[operations.GuestPaymentsActionResponse](../../models/operations/guestpaymentsactionresponse.md)>** ### Errors -| Error Object | Status Code | Content Type | -| ---------------- | ---------------- | ---------------- | -| errors.ErrorT | 4XX | application/json | -| errors.SDKError | 400-600 | */* | +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4xx-5xx | */* | diff --git a/docs/sdks/loggedin/README.md b/docs/sdks/loggedin/README.md index 18498bd..51b2bf2 100644 --- a/docs/sdks/loggedin/README.md +++ b/docs/sdks/loggedin/README.md @@ -17,16 +17,7 @@ Bolt when it is updated or finalized for logged in shoppers. ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { - Amount, - Cart, - CartDiscount, - CartItem, - CartShipment, - Currency, - PaymentInitializeRequest, -} from "@boltpay/bolt-typescript-sdk/dist/models/components"; -import { PaymentsInitializeRequest } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; +import { Currency } from "@boltpay/bolt-typescript-sdk/models/components"; async function run() { const sdk = new BoltTypescriptSDK({ @@ -34,63 +25,66 @@ async function run() { oauth: "Bearer ", }, }); -const xPublishableKey: string = "string"; -const paymentInitializeRequest: PaymentInitializeRequest = { - cart: { - orderReference: "order_100", - orderDescription: "Order #1234567890", - displayId: "215614191", - shipments: [ - { - address: "string", - cost: { - currency: Currency.Usd, - units: 900, + + const xPublishableKey = "string"; + const paymentInitializeRequest = { + cart: { + orderReference: "order_100", + orderDescription: "Order #1234567890", + displayId: "215614191", + shipments: [ + { + address: "string", + cost: { + currency: Currency.Usd, + units: 900, + }, + carrier: "FedEx", }, - carrier: "FedEx", - }, - ], - discounts: [ - { - amount: { - currency: Currency.Usd, - units: 900, + ], + discounts: [ + { + amount: { + currency: Currency.Usd, + units: 900, + }, + code: "SUMMER10DISCOUNT", + detailsUrl: "https://www.example.com/SUMMER-SALE", }, - code: "SUMMER10DISCOUNT", - detailsUrl: "https://www.example.com/SUMMER-SALE", - }, - ], - items: [ - { - name: "Bolt Swag Bag", - reference: "item_100", - description: "Large tote with Bolt logo.", - totalAmount: { - currency: Currency.Usd, - units: 900, + ], + items: [ + { + name: "Bolt Swag Bag", + reference: "item_100", + description: "Large tote with Bolt logo.", + totalAmount: { + currency: Currency.Usd, + units: 900, + }, + unitPrice: 1000, + quantity: 1, + imageUrl: "https://www.example.com/products/123456/images/1.png", }, - unitPrice: 1000, - quantity: 1, - imageUrl: "https://www.example.com/products/123456/images/1.png", + ], + total: { + currency: Currency.Usd, + units: 900, + }, + tax: { + currency: Currency.Usd, + units: 900, }, - ], - total: { - currency: Currency.Usd, - units: 900, - }, - tax: { - currency: Currency.Usd, - units: 900, }, - }, - paymentMethod: "string", -}; - + paymentMethod: "string", + }; + const res = await sdk.payments.loggedIn.initialize(xPublishableKey, paymentInitializeRequest); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -98,11 +92,12 @@ run(); ### Parameters -| Parameter | Type | Required | Description | -| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | -| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | -| `paymentInitializeRequest` | [components.PaymentInitializeRequest](../../models/components/paymentinitializerequest.md) | :heavy_check_mark: | N/A | -| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | +| `paymentInitializeRequest` | [components.PaymentInitializeRequest](../../models/components/paymentinitializerequest.md) | :heavy_check_mark: | N/A | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | ### Response @@ -110,10 +105,9 @@ run(); **Promise<[operations.PaymentsInitializeResponse](../../models/operations/paymentsinitializeresponse.md)>** ### Errors -| Error Object | Status Code | Content Type | -| ---------------- | ---------------- | ---------------- | -| errors.ErrorT | 4XX | application/json | -| errors.SDKError | 400-600 | */* | +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4xx-5xx | */* | ## update @@ -124,16 +118,7 @@ Update a pending payment ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { - Amount, - Cart, - CartDiscount, - CartItem, - CartShipment, - Currency, - PaymentUpdateRequest, -} from "@boltpay/bolt-typescript-sdk/dist/models/components"; -import { PaymentsUpdateRequest } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; +import { Currency } from "@boltpay/bolt-typescript-sdk/models/components"; async function run() { const sdk = new BoltTypescriptSDK({ @@ -141,63 +126,66 @@ async function run() { oauth: "Bearer ", }, }); -const id: string = "iKv7t5bgt1gg"; -const xPublishableKey: string = "string"; -const paymentUpdateRequest: PaymentUpdateRequest = { - cart: { - orderReference: "order_100", - orderDescription: "Order #1234567890", - displayId: "215614191", - shipments: [ - { - address: "string", - cost: { - currency: Currency.Usd, - units: 900, + + const id = "iKv7t5bgt1gg"; + const xPublishableKey = "string"; + const paymentUpdateRequest = { + cart: { + orderReference: "order_100", + orderDescription: "Order #1234567890", + displayId: "215614191", + shipments: [ + { + address: "string", + cost: { + currency: Currency.Usd, + units: 900, + }, + carrier: "FedEx", }, - carrier: "FedEx", - }, - ], - discounts: [ - { - amount: { - currency: Currency.Usd, - units: 900, + ], + discounts: [ + { + amount: { + currency: Currency.Usd, + units: 900, + }, + code: "SUMMER10DISCOUNT", + detailsUrl: "https://www.example.com/SUMMER-SALE", }, - code: "SUMMER10DISCOUNT", - detailsUrl: "https://www.example.com/SUMMER-SALE", - }, - ], - items: [ - { - name: "Bolt Swag Bag", - reference: "item_100", - description: "Large tote with Bolt logo.", - totalAmount: { - currency: Currency.Usd, - units: 900, + ], + items: [ + { + name: "Bolt Swag Bag", + reference: "item_100", + description: "Large tote with Bolt logo.", + totalAmount: { + currency: Currency.Usd, + units: 900, + }, + unitPrice: 1000, + quantity: 1, + imageUrl: "https://www.example.com/products/123456/images/1.png", }, - unitPrice: 1000, - quantity: 1, - imageUrl: "https://www.example.com/products/123456/images/1.png", + ], + total: { + currency: Currency.Usd, + units: 900, + }, + tax: { + currency: Currency.Usd, + units: 900, }, - ], - total: { - currency: Currency.Usd, - units: 900, - }, - tax: { - currency: Currency.Usd, - units: 900, }, - }, -}; - + }; + const res = await sdk.payments.loggedIn.update(id, xPublishableKey, paymentUpdateRequest); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -205,12 +193,13 @@ run(); ### Parameters -| Parameter | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -| `id` | *string* | :heavy_check_mark: | The ID of the payment to update | iKv7t5bgt1gg | -| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | | -| `paymentUpdateRequest` | [components.PaymentUpdateRequest](../../models/components/paymentupdaterequest.md) | :heavy_check_mark: | N/A | | -| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | | +| Parameter | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `id` | *string* | :heavy_check_mark: | The ID of the payment to update | [object Object] | +| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | | +| `paymentUpdateRequest` | [components.PaymentUpdateRequest](../../models/components/paymentupdaterequest.md) | :heavy_check_mark: | N/A | | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | | ### Response @@ -218,10 +207,9 @@ run(); **Promise<[operations.PaymentsUpdateResponse](../../models/operations/paymentsupdateresponse.md)>** ### Errors -| Error Object | Status Code | Content Type | -| ---------------- | ---------------- | ---------------- | -| errors.ErrorT | 4XX | application/json | -| errors.SDKError | 400-600 | */* | +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4xx-5xx | */* | ## performAction @@ -232,8 +220,7 @@ Perform an irreversible action on a pending payment, such as finalizing it. ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { DotTag, PaymentActionRequest } from "@boltpay/bolt-typescript-sdk/dist/models/components"; -import { PaymentsActionRequest } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; +import { DotTag } from "@boltpay/bolt-typescript-sdk/models/components"; async function run() { const sdk = new BoltTypescriptSDK({ @@ -241,18 +228,21 @@ async function run() { oauth: "Bearer ", }, }); -const id: string = "iKv7t5bgt1gg"; -const xPublishableKey: string = "string"; -const paymentActionRequest: PaymentActionRequest = { - dotTag: DotTag.Finalize, - redirectResult: "eyJ0cmFuc", -}; + const id = "iKv7t5bgt1gg"; + const xPublishableKey = "string"; + const paymentActionRequest = { + dotTag: DotTag.Finalize, + redirectResult: "eyJ0cmFuc", + }; + const res = await sdk.payments.loggedIn.performAction(id, xPublishableKey, paymentActionRequest); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -260,12 +250,13 @@ run(); ### Parameters -| Parameter | Type | Required | Description | Example | -| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -| `id` | *string* | :heavy_check_mark: | The ID of the payment to operate on | iKv7t5bgt1gg | -| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | | -| `paymentActionRequest` | [components.PaymentActionRequest](../../models/components/paymentactionrequest.md) | :heavy_check_mark: | N/A | | -| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | | +| Parameter | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `id` | *string* | :heavy_check_mark: | The ID of the payment to operate on | [object Object] | +| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | | +| `paymentActionRequest` | [components.PaymentActionRequest](../../models/components/paymentactionrequest.md) | :heavy_check_mark: | N/A | | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | | ### Response @@ -273,7 +264,6 @@ run(); **Promise<[operations.PaymentsActionResponse](../../models/operations/paymentsactionresponse.md)>** ### Errors -| Error Object | Status Code | Content Type | -| ---------------- | ---------------- | ---------------- | -| errors.ErrorT | 4XX | application/json | -| errors.SDKError | 400-600 | */* | +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4xx-5xx | */* | diff --git a/docs/sdks/oauth/README.md b/docs/sdks/oauth/README.md index 6c1d616..8e23277 100644 --- a/docs/sdks/oauth/README.md +++ b/docs/sdks/oauth/README.md @@ -20,7 +20,8 @@ Retrieve a new or refresh an existing OAuth token. ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { GrantType, Scope } from "@boltpay/bolt-typescript-sdk/dist/models/components"; +import { } from "@boltpay/bolt-typescript-sdk/models"; +import { GrantType } from "@boltpay/bolt-typescript-sdk/models/components"; async function run() { const sdk = new BoltTypescriptSDK({ @@ -39,9 +40,11 @@ async function run() { ], }); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -49,10 +52,11 @@ run(); ### Parameters -| Parameter | Type | Required | Description | -| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | -| `request` | [components.GetAccessTokenRequest](../../models/components/getaccesstokenrequest.md) | :heavy_check_mark: | The request object to use for the request. | -| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [components.GetAccessTokenRequest](../../models/components/getaccesstokenrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | ### Response @@ -60,7 +64,6 @@ run(); **Promise<[operations.OauthGetTokenResponse](../../models/operations/oauthgettokenresponse.md)>** ### Errors -| Error Object | Status Code | Content Type | -| ---------------- | ---------------- | ---------------- | -| errors.ErrorT | 4XX | application/json | -| errors.SDKError | 400-600 | */* | +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4xx-5xx | */* | diff --git a/docs/sdks/testing/README.md b/docs/sdks/testing/README.md index a828490..87c05c5 100644 --- a/docs/sdks/testing/README.md +++ b/docs/sdks/testing/README.md @@ -21,25 +21,29 @@ Create a Bolt shopper account for testing purposes. ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { AccountTestCreationData, EmailState, PhoneState } from "@boltpay/bolt-typescript-sdk/dist/models/components"; -import { TestingAccountCreateRequest, TestingAccountCreateSecurity } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; +import { EmailState, PhoneState } from "@boltpay/bolt-typescript-sdk/models/components"; +import { TestingAccountCreateSecurity } from "@boltpay/bolt-typescript-sdk/models/operations"; async function run() { const sdk = new BoltTypescriptSDK(); -const xPublishableKey: string = "string"; -const accountTestCreationData: AccountTestCreationData = { - emailState: EmailState.Unverified, - phoneState: PhoneState.Verified, - isMigrated: true, - hasAddress: true, -}; -const operationSecurity: TestingAccountCreateSecurity = ""; + const xPublishableKey = "string"; + const accountTestCreationData = { + emailState: EmailState.Unverified, + phoneState: PhoneState.Verified, + isMigrated: true, + hasAddress: true, + hasCreditCard: true, + }; + const operationSecurity: TestingAccountCreateSecurity = ""; + const res = await sdk.testing.createAccount(operationSecurity, xPublishableKey, accountTestCreationData); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -47,12 +51,13 @@ run(); ### Parameters -| Parameter | Type | Required | Description | -| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -| `security` | [operations.TestingAccountCreateSecurity](../../models/operations/testingaccountcreatesecurity.md) | :heavy_check_mark: | The security requirements to use for the request. | -| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | -| `accountTestCreationData` | [components.AccountTestCreationData](../../models/components/accounttestcreationdata.md) | :heavy_check_mark: | N/A | -| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `security` | [operations.TestingAccountCreateSecurity](../../models/operations/testingaccountcreatesecurity.md) | :heavy_check_mark: | The security requirements to use for the request. | +| `xPublishableKey` | *string* | :heavy_check_mark: | The publicly viewable identifier used to identify a merchant division. | +| `accountTestCreationData` | [components.AccountTestCreationData](../../models/components/accounttestcreationdata.md) | :heavy_check_mark: | N/A | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | ### Response @@ -60,10 +65,9 @@ run(); **Promise<[operations.TestingAccountCreateResponse](../../models/operations/testingaccountcreateresponse.md)>** ### Errors -| Error Object | Status Code | Content Type | -| ---------------- | ---------------- | ---------------- | -| errors.ErrorT | 4XX | application/json | -| errors.SDKError | 400-600 | */* | +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4xx-5xx | */* | ## getCreditCard @@ -75,17 +79,20 @@ generated against the `4111 1111 1111 1004` test card. ```typescript import { BoltTypescriptSDK } from "@boltpay/bolt-typescript-sdk"; -import { TestingCreditCardGetSecurity } from "@boltpay/bolt-typescript-sdk/dist/models/operations"; +import { TestingCreditCardGetSecurity } from "@boltpay/bolt-typescript-sdk/models/operations"; async function run() { const sdk = new BoltTypescriptSDK(); -const operationSecurity: TestingCreditCardGetSecurity = ""; + const operationSecurity: TestingCreditCardGetSecurity = ""; + const res = await sdk.testing.getCreditCard(operationSecurity); - if (res.statusCode == 200) { - // handle response + if (res?.statusCode !== 200) { + throw new Error("Unexpected status code: " + res?.statusCode || "-"); } + + // handle response } run(); @@ -93,10 +100,11 @@ run(); ### Parameters -| Parameter | Type | Required | Description | -| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -| `security` | [operations.TestingCreditCardGetSecurity](../../models/operations/testingcreditcardgetsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. | -| `config` | [AxiosRequestConfig](https://axios-http.com/docs/req_config) | :heavy_minus_sign: | Available config options for making requests. | +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `security` | [operations.TestingCreditCardGetSecurity](../../models/operations/testingcreditcardgetsecurity.md) | :heavy_check_mark: | The security requirements to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | ### Response @@ -104,7 +112,6 @@ run(); **Promise<[operations.TestingCreditCardGetResponse](../../models/operations/testingcreditcardgetresponse.md)>** ### Errors -| Error Object | Status Code | Content Type | -| ---------------- | ---------------- | ---------------- | -| errors.ErrorT | 4XX | application/json | -| errors.SDKError | 400-600 | */* | +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4xx-5xx | */* | diff --git a/gen.yaml b/gen.yaml index 4df2df3..429350b 100644 --- a/gen.yaml +++ b/gen.yaml @@ -1,29 +1,13 @@ -configVersion: 1.0.0 -management: - docChecksum: 3b8fa46f5a3dd747537376b55b54f572 - docVersion: 3.0.1 - speakeasyVersion: 1.126.0 - generationVersion: 2.213.3 +configVersion: 2.0.0 generation: - comments: {} sdkClassName: Bolt-Typescript-SDK - repoURL: https://github.com/BoltApp/Bolt-Typescript-SDK.git maintainOpenAPIOrder: true usageSnippets: optionalPropertyRendering: withExample -features: - typescript: - core: 3.3.0 - flattening: 2.81.1 - globalSecurity: 2.82.1 - globalServerURLs: 2.82.1 - groups: 2.81.2 - ignores: 2.81.1 - inputOutputModels: 2.82.0 - methodSecurity: 2.82.0 - nameOverrides: 2.81.1 + fixes: + nameResolutionDec2023: false typescript: - version: 0.3.0 + version: 0.4.0 author: BoltPublicAPI clientServerStatusCodesAsErrors: true flattenGlobalSecurity: true @@ -36,10 +20,7 @@ typescript: shared: models/components webhooks: models/webhooks inputModelSuffix: input - installationURL: https://github.com/BoltApp/Bolt-Typescript-SDK maxMethodParams: 4 outputModelSuffix: output packageName: '@boltpay/bolt-typescript-sdk' - published: true - repoSubDirectory: . templateVersion: v2 diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index e451988..0000000 --- a/jest.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - preset: "ts-jest", - testEnvironment: "node", - testPathIgnorePatterns: [ - "/__tests__/helpers.ts", - "/__tests__/common_helpers.ts", - ], -}; diff --git a/package-lock.json b/package-lock.json index ec91c43..70fc7ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,782 +1,908 @@ { "name": "@boltpay/bolt-typescript-sdk", - "version": "0.3.0", - "lockfileVersion": 2, + "version": "0.4.0", + "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@boltpay/bolt-typescript-sdk", - "version": "0.3.0", + "version": "0.4.0", "dependencies": { - "axios": "^1.1.3", - "class-transformer": "^0.5.1", - "form-data": "^4.0.0", - "reflect-metadata": "^0.1.13" + "decimal.js": "^10.4.3", + "jsonpath": "^1.1.1" }, "devDependencies": { - "@types/node": "^18.11.5", - "@types/jsonpath": "^0.2.0", - "@typescript-eslint/eslint-plugin": "^5.56.0", - "@typescript-eslint/parser": "^5.56.0", - "eslint": "^8.36.0", - "typescript": "^4.8.4" + "@types/jsonpath": "^0.2.4", + "@typescript-eslint/eslint-plugin": "^6.13.2", + "@typescript-eslint/parser": "^6.13.2", + "eslint": "^8.55.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-import": "^2.29.0", + "typescript": "^5.3.3", + "zod": "^3.22.4" + }, + "peerDependencies": { + "zod": ">= 3" } }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, - "node_modules/@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@babel/compat-data": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz", - "integrity": "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==", + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "engines": { - "node": ">=6.9.0" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@babel/core": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.1.tgz", - "integrity": "sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.22.0", - "@babel/helper-compilation-targets": "^7.22.1", - "@babel/helper-module-transforms": "^7.22.1", - "@babel/helpers": "^7.22.0", - "@babel/parser": "^7.22.0", - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.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" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "url": "https://opencollective.com/eslint" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/@eslint/js": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", + "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@babel/generator": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz", - "integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "dependencies": { - "@babel/types": "^7.22.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">=6.9.0" + "node": ">=10.10.0" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz", - "integrity": "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==", + "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, - "dependencies": { - "@babel/compat-data": "^7.22.0", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">=12.22" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@babel/helper-compilation-targets/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==", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true + }, + "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, "dependencies": { - "yallist": "^3.0.2" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "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, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">= 8" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz", - "integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==", + "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, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, "engines": { - "node": ">=6.9.0" + "node": ">= 8" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "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/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/jsonpath": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@types/jsonpath/-/jsonpath-0.2.4.tgz", + "integrity": "sha512-K3hxB8Blw0qgW6ExKgMbXQv2UPZBoE2GqLpVY+yr7nMD2Pq86lsuIzyAaiQ7eMqFL5B6di6pxSkogLJEyEHoGA==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.14.0.tgz", + "integrity": "sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.14.0", + "@typescript-eslint/type-utils": "6.14.0", + "@typescript-eslint/utils": "6.14.0", + "@typescript-eslint/visitor-keys": "6.14.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">=6.9.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "node_modules/@typescript-eslint/parser": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.14.0.tgz", + "integrity": "sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@typescript-eslint/scope-manager": "6.14.0", + "@typescript-eslint/types": "6.14.0", + "@typescript-eslint/typescript-estree": "6.14.0", + "@typescript-eslint/visitor-keys": "6.14.0", + "debug": "^4.3.4" }, "engines": { - "node": ">=6.9.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.14.0.tgz", + "integrity": "sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==", "dev": true, "dependencies": { - "@babel/types": "^7.21.4" + "@typescript-eslint/types": "6.14.0", + "@typescript-eslint/visitor-keys": "6.14.0" }, "engines": { - "node": ">=6.9.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz", - "integrity": "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==", + "node_modules/@typescript-eslint/type-utils": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.14.0.tgz", + "integrity": "sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-simple-access": "^7.21.5", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.0" + "@typescript-eslint/typescript-estree": "6.14.0", + "@typescript-eslint/utils": "6.14.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">=6.9.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", - "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", + "node_modules/@typescript-eslint/types": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.14.0.tgz", + "integrity": "sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==", "dev": true, "engines": { - "node": ">=6.9.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", - "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.14.0.tgz", + "integrity": "sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==", "dev": true, "dependencies": { - "@babel/types": "^7.21.5" + "@typescript-eslint/types": "6.14.0", + "@typescript-eslint/visitor-keys": "6.14.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">=6.9.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "node_modules/@typescript-eslint/utils": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.14.0.tgz", + "integrity": "sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.14.0", + "@typescript-eslint/types": "6.14.0", + "@typescript-eslint/typescript-estree": "6.14.0", + "semver": "^7.5.4" }, "engines": { - "node": ">=6.9.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.14.0.tgz", + "integrity": "sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==", "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.14.0", + "eslint-visitor-keys": "^3.4.1" + }, "engines": { - "node": ">=6.9.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "dev": true, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=6.9.0" + "node": ">=0.4.0" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "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, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@babel/helpers": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.3.tgz", - "integrity": "sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==", + "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, "dependencies": { - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.3" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=6.9.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "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, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/@babel/highlight/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==", + "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, "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@babel/highlight/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==", + "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/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@babel/highlight/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==", + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/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 - }, - "node_modules/@babel/highlight/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, + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, "engines": { - "node": ">=0.8.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/@babel/highlight/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==", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@babel/parser": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz", - "integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==", + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, - "bin": { - "parser": "bin/babel-parser.js" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, "engines": { - "node": ">=6.0.0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "node": ">= 0.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "engines": { + "node": ">= 0.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "engines": { + "node": ">= 0.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", - "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, "engines": { - "node": ">=6.9.0" + "node": ">= 0.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "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/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": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "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==", + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "fill-range": "^7.0.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=8" } }, - "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==", + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=6" } }, - "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==", + "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, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "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==", + "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, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "color-name": "~1.1.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=7.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==", + "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/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/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">= 8" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", - "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "ms": "2.1.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=6.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@babel/template": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", - "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "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==" + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/parser": "^7.21.9", - "@babel/types": "^7.21.5" + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">= 0.4" } }, - "node_modules/@babel/traverse": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz", - "integrity": "sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.22.3", - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.22.4", - "@babel/types": "^7.22.4", - "debug": "^4.1.0", - "globals": "^11.1.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=6.9.0" - } - }, - "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, - "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@babel/types": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz", - "integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==", + "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": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" + "path-type": "^4.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "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==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "esutils": "^2.0.2" }, "engines": { - "node": ">=12" - } - }, - "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, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "node": ">=6.0.0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=10.13.0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.1.tgz", - "integrity": "sha512-BISJ6ZE4xQsuL/FmsyRaiffpq977bMlsKfGHTQrOGFErfByxIe6iZTxPf/00Zon9b9a7iUykfQwejN3s2ZW/Bw==", - "dev": true, + "node_modules/es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "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-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", - "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", "dev": true, "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.0", - "globals": "^13.19.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" + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">= 0.4" } }, - "node_modules/@eslint/js": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", - "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "dependencies": { + "hasown": "^2.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { - "node": ">=10.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "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, "engines": { - "node": ">=12.22" + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "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, + "node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "sprintf-js": "~1.0.2" + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/esprima": { + "node_modules/escodegen/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, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -785,8025 +911,2064 @@ "node": ">=4" } }, - "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" - }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "engines": { - "node": ">=8" + "node": ">=4.0" } }, - "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, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 0.8.0" } }, - "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, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dependencies": { - "p-locate": "^4.1.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "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, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dependencies": { - "p-try": "^2.0.0" + "prelude-ls": "~1.1.2" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8.0" } }, - "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==", + "node_modules/eslint": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "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.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "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.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "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.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@istanbuljs/load-nyc-config/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==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "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==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/@jest/console": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", - "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", "dev": true, "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0" + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" } }, - "node_modules/@jest/core": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", - "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, "dependencies": { - "@jest/console": "^29.5.0", - "@jest/reporters": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-resolve-dependencies": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "jest-watcher": "^29.5.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "debug": "^3.2.7" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "engines": { + "node": ">=4" }, "peerDependenciesMeta": { - "node-notifier": { + "eslint": { "optional": true } } }, - "node_modules/@jest/environment": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", - "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "ms": "^2.1.1" } }, - "node_modules/@jest/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", + "node_modules/eslint-plugin-import": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", + "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", "dev": true, "dependencies": { - "expect": "^29.5.0", - "jest-snapshot": "^29.5.0" + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/@jest/expect-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", - "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "jest-get-type": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "ms": "^2.1.1" } }, - "node_modules/@jest/fake-timers": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", - "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { - "@jest/types": "^29.5.0", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" + "esutils": "^2.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/@jest/globals": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", - "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", + "node_modules/eslint-plugin-import/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, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/types": "^29.5.0", - "jest-mock": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@jest/reporters": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", - "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "@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": "^29.5.0", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "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, - "dependencies": { - "@sinclair/typebox": "^0.25.16" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@jest/source-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", - "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.15", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@jest/test-result": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", - "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "node_modules/esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.4.0" } }, - "node_modules/@jest/test-sequencer": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", - "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { - "@jest/test-result": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "slash": "^3.0.0" + "estraverse": "^5.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10" } }, - "node_modules/@jest/transform": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", - "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", + "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, "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" + "estraverse": "^5.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4.0" } }, - "node_modules/@jest/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "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, - "dependencies": { - "@jest/schemas": "^29.4.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" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "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, + "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" + }, "engines": { - "node": ">=6.0.0" + "node": ">=8.6.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "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, + "dependencies": { + "is-glob": "^4.0.1" + }, "engines": { - "node": ">=6.0.0" + "node": ">= 6" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "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/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "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==" + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "reusify": "^1.0.4" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "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==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">= 8" + "node": "^10.12.0 || >=12.0.0" } }, - "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==", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, "engines": { - "node": ">= 8" + "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==", + "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, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "type-detect": "4.0.8" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz", - "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==", + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "dependencies": { - "@sinonjs/commons": "^3.0.0" + "is-callable": "^1.1.3" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "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/@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/@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==", + "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/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "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, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "dependencies": { - "@babel/types": "^7.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/babel__traverse": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.0.tgz", - "integrity": "sha512-TBOjqAGf0hmaqRwpii5LLkJLg7c6OMm4nHLmpsUxwk9bBHtoTC6dAHdVWdGv4TBxj2CZOZY8Xfq8WmfoVi7n4Q==", + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dev": true, "dependencies": { - "@babel/types": "^7.20.7" + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "dependencies": { - "@types/node": "*" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "node_modules/get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "*" + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { - "@types/istanbul-lib-report": "*" + "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/isaacs" } }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "node_modules/@types/jsonpath": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@types/jsonpath/-/jsonpath-0.2.0.tgz", - "integrity": "sha512-v7qlPA0VpKUlEdhghbDqRoKMxFB3h3Ch688TApBJ6v+XLDdvWCGLJIYiPKGZnS6MAOie+IorCfNYVHOPIHSWwQ==", - "dev": true - }, - "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/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "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": { - "@types/yargs-parser": "*" + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.56.0.tgz", - "integrity": "sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==", + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.56.0", - "@typescript-eslint/type-utils": "5.56.0", - "@typescript-eslint/utils": "5.56.0", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "type-fest": "^0.20.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, "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" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.56.0.tgz", - "integrity": "sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==", + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.56.0", - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/typescript-estree": "5.56.0", - "debug": "^4.3.4" + "define-properties": "^1.1.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz", - "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/visitor-keys": "5.56.0" + "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" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.56.0.tgz", - "integrity": "sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.56.0", - "@typescript-eslint/utils": "5.56.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "get-intrinsic": "^1.1.3" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/types": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz", - "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==", + "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/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz", - "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==", + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/visitor-keys": "5.56.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "get-intrinsic": "^1.2.2" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/utils": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.56.0.tgz", - "integrity": "sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==", + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.56.0", - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/typescript-estree": "5.56.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz", - "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.56.0", - "eslint-visitor-keys": "^3.3.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "dev": true, - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "function-bind": "^1.1.2" }, "engines": { - "node": ">=0.4.0" - } - }, - "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, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node": ">= 0.4" } }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, "engines": { - "node": ">=0.4.0" - } - }, - "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, - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "node": ">= 4" } }, - "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==", + "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, "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/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" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "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, - "engines": { - "node": ">=8" - } - }, - "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==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.8.19" } }, - "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==", + "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==", "dev": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" + "once": "^1.3.0", + "wrappy": "1" } }, - "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==", + "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/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz", - "integrity": "sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/babel-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", - "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.5.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.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, - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "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/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": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node": ">= 0.4" } }, - "node_modules/braces": { + "node_modules/is-array-buffer": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", - "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, - "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": { - "caniuse-lite": "^1.0.30001489", - "electron-to-chromium": "^1.4.411", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "dependencies": { - "fast-json-stable-stringify": "2.x" + "has-bigints": "^1.0.1" }, - "engines": { - "node": ">= 6" - } - }, - "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" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/buffer-from": { + "node_modules/is-boolean-object": { "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/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001492", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001492.tgz", - "integrity": "sha512-2efF8SAZwgAX1FJr87KWhvuJxnGJKOnctQa8xLOskAXNXq8oiuqgl6u1kk3fFpsp3GgvzlRjiK1sl63hNtFADw==", - "dev": true, - "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/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "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, - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "node_modules/class-transformer": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", - "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" - }, - "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, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "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, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "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, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.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/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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/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/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/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "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==" - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "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, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "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": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.414", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.414.tgz", - "integrity": "sha512-RRuCvP6ekngVh2SAJaOKT/hxqc9JAsK+Pe0hP5tGQIfonU2Zy9gMGdJ+mBdyl/vNucMG6gkXYtuM4H/1giws5w==", - "dev": true - }, - "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, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "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/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, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/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==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", - "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.1", - "@eslint/js": "8.36.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "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-visitor-keys": "^3.3.0", - "espree": "^9.5.0", - "esquery": "^1.4.2", - "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.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "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", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/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, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/espree": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", - "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", - "dev": true, - "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_modules/esprima": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", - "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/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, - "engines": { - "node": ">=4.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, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/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, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "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.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "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" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "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, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "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==" - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^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, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "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.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "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, - "engines": { - "node": ">=6.9.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, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "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, - "engines": { - "node": ">=8.0.0" - } - }, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "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": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.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, - "engines": { - "node": ">=8" - } - }, - "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/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, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "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, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "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==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "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/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.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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": ">=0.10.0" - } - }, - "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/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, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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, - "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": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", - "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", - "dev": true, - "dependencies": { - "@jest/core": "^29.5.0", - "@jest/types": "^29.5.0", - "import-local": "^3.0.2", - "jest-cli": "^29.5.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", - "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.5.0", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.5.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", - "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", - "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.5.0", - "@jest/types": "^29.5.0", - "babel-jest": "^29.5.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.5.0", - "jest-environment-node": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", - "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", - "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.5.0", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", - "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", - "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@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.4.3", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", - "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", - "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", - "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.5.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", - "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "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, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", - "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", - "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", - "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/environment": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-leak-detector": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-resolve": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-util": "^29.5.0", - "jest-watcher": "^29.5.0", - "jest-worker": "^29.5.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", - "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/globals": "^29.5.0", - "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@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.5.0", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", - "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", - "dev": true, - "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/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.5.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", - "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", - "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.5.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", - "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.5.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.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, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "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, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "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": "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/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, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonpath": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", - "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", - "dependencies": { - "esprima": "1.2.2", - "static-eval": "2.0.2", - "underscore": "1.12.1" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "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, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.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/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": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "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, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "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, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "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.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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/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": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "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/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": 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.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "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/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, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "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.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "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, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "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, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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, - "dependencies": { - "@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" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "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, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "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/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "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, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "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/sponsors/sindresorhus" - } - }, - "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, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "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/pretty-format": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", - "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "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, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "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": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/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, - "engines": { - "node": ">=8" - } - }, - "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, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "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, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "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": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "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 - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "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 - }, - "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, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "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" - } - }, - "node_modules/static-eval": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", - "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", - "dependencies": { - "escodegen": "^1.8.1" - } - }, - "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, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "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/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, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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" - } - }, - "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-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/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-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/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, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "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 - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-jest": { - "version": "29.1.0", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.0.tgz", - "integrity": "sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "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/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "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/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, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/underscore": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", - "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "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.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "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, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "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 - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "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/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "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, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "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, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "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", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "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, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "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/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "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.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "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", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "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" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz", - "integrity": "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==", - "dev": true - }, - "@babel/core": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.1.tgz", - "integrity": "sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.22.0", - "@babel/helper-compilation-targets": "^7.22.1", - "@babel/helper-module-transforms": "^7.22.1", - "@babel/helpers": "^7.22.0", - "@babel/parser": "^7.22.0", - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz", - "integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==", - "dev": true, - "requires": { - "@babel/types": "^7.22.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz", - "integrity": "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.0", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "dependencies": { - "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, - "requires": { - "yallist": "^3.0.2" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz", - "integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dev": true, - "requires": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", - "dev": true, - "requires": { - "@babel/types": "^7.21.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz", - "integrity": "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-simple-access": "^7.21.5", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", - "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", - "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==", - "dev": true, - "requires": { - "@babel/types": "^7.21.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz", - "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true - }, - "@babel/helpers": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.3.tgz", - "integrity": "sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==", - "dev": true, - "requires": { - "@babel/template": "^7.21.9", - "@babel/traverse": "^7.22.1", - "@babel/types": "^7.22.3" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "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", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "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": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "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": { - "color-name": "1.1.3" - } - }, - "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 - }, - "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 - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "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": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz", - "integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==", - "dev": true - }, - "@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, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@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, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@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, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@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, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@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, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", - "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@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, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@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, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@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, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@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, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@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, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@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, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@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, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", - "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/template": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", - "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.21.4", - "@babel/parser": "^7.21.9", - "@babel/types": "^7.21.5" - } - }, - "@babel/traverse": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz", - "integrity": "sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.22.3", - "@babel/helper-environment-visitor": "^7.22.1", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.22.4", - "@babel/types": "^7.22.4", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "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 - } - } - }, - "@babel/types": { - "version": "7.22.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz", - "integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@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, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@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, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint-community/regexpp": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.1.tgz", - "integrity": "sha512-BISJ6ZE4xQsuL/FmsyRaiffpq977bMlsKfGHTQrOGFErfByxIe6iZTxPf/00Zon9b9a7iUykfQwejN3s2ZW/Bw==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", - "integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.0", - "globals": "^13.19.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" - } - }, - "@eslint/js": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", - "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@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 - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@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, - "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", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "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 - }, - "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, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "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, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "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, - "requires": { - "p-locate": "^4.1.0" - } - }, - "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, - "requires": { - "p-try": "^2.0.0" - } - }, - "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, - "requires": { - "p-limit": "^2.2.0" - } - }, - "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 - } - } - }, - "@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 - }, - "@jest/console": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", - "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", - "dev": true, - "requires": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", - "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", - "dev": true, - "requires": { - "@jest/console": "^29.5.0", - "@jest/reporters": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-resolve-dependencies": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "jest-watcher": "^29.5.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", - "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", - "dev": true, - "requires": { - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0" - } - }, - "@jest/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", - "dev": true, - "requires": { - "expect": "^29.5.0", - "jest-snapshot": "^29.5.0" - } - }, - "@jest/expect-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", - "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", - "dev": true, - "requires": { - "jest-get-type": "^29.4.3" - } - }, - "@jest/fake-timers": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", - "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", - "dev": true, - "requires": { - "@jest/types": "^29.5.0", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" - } - }, - "@jest/globals": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", - "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", - "dev": true, - "requires": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/types": "^29.5.0", - "jest-mock": "^29.5.0" - } - }, - "@jest/reporters": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", - "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "@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": "^29.5.0", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - } - }, - "@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.25.16" - } - }, - "@jest/source-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", - "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.15", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", - "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", - "dev": true, - "requires": { - "@jest/console": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", - "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", - "dev": true, - "requires": { - "@jest/test-result": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "slash": "^3.0.0" - } - }, - "@jest/transform": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", - "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - } - }, - "@jest/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", - "dev": true, - "requires": { - "@jest/schemas": "^29.4.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" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - } - } - }, - "@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, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@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 - }, - "@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, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", - "dev": true - }, - "@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz", - "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^3.0.0" - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@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 - }, - "@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 - }, - "@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 - }, - "@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.0.tgz", - "integrity": "sha512-TBOjqAGf0hmaqRwpii5LLkJLg7c6OMm4nHLmpsUxwk9bBHtoTC6dAHdVWdGv4TBxj2CZOZY8Xfq8WmfoVi7n4Q==", - "dev": true, - "requires": { - "@babel/types": "^7.20.7" - } - }, - "@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/jsonpath": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@types/jsonpath/-/jsonpath-0.2.0.tgz", - "integrity": "sha512-v7qlPA0VpKUlEdhghbDqRoKMxFB3h3Ch688TApBJ6v+XLDdvWCGLJIYiPKGZnS6MAOie+IorCfNYVHOPIHSWwQ==", - "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/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true - }, - "@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.56.0.tgz", - "integrity": "sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.56.0", - "@typescript-eslint/type-utils": "5.56.0", - "@typescript-eslint/utils": "5.56.0", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.56.0.tgz", - "integrity": "sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.56.0", - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/typescript-estree": "5.56.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz", - "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/visitor-keys": "5.56.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.56.0.tgz", - "integrity": "sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "5.56.0", - "@typescript-eslint/utils": "5.56.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz", - "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz", - "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/visitor-keys": "5.56.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.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.56.0.tgz", - "integrity": "sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.56.0", - "@typescript-eslint/types": "5.56.0", - "@typescript-eslint/typescript-estree": "5.56.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz", - "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.56.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - }, - "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, - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "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" - } - }, - "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, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "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 - } - } - }, - "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 - }, - "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, - "requires": { - "color-convert": "^2.0.1" - } - }, - "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, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "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 - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "axios": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz", - "integrity": "sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==", - "requires": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "babel-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", - "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", - "dev": true, - "requires": { - "@jest/transform": "^29.5.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - } - }, - "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, - "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": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", - "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", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "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": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "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 - }, - "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": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", - "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001489", - "electron-to-chromium": "^1.4.411", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - } - }, - "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, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "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, - "requires": { - "node-int64": "^0.4.0" - } - }, - "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 - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001492", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001492.tgz", - "integrity": "sha512-2efF8SAZwgAX1FJr87KWhvuJxnGJKOnctQa8xLOskAXNXq8oiuqgl6u1kk3fFpsp3GgvzlRjiK1sl63hNtFADw==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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 - }, - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "class-transformer": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", - "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" - }, - "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, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "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, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "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 - }, - "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 - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "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==" - }, - "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 - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "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 - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true - }, - "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, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "electron-to-chromium": { - "version": "1.4.414", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.414.tgz", - "integrity": "sha512-RRuCvP6ekngVh2SAJaOKT/hxqc9JAsK+Pe0hP5tGQIfonU2Zy9gMGdJ+mBdyl/vNucMG6gkXYtuM4H/1giws5w==", - "dev": true - }, - "emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true - }, - "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 - }, - "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, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "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 - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", - "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.1", - "@eslint/js": "8.36.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "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-visitor-keys": "^3.3.0", - "espree": "^9.5.0", - "esquery": "^1.4.2", - "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.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "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", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", - "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esprima": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", - "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==" - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "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, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "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", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", - "dev": true, - "requires": { - "@jest/expect-utils": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0" - } - }, - "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 - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "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" - }, - "dependencies": { - "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, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "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 - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "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, - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "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, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "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 - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "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 - }, - "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 - }, - "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 - }, - "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 - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "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": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "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" - } - }, - "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 - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "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 - }, - "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 - }, - "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 - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "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, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "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 - }, - "is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "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 - }, - "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 - }, - "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, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "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 - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "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 - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "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, - "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", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "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", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", - "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", - "dev": true, - "requires": { - "@jest/core": "^29.5.0", - "@jest/types": "^29.5.0", - "import-local": "^3.0.2", - "jest-cli": "^29.5.0" - } - }, - "jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", - "dev": true, - "requires": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - } - }, - "jest-circus": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", - "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", - "dev": true, - "requires": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.5.0", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.5.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-cli": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", - "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", - "dev": true, - "requires": { - "@jest/core": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - } - }, - "jest-config": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", - "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.5.0", - "@jest/types": "^29.5.0", - "babel-jest": "^29.5.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.5.0", - "jest-environment-node": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" + "url": "https://github.com/sponsors/ljharb" } }, - "jest-diff": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", - "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, - "requires": { - "detect-newline": "^3.0.0" + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "jest-each": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", - "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "requires": { - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.5.0", - "pretty-format": "^29.5.0" + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "jest-environment-node": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", - "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", + "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, - "requires": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" + "engines": { + "node": ">=0.10.0" } }, - "jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true - }, - "jest-haste-map": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", - "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", - "dev": true, - "requires": { - "@jest/types": "^29.5.0", - "@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": "^29.4.3", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - } - }, - "jest-leak-detector": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", - "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", - "dev": true, - "requires": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - } - }, - "jest-matcher-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", - "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" + "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, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "jest-message-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", - "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.5.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "jest-mock": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", - "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", + "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, - "requires": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-util": "^29.5.0" + "engines": { + "node": ">=0.12.0" } }, - "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==", + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "jest-resolve": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", - "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" + "engines": { + "node": ">=8" } }, - "jest-resolve-dependencies": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", - "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "requires": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.5.0" + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "jest-runner": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", - "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, - "requires": { - "@jest/console": "^29.5.0", - "@jest/environment": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-leak-detector": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-resolve": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-util": "^29.5.0", - "jest-watcher": "^29.5.0", - "jest-worker": "^29.5.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - } - }, - "jest-runtime": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", - "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", - "dev": true, - "requires": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/globals": "^29.5.0", - "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@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.5.0", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - } - }, - "jest-snapshot": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", - "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", - "dev": true, - "requires": { - "@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/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.5.0", - "semver": "^7.3.5" + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "jest-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "requires": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "jest-validate": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", - "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "requires": { - "@jest/types": "^29.5.0", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.5.0" - }, "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - } + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "jest-watcher": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", - "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, - "requires": { - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.5.0", - "string-length": "^4.0.1" + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "jest-worker": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", - "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "requires": { - "@types/node": "*", - "jest-util": "^29.5.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, "dependencies": { - "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, - "requires": { - "has-flag": "^4.0.0" - } - } + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "js-yaml": { + "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, - "requires": { + "dependencies": { "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "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==", + "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 }, - "json-schema-traverse": { + "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 }, - "json-stable-stringify-without-jsonify": { + "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 }, - "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/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, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } }, - "jsonpath": { + "node_modules/jsonpath": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", - "requires": { + "dependencies": { "esprima": "1.2.2", "static-eval": "2.0.2", "underscore": "1.12.1" } }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "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 + "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, + "dependencies": { + "json-buffer": "3.0.1" + } }, - "levn": { + "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, - "requires": { + "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "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 - }, - "locate-path": { + "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, - "requires": { + "dependencies": { "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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 - }, - "lodash.merge": { + "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 }, - "lru-cache": { + "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": { + "dependencies": { "yallist": "^4.0.0" - } - }, - "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, - "requires": { - "semver": "^6.0.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "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 - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" + "engines": { + "node": ">=10" } }, - "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 - }, - "merge2": { + "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 + "dev": true, + "engines": { + "node": ">= 8" + } }, - "micromatch": { + "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "requires": { + "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "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 - }, - "minimatch": { + "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": { + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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" } }, - "ms": { + "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "natural-compare": { + "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 }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "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/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } }, - "node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "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 + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } }, - "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==", + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, - "requires": { - "path-key": "^3.0.0" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "once": { + "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, - "requires": { + "dependencies": { "wrappy": "1" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "requires": { + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "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" + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "p-limit": { + "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "requires": { + "dependencies": { "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-locate": { + "node_modules/p-locate": { "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, - "requires": { + "dependencies": { "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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 - }, - "parent-module": { + "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, - "requires": { + "dependencies": { "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "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, - "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": { + "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 + "dev": true, + "engines": { + "node": ">=8" + } }, - "path-is-absolute": { + "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 + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-key": { + "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 + "dev": true, + "engines": { + "node": ">=8" + } }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-type": { + "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 - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "picomatch": { + "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, - "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, - "requires": { - "find-up": "^4.0.0" + "engines": { + "node": ">=8.6" }, - "dependencies": { - "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, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "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, - "requires": { - "p-locate": "^4.1.0" - } - }, - "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, - "requires": { - "p-try": "^2.0.0" - } - }, - "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, - "requires": { - "p-limit": "^2.2.0" - } - } + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "prelude-ls": { + "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 - }, - "pretty-format": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", - "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "dev": true, - "requires": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "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 - } + "engines": { + "node": ">= 0.8.0" } }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "engines": { + "node": ">=6" } }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true - }, - "pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", - "dev": true - }, - "queue-microtask": { + "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 - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" - }, - "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 + "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" + } + ] }, - "resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dev": true, - "requires": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, "dependencies": { - "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 - } + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "resolve-from": { + "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 + "dev": true, + "engines": { + "node": ">=4" + } }, - "resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } }, - "reusify": { + "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 + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } }, - "rimraf": { + "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "requires": { + "dependencies": { "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "run-parallel": { + "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, - "requires": { + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { "queue-microtask": "^1.2.2" } }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "dependencies": { "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "shebang-command": { + "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, - "requires": { + "dependencies": { "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "shebang-regex": { + "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 - }, - "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 + "dev": true, + "engines": { + "node": ">=8" + } }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "slash": { + "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "source-map": { + "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true - }, - "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": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "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.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "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 - } + "optional": true, + "engines": { + "node": ">=0.10.0" } }, - "static-eval": { + "node_modules/static-eval": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", - "requires": { + "dependencies": { "escodegen": "^1.8.1" } }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "strip-ansi": { + "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": { + "dependencies": { "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "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 - }, - "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 + "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, + "engines": { + "node": ">=4" + } }, - "strip-json-comments": { + "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 + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "supports-color": { + "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, - "requires": { + "dependencies": { "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "supports-preserve-symlinks-flag": { + "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 + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "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==", + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "engines": { + "node": ">=6" } }, - "text-table": { + "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "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", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "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" } }, - "ts-jest": { - "version": "29.1.0", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.0.tgz", - "integrity": "sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "^21.0.1" - } - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "requires": { - "@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" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", "dev": true, - "requires": { - "tslib": "^1.8.1" + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "type-check": { + "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": { + "dependencies": { "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "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 - }, - "type-fest": { + "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "underscore": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", - "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } }, - "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", "dev": true, - "requires": { - "punycode": "^2.1.0" + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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 + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - } + "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" } }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "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": { - "makeerror": "1.0.12" + "dependencies": { + "punycode": "^2.1.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" } }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "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" + } }, - "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==", + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "engines": { + "node": ">=0.10.0" } }, - "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": { - "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": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { + "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 }, - "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": "^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.1.1" - } - }, - "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 - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { + "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/package.json b/package.json index 6d27a53..319bf07 100644 --- a/package.json +++ b/package.json @@ -1,37 +1,36 @@ { + "type": "commonjs", "name": "@boltpay/bolt-typescript-sdk", - "version": "0.3.0", + "version": "0.4.0", "author": "BoltPublicAPI", + "main": "./index.js", + "sideEffects": false, + "repository": { + "type": "git", + "url": "https://github.com/BoltApp/Bolt-Typescript-SDK.git", + "directory": "." + }, "scripts": { - "prepare": "tsc --build", - "check:tsc": "tsc --noEmit --skipLibCheck", - "check:eslint": "eslint --max-warnings=0 src", - "check": "npm run check:tsc && npm run check:eslint" + "lint": "eslint --max-warnings=0 src", + "build": "tsc", + "prepare": "npm run build" }, - "dependencies": { - "axios": "^1.1.3", - "jsonpath": "^1.1.1", - "class-transformer": "^0.5.1", - "form-data": "^4.0.0", - "reflect-metadata": "^0.1.13" + "keywords": [], + "peerDependencies": { + "zod": ">= 3" }, "devDependencies": { - "@types/jsonpath": "^0.2.0", - "@types/node": "^18.11.5", - "typescript": "^4.8.4", - "@typescript-eslint/eslint-plugin": "^5.56.0", - "@typescript-eslint/parser": "^5.56.0", - "eslint": "^8.36.0" + "@typescript-eslint/eslint-plugin": "^6.13.2", + "@typescript-eslint/parser": "^6.13.2", + "eslint": "^8.55.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-import": "^2.29.0", + "@types/jsonpath": "^0.2.4", + "typescript": "^5.3.3", + "zod": "^3.22.4" }, - "main": "dist/index.js", - "files": [ - "dist", - "docs", - "README.md" - ], - "repository": { - "type": "git", - "url": "https://github.com/BoltApp/Bolt-Typescript-SDK.git", - "directory": "." + "dependencies": { + "decimal.js": "^10.4.3", + "jsonpath": "^1.1.1" } } diff --git a/src/index.ts b/src/index.ts index 3130314..32044eb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,3 +3,4 @@ */ export * from "./sdk"; +export * from "./lib/config"; diff --git a/src/internal/utils/contenttype.ts b/src/internal/utils/contenttype.ts deleted file mode 100644 index ddf6c82..0000000 --- a/src/internal/utils/contenttype.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. - */ - -export function matchContentType( - contentType: string, - pattern: string, -): boolean { - let res = false; - contentType - .split(";") - .map((ctPart: string) => { - return ctPart.trim(); - }) - .forEach((ctPart: string) => { - if (ctPart === pattern || pattern === "*" || pattern === "*/*") { - res = true; - return; - } - if (ctPart === pattern) { - res = true; - return; - } - const parts: string[] = ctPart.split("/"); - if (parts.length === 2) { - if (`${parts[0]}/*` === pattern || `*/${parts[1]}` === pattern) { - res = true; - return; - } - } - }); - return res; -} diff --git a/src/internal/utils/headers.ts b/src/internal/utils/headers.ts deleted file mode 100644 index 489ba67..0000000 --- a/src/internal/utils/headers.ts +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. - */ - -import { AxiosResponseHeaders, RawAxiosResponseHeaders } from "axios"; -import { - ParamDecorator, - isBooleanRecord, - isEmpty, - isNumberRecord, - isStringRecord, - parseParamDecorator, - valToString, -} from "./utils"; - -import { requestMetadataKey } from "./requestbody"; - -export const headerMetadataKey = "header"; - -export function getHeadersFromRequest(headerParams: any): any { - if (headerParams == null) return; - - const headers: any = {}; - - const fieldNames: string[] = Object.getOwnPropertyNames(headerParams); - fieldNames.forEach((fname) => { - const requestBodyAnn: string = Reflect.getMetadata( - requestMetadataKey, - headerParams, - fname, - ); - - if (requestBodyAnn) return; - - const headerAnn: string = Reflect.getMetadata( - headerMetadataKey, - headerParams, - fname, - ); - - if (headerAnn == null) return; - - const headerDecorator: ParamDecorator = parseParamDecorator( - headerAnn, - fname, - "simple", - false, - ); - - if (headerDecorator == null) return; - - const value: string = serializeHeader( - headerParams[fname], - headerDecorator.Explode, - ); - - if (value != "") headers[headerDecorator.ParamName] = value; - }); - - return headers; -} - -export function getHeadersFromResponse( - headers: RawAxiosResponseHeaders | AxiosResponseHeaders, -): Record { - const reponseHeaders: Record = {}; - - Object.keys(headers).forEach((key) => { - const value = headers[key]; - - if (!value) return; - - if (Array.isArray(value)) { - const h: string[] = []; - - value.forEach((val: any) => { - if (val) { - h.push(String(val)); - } - }); - - reponseHeaders[key] = h; - } else { - reponseHeaders[key] = [value]; - } - }); - - return reponseHeaders; -} - -function serializeHeader(header: any, explode: boolean): string { - const headerVals: string[] = []; - - if (Array.isArray(header)) { - header.forEach((val: any) => { - headerVals.push(valToString(val)); - }); - } else if ( - isStringRecord(header) || - isNumberRecord(header) || - isBooleanRecord(header) - ) { - Object.getOwnPropertyNames(header).forEach((headerKey: string) => { - if (explode) - headerVals.push(`${headerKey}=${valToString(header[headerKey])}`); - else headerVals.push(`${headerKey},${valToString(header[headerKey])}`); - }); - } else if (header instanceof Object) { - Object.getOwnPropertyNames(header).forEach((headerKey: string) => { - const headerAnn: string = Reflect.getMetadata( - headerMetadataKey, - header, - headerKey, - ); - - if (headerAnn == null) return; - - const headerDecorator: ParamDecorator = parseParamDecorator( - headerAnn, - headerKey, - "simple", - explode, - ); - - if (headerDecorator == null) return; - - const headerFieldValue = valToString(header[headerKey]); - - if (isEmpty(headerFieldValue)) return; - else if (explode) - headerVals.push(`${headerDecorator.ParamName}=${headerFieldValue}`); - else headerVals.push(`${headerDecorator.ParamName},${headerFieldValue}`); - }); - } else { - return String(header); - } - return headerVals.join(","); -} diff --git a/src/internal/utils/index.ts b/src/internal/utils/index.ts deleted file mode 100644 index db8bb23..0000000 --- a/src/internal/utils/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. - */ - -export * from "./contenttype"; -export * from "./headers"; -export * from "./pathparams"; -export * from "./queryparams"; -export * from "./requestbody"; -export * from "./retries"; -export * from "./security"; -export * from "./utils"; diff --git a/src/internal/utils/pathparams.ts b/src/internal/utils/pathparams.ts deleted file mode 100644 index 0b8137a..0000000 --- a/src/internal/utils/pathparams.ts +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. - */ - -import { - ParamDecorator, - isBooleanRecord, - isEmpty, - isNumberRecord, - isStringRecord, - parseParamDecorator, - valToString, -} from "./utils"; - -export const ppMetadataKey = "pathParam"; - -export function getSimplePathParams( - paramName: string, - paramValue: any, - explode: boolean, -): Map { - const pathParams: Map = new Map(); - const ppVals: string[] = []; - - if (Array.isArray(paramValue)) { - paramValue.forEach((param) => { - ppVals.push(encodeURIComponent(valToString(param))); - }); - pathParams.set(paramName, ppVals.join(",")); - } else if ( - isStringRecord(paramValue) || - isNumberRecord(paramValue) || - isBooleanRecord(paramValue) - ) { - Object.getOwnPropertyNames(paramValue).forEach((paramKey: string) => { - const paramFieldValue = encodeURIComponent( - valToString(paramValue[paramKey]), - ); - - if (explode) ppVals.push(`${paramKey}=${paramFieldValue}`); - else ppVals.push(`${paramKey},${paramFieldValue}`); - }); - - pathParams.set(paramName, ppVals.join(",")); - } else if (paramValue instanceof Object) { - Object.getOwnPropertyNames(paramValue).forEach((paramKey: string) => { - const ppAnn: string = Reflect.getMetadata( - ppMetadataKey, - paramValue, - paramKey, - ); - - if (ppAnn == null) return; - - const ppDecorator: ParamDecorator = parseParamDecorator( - ppAnn, - paramKey, - "simple", - explode, - ); - - if (ppDecorator == null) return; - - const paramFieldValue = encodeURIComponent( - valToString(paramValue[paramKey]), - ); - - if (isEmpty(paramFieldValue)) return; - else if (explode) - ppVals.push(`${ppDecorator.ParamName}=${paramFieldValue}`); - else ppVals.push(`${ppDecorator.ParamName},${paramFieldValue}`); - }); - - pathParams.set(paramName, ppVals.join(",")); - } else { - pathParams.set(paramName, encodeURIComponent(valToString(paramValue))); - } - return pathParams; -} diff --git a/src/internal/utils/queryparams.ts b/src/internal/utils/queryparams.ts deleted file mode 100644 index 34a9f71..0000000 --- a/src/internal/utils/queryparams.ts +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. - */ - -import { - ParamDecorator, - parseParamDecorator, - populateFromGlobals, - shouldQueryParamSerialize, - valToString, -} from "./utils"; - -import { requestMetadataKey } from "./requestbody"; - -export const qpMetadataKey = "queryParam"; -const queryStringPrefix = "?"; - -const filterAndJoin = (strings: string[]): string => - strings.filter((s) => !!s).join("&"); - -export function serializeQueryParams(queryParams: any, globals?: any): string { - const queryStringParts: string[] = []; - if (!queryParams) return filterAndJoin(queryStringParts); - - const fieldNames: string[] = - "__props__" in queryParams - ? queryParams["__props__"].map((prop: any) => prop.key) - : Object.getOwnPropertyNames(queryParams); - - fieldNames.forEach((fname) => { - const requestBodyAnn: string = Reflect.getMetadata( - requestMetadataKey, - queryParams, - fname, - ); - - if (requestBodyAnn) return; - - const qpAnn: string = Reflect.getMetadata( - qpMetadataKey, - queryParams, - fname, - ); - - if (!qpAnn) return { serialize: () => "" }; - - const qpDecorator: ParamDecorator = parseParamDecorator( - qpAnn, - fname, - "form", - true, - ); - - if (!qpDecorator) return; - - let value = queryParams[fname]; - value = populateFromGlobals(value, fname, "queryParam", globals); - - if (qpDecorator.Serialization === "json") - queryStringParts.push(jsonSerializer({ [qpDecorator.ParamName]: value })); - else { - switch (qpDecorator.Style) { - case "deepObject": - queryStringParts.push( - deepObjectSerializer({ [qpDecorator.ParamName]: value }), - ); - return; - case "form": - if (!qpDecorator.Explode) - queryStringParts.push( - noExplodeSerializer({ [qpDecorator.ParamName]: value }), - ); - else - queryStringParts.push( - formSerializerExplode({ [qpDecorator.ParamName]: value }), - ); - return; - case "pipeDelimited": - if (!qpDecorator.Explode) { - queryStringParts.push( - noExplodeSerializer({ [qpDecorator.ParamName]: value }, "|"), - ); - } else { - queryStringParts.push( - formSerializerExplode({ [qpDecorator.ParamName]: value }), - ); - } - return; - default: - queryStringParts.push( - formSerializerExplode({ [qpDecorator.ParamName]: value }), - ); - } - } - }); - return queryStringPrefix + filterAndJoin(queryStringParts); -} - -// TODO: Add support for disabling percent encoding for reserved characters -function jsonSerializer(params: Record): string { - const query: string[] = []; - - Object.entries(Object.assign({}, params)).forEach(([key, value]) => { - query.push(`${key}=${encodeURIComponent(JSON.stringify(value))}`); - }); - return filterAndJoin(query); -} - -// TODO: Add support for disabling percent encoding for reserved characters -function noExplodeSerializer( - params: Record, - delimiter = ",", -): string { - const query: string[] = []; - - Object.entries(Object.assign({}, params)).forEach(([key, value]) => { - if (!shouldQueryParamSerialize(value)) return; - if (value !== Object(value)) - query.push(`${key}=${encodeURIComponent(valToString(value))}`); - else if (Array.isArray(value)) { - const values: string = value.map((aValue) => aValue).join(delimiter); - - query.push(`${key}=${encodeURIComponent(values)}`); - } else { - const values: string = Object.getOwnPropertyNames(value) - .map((paramKey: string) => { - const qpAnn: string = Reflect.getMetadata( - qpMetadataKey, - value, - paramKey, - ); - - const qpDecorator: ParamDecorator = parseParamDecorator( - qpAnn, - paramKey, - "form", - true, - ); - - if (qpDecorator == null) return; - - const key = qpDecorator.ParamName || paramKey; - return `${key}${delimiter}${valToString(value[paramKey])}`; - }) - .join(delimiter); - query.push(`${key}=${encodeURIComponent(values)}`); - } - }); - return filterAndJoin(query); -} - -// TODO: Add support for disabling percent encoding for reserved characters -function formSerializerExplode(params: Record): string { - const query: string[] = []; - - Object.entries(Object.assign({}, params)).forEach(([key, value]) => { - if (!shouldQueryParamSerialize(value)) return; - if (value !== Object(value)) - query.push(`${key}=${encodeURIComponent(value)}`); - else if (Array.isArray(value)) { - query.push( - value - .map((aValue) => `${key}=${encodeURIComponent(valToString(aValue))}`) - .join("&"), - ); - } else - query.push( - Object.getOwnPropertyNames(value) - .map((paramKey: string) => { - const qpAnn: string = Reflect.getMetadata( - qpMetadataKey, - value, - paramKey, - ); - - const qpDecorator: ParamDecorator = parseParamDecorator( - qpAnn, - paramKey, - "form", - true, - ); - - if (qpDecorator == null) return; - - const key = qpDecorator.ParamName || paramKey; - return `${key}=${encodeURIComponent(valToString(value[paramKey]))}`; - }) - .join("&"), - ); - }); - return filterAndJoin(query); -} - -// TODO: Add support for disabling percent encoding for reserved characters -function deepObjectSerializer(params: Record): string { - const query: string[] = []; - - Object.entries(Object.assign({}, params)).forEach(([key, value]) => { - if (!shouldQueryParamSerialize(value)) return; - if (value !== Object(value)) - query.push(`${key}=${encodeURIComponent(value)}`); - else if (Array.isArray(value)) { - query.push( - value - .map( - ([objKey, objValue]) => - `${key}[${objKey}]=${encodeURIComponent(valToString(objValue))}`, - ) - .join("&"), - ); - } else - query.push( - Object.getOwnPropertyNames(value) - .map((paramKey: string) => { - const qpAnn: string = Reflect.getMetadata( - qpMetadataKey, - value, - paramKey, - ); - - const qpDecorator: ParamDecorator = parseParamDecorator( - qpAnn, - paramKey, - "form", - true, - ); - - if (qpDecorator == null) return; - - // For deep objects, arr is wrapped inside object - if (Array.isArray(value[paramKey])) - return value[paramKey] - .map( - (arrValue: any) => - `${key}[${paramKey}]=${encodeURIComponent( - valToString(arrValue), - )}`, - ) - .join("&"); - return `${key}[${paramKey}]=${encodeURIComponent( - valToString(value[paramKey]), - )}`; - }) - .join("&"), - ); - }); - return filterAndJoin(query); -} diff --git a/src/internal/utils/requestbody.ts b/src/internal/utils/requestbody.ts deleted file mode 100644 index 0810253..0000000 --- a/src/internal/utils/requestbody.ts +++ /dev/null @@ -1,357 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. - */ - -import { - isBooleanRecord, - isNumberRecord, - isStringRecord, - SerializationMethodToContentType, - valToString, -} from "./utils"; - -import FormData from "form-data"; -import { RFCDate } from "../../types"; -import { classToPlain } from "class-transformer"; - -export const requestMetadataKey = "request"; -const mpFormMetadataKey = "multipart_form"; - -export function serializeRequestBody( - request: any, - requestFieldName: string, - serializationMethod: string -): [Record, any] { - if (request !== Object(request) || !request.hasOwnProperty(requestFieldName)) { - return serializeContentType(SerializationMethodToContentType[serializationMethod], request); - } - - const requestBodyAnn: string = Reflect.getMetadata( - requestMetadataKey, - request, - requestFieldName - ); - if (!requestBodyAnn) { - throw new Error("invalid request type"); - } - - const requestDecorator: RequestDecorator = parseRequestDecorator(requestBodyAnn); - return serializeContentType(requestDecorator.MediaType, request[requestFieldName]); -} - -const serializeContentType = (contentType: string, reqBody: any): [Record, any] => { - let [requestHeaders, requestBody]: [Record, any] = [{}, {}]; - - switch (contentType) { - case "multipart/form-data": - requestBody = encodeMultipartFormData(reqBody); - break; - - case "multipart/mixed": - requestBody = encodeMultipartFormData(reqBody); - requestHeaders = (requestBody as FormData).getHeaders(); - break; - - case "application/x-www-form-urlencoded": - [requestHeaders, requestBody] = [ - { "Content-Type": `${contentType}` }, - encodeFormUrlEncodedData(reqBody), - ]; - break; - - case "application/json": - [requestHeaders, requestBody] = [ - { "Content-Type": `${contentType}` }, - classToPlain(reqBody, { exposeUnsetFields: false }), - ]; - break; - case "text/json": - [requestHeaders, requestBody] = [{ "Content-Type": `${contentType}` }, reqBody]; - break; - - default: { - requestBody = reqBody; - const requestBodyType: string = typeof requestBody; - if ( - requestBodyType === "string" || - requestBody instanceof String || - requestBody instanceof Uint8Array - ) - requestHeaders = { "Content-Type": `${contentType}` }; - else - throw new Error( - `invalid request body type ${requestBodyType} for mediaType ${contentType}` - ); - } - } - return [requestHeaders, requestBody]; -}; - -const encodeFormUrlEncodedData = (data: any): string => { - const fieldNames: string[] = Object.getOwnPropertyNames(data); - - let urlencoded = ""; - let amp = ""; - const appendPair = (key: string, value: string) => { - urlencoded += `${amp}${encodeURIComponent(key)}=${encodeURIComponent(value)}`; - amp = "&"; - }; - - if (isNumberRecord(data) || isBooleanRecord(data) || isStringRecord(data)) { - fieldNames.forEach((fname) => { - const formAnn: string = Reflect.getMetadata("form", data, fname); - let name = fname; - if (formAnn) { - const formDecorator: FormDecorator = parseFormDecorator(formAnn); - name = formDecorator.Name ?? fname; - } - appendPair(name, data[fname]?.toString()); - }); - } else { - fieldNames.forEach((fname) => { - const formAnn: string = Reflect.getMetadata("form", data, fname); - if (formAnn === null) { - return; - } - const formDecorator: FormDecorator = parseFormDecorator(formAnn); - - if (formDecorator.JSON) { - const name = formDecorator.Name ?? fname; - const val = JSON.stringify(data[fname]); - appendPair(name, val); - } else if (formDecorator.Style === "form") { - let parsed: Record; - const name = formDecorator.Name ?? fname; - if (formDecorator.Explode === true) { - parsed = formExplode(name, data[fname]); - } else { - parsed = formNotExplode(name, data[fname]); - } - - Object.keys(parsed).forEach((key) => { - parsed[key].forEach((v) => appendPair(key, v)); - }); - return; - } - }); - } - return urlencoded; -}; - -const formExplode = (fname: string, data: any): Record => { - const exploded: Record = {}; - - if (Array.isArray(data)) { - data.forEach((value) => { - if (!exploded[fname]) { - exploded[fname] = []; - } - exploded[fname].push(value); - }); - } else if (typeof data === "object") { - if (data instanceof Date || data instanceof RFCDate) { - if (!exploded[fname]) { - exploded[fname] = []; - } - exploded[fname].push(valToString(data)); - } else { - Object.keys(data).forEach((key) => { - if (!exploded[key]) { - exploded[key] = []; - } - exploded[key].push(data[key]); - }); - } - } else { - if (!exploded[fname]) { - exploded[fname] = []; - } - exploded[fname].push(valToString(data)); - } - return exploded; -}; - -const formNotExplode = (fname: string, data: any): Record => { - const notExploded: Record = {}; - - if (Array.isArray(data)) { - if (!notExploded[fname]) { - notExploded[fname] = []; - } - notExploded[fname].push(data.map((item) => item.toString()).join(",")); - } else if (typeof data === "object") { - if (data instanceof Date || data instanceof RFCDate) { - if (!notExploded[fname]) { - notExploded[fname] = []; - } - notExploded[fname].push(valToString(data)); - } else { - Object.keys(data).forEach((key) => { - if (!notExploded[key]) { - notExploded[key] = []; - } - notExploded[fname].push(`${key}=${data[key]}`); - }); - } - } else { - if (!notExploded[fname]) { - notExploded[fname] = []; - } - notExploded[fname].push(valToString(data)); - } - return notExploded; -}; - -function parseFormDecorator(formAnn: string): FormDecorator { - const formDecorator: FormDecorator = new FormDecorator("", "form", false, false); - formAnn.split(";").forEach((formAnnPart) => { - const [formKey, formVal]: string[] = formAnnPart.split("="); - switch (formKey) { - case "name": - formDecorator.Name = formVal; - break; - case "style": - formDecorator.Style = formVal; - break; - case "explode": - formDecorator.Explode = formVal === "true"; - break; - case "json": - formDecorator.JSON = formVal === "true"; - break; - } - }); - - return formDecorator; -} - -class FormDecorator { - Name?: string; - Style?: string; - Explode?: boolean; - JSON?: boolean; - - constructor(Name?: string, Style?: string, Explode?: boolean, JSON?: boolean) { - this.Name = Name; - this.Style = Style; - this.Explode = Explode; - this.JSON = JSON; - } -} - -function encodeMultipartFormData(form: any): FormData { - const formData: FormData = new FormData(); - - const fieldNames: string[] = Object.getOwnPropertyNames(form); - fieldNames.forEach((fname) => { - const mpFormAnn: string = Reflect.getMetadata(mpFormMetadataKey, form, fname); - - if (mpFormAnn == null) return; - - const mpFormDecorator: MultipartFormDecorator = parseMultipartFormDecorator(mpFormAnn); - - if (mpFormDecorator.File) return encodeMultipartFormDataFile(formData, form[fname]); - else if (mpFormDecorator.JSON) { - formData.append(mpFormDecorator.Name, JSON.stringify(form[fname])); - } else { - if (Array.isArray(form[fname])) { - form[fname].forEach((val: any) => { - formData.append(mpFormDecorator.Name + "[]", valToString(val)); - }); - } else { - formData.append(mpFormDecorator.Name, valToString(form[fname])); - } - } - }); - return formData; -} - -function encodeMultipartFormDataFile(formData: FormData, file: any): FormData { - if (typeof file !== "object" || Array.isArray(file) || file == null) { - throw new Error("invalid type for multipart/form-data file"); - } - let content: any = null; - let fileName = ""; - let mpFormDecoratorName = ""; - - const fieldNames: string[] = Object.getOwnPropertyNames(file); - fieldNames.forEach((fname) => { - const mpFormAnn: string = Reflect.getMetadata(mpFormMetadataKey, file, fname); - - if (mpFormAnn == null) return; - - const mpFormDecorator: MultipartFormDecorator = parseMultipartFormDecorator(mpFormAnn); - - if (!mpFormDecorator.Content && mpFormDecorator.Name == "") return; - if (mpFormDecorator.Content) content = file[fname]; - else { - mpFormDecoratorName = mpFormDecorator.Name; - fileName = file[fname]; - } - }); - - if (mpFormDecoratorName === "" || fileName === "" || content == null) { - throw new Error("invalid multipart/form-data file"); - } - formData.append(mpFormDecoratorName, Buffer.from(content), fileName); - return formData; -} - -function parseMultipartFormDecorator(mpFormAnn: string): MultipartFormDecorator { - // example "name=file" - const mpFormDecorator: MultipartFormDecorator = new MultipartFormDecorator( - false, - false, - false, - "" - ); - mpFormAnn.split(";").forEach((mpFormAnnPart) => { - const [mpFormKey, mpFormVal]: string[] = mpFormAnnPart.split("="); - switch (mpFormKey) { - case "file": - mpFormDecorator.File = mpFormVal == "true"; - break; - case "content": - mpFormDecorator.Content = mpFormVal == "true"; - break; - case "name": - mpFormDecorator.Name = mpFormVal; - break; - case "json": - mpFormDecorator.JSON = mpFormVal == "true"; - break; - } - }); - - return mpFormDecorator; -} - -class MultipartFormDecorator { - File: boolean; - Content: boolean; - JSON: boolean; - Name: string; - - constructor(File: boolean, Content: boolean, JSON: boolean, Name: string) { - this.File = File; - this.Content = Content; - this.JSON = JSON; - this.Name = Name; - } -} - -function parseRequestDecorator(requestAnn: string): RequestDecorator { - // example "media_type=multipart/form-data" - const requestDecorator: RequestDecorator = new RequestDecorator("application/octet-stream"); - const [mediaTypeKey, mediaTypeVal]: string[] = requestAnn.split("="); - if (mediaTypeKey === "media_type") requestDecorator.MediaType = mediaTypeVal; - return requestDecorator; -} - -class RequestDecorator { - MediaType: string; - - constructor(MediaType: string) { - this.MediaType = MediaType; - } -} diff --git a/src/internal/utils/retries.ts b/src/internal/utils/retries.ts deleted file mode 100644 index 6b03d6f..0000000 --- a/src/internal/utils/retries.ts +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. - */ - -import { AxiosError, AxiosResponse } from "axios"; - -export class BackoffStrategy { - initialInterval: number; - maxInterval: number; - exponent: number; - maxElapsedTime: number; - - constructor( - initialInterval: number, - maxInterval: number, - exponent: number, - maxElapsedTime: number, - ) { - this.initialInterval = initialInterval; - this.maxInterval = maxInterval; - this.exponent = exponent; - this.maxElapsedTime = maxElapsedTime; - } -} - -export class RetryConfig { - strategy: "backoff" | "none"; - backoff?: BackoffStrategy; - retryConnectionErrors: boolean; - - constructor( - strategy: "backoff" | "none", - backoff?: BackoffStrategy, - retryConnectionErrors = true, - ) { - this.strategy = strategy; - this.backoff = backoff; - this.retryConnectionErrors = retryConnectionErrors; - } -} - -export class Retries { - config: RetryConfig; - statusCodes: string[]; - - constructor(config: RetryConfig, statusCodes: string[]) { - this.config = config; - this.statusCodes = statusCodes; - } -} - -class PermanentError extends Error { - inner: unknown; - - constructor(inner: unknown) { - super("Permanent error"); - this.inner = inner; - - Object.setPrototypeOf(this, PermanentError.prototype); - } -} - -class TemporaryError extends Error { - res: AxiosResponse; - - constructor(res: AxiosResponse) { - super("Temporary error"); - this.res = res; - - Object.setPrototypeOf(this, TemporaryError.prototype); - } -} - -export async function Retry( - fn: () => Promise>, - retries: Retries, -): Promise> { - switch (retries.config.strategy) { - case "backoff": - return retryBackoff( - async () => { - try { - const res = await fn(); - if (isRetryableResponse(res, retries.statusCodes)) { - throw new TemporaryError(res); - } - - return res; - } catch (err) { - if (err instanceof AxiosError) { - if (err.response) { - if (isRetryableResponse(err.response, retries.statusCodes)) { - throw err; - } - throw new PermanentError(err); - } else if (err.request) { - throw err; - } else { - throw new PermanentError(err); - } - } else if (err instanceof TemporaryError) { - throw err; - } - throw new PermanentError(err); - } - }, - retries.config.backoff?.initialInterval ?? 500, - retries.config.backoff?.maxInterval ?? 60000, - retries.config.backoff?.exponent ?? 1.5, - retries.config.backoff?.maxElapsedTime ?? 3600000, - ); - default: - return await fn(); - } -} - -function isRetryableResponse( - res: AxiosResponse, - statusCodes: string[], -): boolean { - for (const code of statusCodes) { - if (code.toUpperCase().includes("X")) { - const codeRange = parseInt(code[0]); - if (isNaN(codeRange)) { - throw new Error("Invalid status code range"); - } - - const s = res.status / 100; - - if (s >= codeRange && s < codeRange + 1) { - return true; - } - } else if (res.status == parseInt(code)) { - return true; - } - } - - return false; -} - -async function retryBackoff( - fn: () => Promise>, - initialInterval: number, - maxInterval: number, - exponent: number, - maxElapsedTime: number, -): Promise> { - const start = Date.now(); - let x = 0; - - // eslint-disable-next-line no-constant-condition - while (true) { - try { - return await fn(); - } catch (err) { - if (err instanceof PermanentError) { - throw err.inner; - } - - const now = Date.now(); - if (now - start > maxElapsedTime) { - if (err instanceof TemporaryError) { - return err.res; - } - - throw err; - } - - const d = Math.min( - initialInterval * Math.pow(x, exponent) + Math.random() * 1000, - maxInterval, - ); - - await delay(d); - x++; - } - } -} - -async function delay(delay: number): Promise { - return new Promise((resolve) => setTimeout(resolve, delay)); -} diff --git a/src/internal/utils/security.ts b/src/internal/utils/security.ts deleted file mode 100644 index d9c693d..0000000 --- a/src/internal/utils/security.ts +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. - */ - -const securityMetadataKey = "security"; - -export type SecurityProperties = { - params: Record; - headers: Record; -}; - -export function parseSecurityProperties(security: any): SecurityProperties { - return parseSecurityClass(security); -} - -function parseSecurityDecorator(securityAnn: string): SecurityDecorator { - // scheme=true;type=apiKey;subtype=header" - let option = false; - let scheme = false; - let name = ""; - let securityType = ""; - let securitySubType = ""; - - securityAnn.split(";").forEach((securityAnnPart) => { - const [sKey, sVal]: string[] = securityAnnPart.split("="); - switch (sKey) { - case "name": - name = sVal; - break; - case "type": - securityType = sVal; - break; - case "subtype": - securitySubType = sVal; - break; - case "option": - option = sVal == "true"; - break; - case "scheme": - scheme = sVal == "true"; - } - }); - - return new SecurityDecorator( - name, - securityType, - option, - scheme, - securitySubType, - ); -} - -function parseSecurityClass(security: any): SecurityProperties { - const fieldNames: string[] = Object.getOwnPropertyNames(security); - const properties: SecurityProperties = { - params: {}, - headers: {}, - }; - fieldNames.forEach((fname) => { - const securityAnn: string = Reflect.getMetadata( - securityMetadataKey, - security, - fname, - ); - if (securityAnn == null) return; - const securityDecorator: SecurityDecorator = - parseSecurityDecorator(securityAnn); - if (securityDecorator == null) return; - - const value = security[fname]; - - if (securityDecorator.Option) { - return parseSecurityOption(properties, value); - } else if (securityDecorator.Scheme) { - if (securityDecorator.SubType === "basic" && value !== Object(value)) { - return parseSecurityScheme(properties, securityDecorator, security); - } else { - return parseSecurityScheme(properties, securityDecorator, value); - } - } - }); - - return properties; -} - -function parseSecurityOption( - properties: SecurityProperties, - optionType: any, -): void { - const fieldNames: string[] = Object.getOwnPropertyNames(optionType); - fieldNames.forEach((fname) => { - const securityAnn: string = Reflect.getMetadata( - securityMetadataKey, - optionType, - fname, - ); - if (securityAnn == null) return; - const securityDecorator: SecurityDecorator = - parseSecurityDecorator(securityAnn); - if (securityDecorator == null || !securityDecorator.Scheme) return; - return parseSecurityScheme( - properties, - securityDecorator, - optionType[fname], - ); - }); -} - -function parseSecurityScheme( - properties: SecurityProperties, - schemeDecorator: SecurityDecorator, - scheme: any, -): void { - if (scheme === Object(scheme)) { - if ( - schemeDecorator.Type === "http" && - schemeDecorator.SubType === "basic" - ) { - return parseBasicAuthScheme(properties, scheme); - } - - const fieldNames: string[] = Object.getOwnPropertyNames(scheme); - fieldNames.forEach((fname) => { - const securityAnn: string = Reflect.getMetadata( - securityMetadataKey, - scheme, - fname, - ); - if (securityAnn == null) return; - const securityDecorator: SecurityDecorator = - parseSecurityDecorator(securityAnn); - if (securityDecorator == null || securityDecorator.Name === "") return; - - return parseSecuritySchemeValue( - properties, - schemeDecorator, - securityDecorator, - scheme[fname], - ); - }); - } else { - return parseSecuritySchemeValue( - properties, - schemeDecorator, - schemeDecorator, - scheme, - ); - } -} - -function parseSecuritySchemeValue( - properties: SecurityProperties, - schemeDecorator: SecurityDecorator, - securityDecorator: SecurityDecorator, - value: any, -): void { - switch (schemeDecorator.Type) { - case "apiKey": - switch (schemeDecorator.SubType) { - case "header": - properties.headers[securityDecorator.Name] = value; - break; - case "query": - properties.params[securityDecorator.Name] = value; - break; - case "cookie": { - const securityDecoratorName: string = securityDecorator.Name; - const val: string = value; - properties.headers["Cookie"] = `${securityDecoratorName}=${val}`; - break; - } - default: - throw new Error("not supported"); - } - break; - case "openIdConnect": - properties.headers[securityDecorator.Name] = value; - break; - case "oauth2": - properties.headers[securityDecorator.Name] = value - .toLowerCase() - .startsWith("bearer ") - ? value - : `Bearer ${value}`; - break; - case "http": - switch (schemeDecorator.SubType) { - case "basic": - break; - case "bearer": - properties.headers[securityDecorator.Name] = value - .toLowerCase() - .startsWith("bearer ") - ? value - : `Bearer ${value}`; - break; - default: - throw new Error("not supported"); - } - break; - default: - throw new Error("not supported"); - } -} - -function parseBasicAuthScheme( - properties: SecurityProperties, - scheme: any, -): void { - let username, - password = ""; - - const fieldNames: string[] = Object.getOwnPropertyNames(scheme); - fieldNames.forEach((fname) => { - const securityAnn: string = Reflect.getMetadata( - securityMetadataKey, - scheme, - fname, - ); - if (securityAnn == null) return; - const securityDecorator: SecurityDecorator = - parseSecurityDecorator(securityAnn); - if (securityDecorator == null || securityDecorator.Name === "") return; - - switch (securityDecorator.Name) { - case "username": - username = scheme[fname]; - break; - case "password": - password = scheme[fname]; - break; - } - }); - - properties.headers["Authorization"] = `Basic ${Buffer.from( - `${username}:${password}`, - ).toString("base64")}`; -} - -class SecurityDecorator { - Name: string; - Type: string; - Option: boolean; - Scheme: boolean; - SubType: string; - constructor( - Name: string, - Type: string, - Option: boolean, - Scheme: boolean, - SubType: string, - ) { - this.Name = Name; - this.Type = Type; - this.Option = Option; - this.Scheme = Scheme; - this.SubType = SubType; - } -} diff --git a/src/internal/utils/utils.ts b/src/internal/utils/utils.ts deleted file mode 100644 index 605de00..0000000 --- a/src/internal/utils/utils.ts +++ /dev/null @@ -1,367 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. - */ - -import "reflect-metadata"; - -import { getSimplePathParams, ppMetadataKey } from "./pathparams"; - -import { plainToInstance } from "class-transformer"; -import { RFCDate } from "../../types"; -import { requestMetadataKey } from "./requestbody"; - -export const SerializationMethodToContentType: Record = { - json: "application/json", - form: "application/x-www-form-urlencoded", - multipart: "multipart/form-data", - raw: "application/octet-stream", - string: "text/plain", -}; - -export interface PropInfo { - key: string | symbol; - type: any; - elemType: any; - elemDepth: number; -} - -function isSpeakeasyBase(type: any): boolean { - return type && Object.getPrototypeOf(type)?.name == SpeakeasyBase.name; -} - -function handleArray(value: any, elemType: any, elemDepth: number): any { - if (!Array.isArray(value)) { - return value; - } - - if (elemDepth == 1) { - return value.map((v: any) => new elemType(v)); - } else { - return value.map((v: any) => { - if (Array.isArray(v)) { - return handleArray(v, elemType, elemDepth - 1); - } else if (typeof v == "object") { - return handleObject(v, elemType, elemDepth - 1); - } else { - return v; - } - }); - } -} - -function handleObject(value: any, elemType: any, elemDepth: number): any { - if (typeof value != "object") { - return value; - } - - if (elemDepth == 1) { - return Object.keys(value).reduce((acc: any, key: string) => { - acc[key] = new elemType(value[key]); - return acc; - }, {}); - } else { - return Object.keys(value).reduce((acc: any, key: string) => { - const v = value[key]; - if (Array.isArray(v)) { - acc[key] = handleArray(v, elemType, elemDepth - 1); - } else if (typeof v == "object") { - acc[key] = handleObject(v, elemType, elemDepth - 1); - } else { - acc[key] = v; - } - return acc; - }, {}); - } -} - -export class SpeakeasyBase { - constructor(payload?: Record) { - const props: PropInfo[] = (this as any)["__props__"]; - if (props) { - for (const prop of props) { - if (payload && payload.hasOwnProperty(prop.key)) { - const value = payload[prop.key]; - if (isSpeakeasyBase(prop.type) && value != null) { - (this as any)[prop.key] = new prop.type(value); - } else if (prop.type.name == "Array" && isSpeakeasyBase(prop.elemType)) { - (this as any)[prop.key] = handleArray(value, prop.elemType, prop.elemDepth); - } else if (prop.type.name == "Object" && isSpeakeasyBase(prop.elemType)) { - (this as any)[prop.key] = handleObject( - value, - prop.elemType, - prop.elemDepth - ); - } else if (prop.type.name == "RFCDate") { - if (value instanceof Date) { - (this as any)[prop.key] = new RFCDate(value); - } else { - (this as any)[prop.key] = value; - } - } else { - (this as any)[prop.key] = value; - } - } - } - } - } -} - -export class ParamDecorator { - Style: string; - Explode: boolean; - ParamName: string; - Serialization?: string; - constructor(Style: string, Explode: boolean, ParamName: string, Serialization?: string) { - this.Style = Style; - this.Explode = Explode; - this.ParamName = ParamName; - this.Serialization = Serialization; - } -} - -export function SpeakeasyMetadata< - T extends SpeakeasyBase = Record ->(params?: { data?: string; elemType?: { new (): T }; elemDepth?: number }): PropertyDecorator { - return (target, propertyKey) => { - if (params?.data) { - const annsArr = params.data.split(", "); - - for (let i = 0; i < annsArr.length; i += 2) { - Reflect.defineMetadata(annsArr[i], annsArr[i + 1], target, propertyKey); - } - } - - let props: PropInfo[]; - if (target.hasOwnProperty("__props__")) { - props = (target as any)["__props__"]; - } else { - props = (target as any)["__props__"] = []; - } - - const prop = { - key: propertyKey, - type: Reflect.getMetadata("design:type", target, propertyKey), - } as PropInfo; - - if (params?.elemType) { - prop.elemType = params.elemType; - prop.elemDepth = params.elemDepth || 1; - } - - props.push(prop); - }; -} - -export function templateUrl(stringWithParams: string, params: Record): string { - let res: string = stringWithParams; - if (params) { - Object.entries(params).forEach(([key, value]) => { - const match: string = "{" + key + "}"; - res = res.replaceAll(match, value); - }); - } - return res; -} - -export function generateURL( - serverURL: string, - path: string, - pathParams: any, - globals?: any -): string { - const url: string = serverURL.replace(/\/$/, "") + path; - const parsedParameters: Record = {}; - - const fieldNames: string[] = - "__props__" in pathParams - ? pathParams["__props__"].map((prop: any) => prop.key) - : Object.getOwnPropertyNames(pathParams); - fieldNames.forEach((fname) => { - const requestBodyAnn: string = Reflect.getMetadata(requestMetadataKey, pathParams, fname); - - if (requestBodyAnn) return; - - const ppAnn: string = Reflect.getMetadata(ppMetadataKey, pathParams, fname); - - if (ppAnn == null) return; - - const ppDecorator: ParamDecorator = parseParamDecorator(ppAnn, fname, "simple", false); - if (ppDecorator == null) return; - - let value = pathParams[fname]; - value = populateFromGlobals(value, fname, "pathParam", globals); - - if (ppDecorator.Serialization) { - switch (ppDecorator.Serialization) { - case "json": - parsedParameters[ppDecorator.ParamName] = encodeURIComponent( - JSON.stringify(value) - ); - break; - } - } else { - switch (ppDecorator.Style) { - case "simple": { - const simpleParams: Map = getSimplePathParams( - ppDecorator.ParamName, - value, - ppDecorator.Explode - ); - simpleParams.forEach((value, key) => { - parsedParameters[key] = value; - }); - } - } - } - }); - return templateUrl(url, parsedParameters); -} - -export function parseParamDecorator( - ann: string, - fName: string, - defaultStyle: string, - defaultExplode: boolean -): ParamDecorator { - // style=simple;explode=false;name=apiID - const decorator: ParamDecorator = new ParamDecorator( - defaultStyle, - defaultExplode, - fName.toLowerCase() - ); - - if (ann == null) return decorator; - ann.split(";").forEach((annPart) => { - const [paramKey, paramVal]: string[] = annPart.split("="); - switch (paramKey) { - case "style": - decorator.Style = paramVal; - break; - case "explode": - decorator.Explode = paramVal == "true"; - break; - case "name": - decorator.ParamName = paramVal; - break; - case "serialization": - decorator.Serialization = paramVal; - break; - } - }); - return decorator; -} - -export function isStringRecord(obj: any): obj is Record { - if (typeof obj !== "object") return false; - - if (Object.getOwnPropertySymbols(obj).length > 0) return false; - - return Object.getOwnPropertyNames(obj).every((prop) => typeof obj[prop] === "string"); -} - -export function isNumberRecord(obj: any): obj is Record { - if (typeof obj !== "object") return false; - - if (Object.getOwnPropertySymbols(obj).length > 0) return false; - - return Object.getOwnPropertyNames(obj).every((prop) => typeof obj[prop] === "number"); -} - -export function isBooleanRecord(obj: any): obj is Record { - if (typeof obj !== "object") return false; - - if (Object.getOwnPropertySymbols(obj).length > 0) return false; - - return Object.getOwnPropertyNames(obj).every((prop) => typeof obj[prop] === "boolean"); -} - -export function isEmpty(value: any): boolean { - // check for undefined, null, and NaN - let res = false; - if (typeof value === "number") res = Number.isNaN(value); - else if (typeof value === "string") res = value === ""; - return res || value == null; -} - -export function objectToClass(value: T, klass?: any, elemDepth = 0): any { - if (value !== Object(value)) { - return value; - } - - if (elemDepth === 0 && klass != null) { - return plainToInstance(klass, value, { - excludeExtraneousValues: true, - exposeUnsetFields: false, - }) as typeof klass; - } - - if (Array.isArray(value)) { - return value.map((v) => objectToClass(v, klass, elemDepth - 1)); - } - - if (typeof value === "object" && value != null) { - const copiedRecord: Record = {}; - for (const key in value) { - copiedRecord[key] = objectToClass(value[key], klass, elemDepth - 1); - } - return copiedRecord; - } - - return plainToInstance(klass, value, { - excludeExtraneousValues: true, - exposeUnsetFields: false, - }) as typeof klass; -} - -export function getResFieldDepth(res: any): number { - const props = res["__props__"]; - let resFieldDepth = 1; - - if (props) { - for (const prop of props) { - if (res && res.hasOwnProperty(prop.key)) { - if ( - (prop.type.name == "Array" || prop.type.name == "Object") && - isSpeakeasyBase(prop.elemType) - ) { - if (prop.elemDepth > resFieldDepth) { - resFieldDepth = prop.elemDepth; - break; - } - } - } - } - } - - return resFieldDepth; -} - -export function populateFromGlobals( - value: any, - fieldName: string, - paramType: string, - globals: any -): any { - if (globals && value === undefined) { - if ("parameters" in globals && paramType in globals.parameters) { - const globalValue = globals.parameters[paramType][fieldName]; - if (globalValue !== undefined) { - value = globalValue; - } - } - } - - return value; -} - -export function valToString(value: any): string { - if (value instanceof Date) { - return value.toISOString(); - } - - return value.toString(); -} - -export function shouldQueryParamSerialize(value: any): boolean { - return !(value === undefined || value === null || value === ""); -} diff --git a/src/lib/base64.ts b/src/lib/base64.ts new file mode 100644 index 0000000..cda0764 --- /dev/null +++ b/src/lib/base64.ts @@ -0,0 +1,37 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import * as z from "zod"; + +export function bytesToBase64(u8arr: Uint8Array): string { + return btoa(String.fromCodePoint(...u8arr)); +} + +export function bytesFromBase64(encoded: string): Uint8Array { + return Uint8Array.from(atob(encoded), (c) => c.charCodeAt(0)); +} + +export function stringToBytes(str: string): Uint8Array { + return new TextEncoder().encode(str); +} + +export function stringFromBytes(u8arr: Uint8Array): string { + return new TextDecoder().decode(u8arr); +} + +export function stringToBase64(str: string): string { + return bytesToBase64(stringToBytes(str)); +} + +export function stringFromBase64(b64str: string): string { + return stringFromBytes(bytesFromBase64(b64str)); +} + +export const zodOutbound = z + .instanceof(Uint8Array) + .or(z.string().transform(stringToBytes)); + +export const zodInbound = z + .instanceof(Uint8Array) + .or(z.string().transform(bytesFromBase64)); diff --git a/src/lib/config.ts b/src/lib/config.ts new file mode 100644 index 0000000..f37ccbc --- /dev/null +++ b/src/lib/config.ts @@ -0,0 +1,71 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { HTTPClient } from "./http"; +import { pathToFunc } from "./url"; +import { RetryConfig } from "./retries"; +import * as components from "../models/components"; + +/** + * Contains the list of servers available to the SDK + */ +export const ServerList = ["https://{environment}.bolt.com/v3"] as const; + +export enum ServerEnvironment { + Api = "api", + ApiSandbox = "api-sandbox", +} + +export type SDKOptions = { + /** + * The security details required to authenticate the SDK + */ + security?: components.Security | (() => Promise); + + httpClient?: HTTPClient; + /** + * Allows overriding the default server used by the SDK + */ + serverIdx?: number; + /** + * Allows setting the environment variable for url substitution + */ + environment?: ServerEnvironment; + /** + * Allows overriding the default server URL used by the SDK + */ + serverURL?: string; + /** + * Allows overriding the default retry config used by the SDK + */ + retryConfig?: RetryConfig; +}; + +export function serverURLFromOptions(options: SDKOptions): URL { + let serverURL = options.serverURL; + + const serverParams = [ + { + environment: options.environment?.toString() ?? "api-sandbox", + }, + ]; + let params: Record = {}; + const serverIdx = options.serverIdx ?? 0; + + if (!serverURL) { + serverURL = ServerList[serverIdx] || ""; + params = serverParams[serverIdx] || {}; + } + + const u = pathToFunc(serverURL)(params); + return new URL(u); +} + +export const SDK_METADATA = Object.freeze({ + language: "typescript", + openapiDocVersion: "3.0.1", + sdkVersion: "0.4.0", + genVersion: "2.230.3", + userAgent: "speakeasy-sdk/typescript 0.4.0 2.230.3 3.0.1 @boltpay/bolt-typescript-sdk", +}); diff --git a/src/lib/encodings.ts b/src/lib/encodings.ts new file mode 100644 index 0000000..4ee538b --- /dev/null +++ b/src/lib/encodings.ts @@ -0,0 +1,384 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { bytesToBase64 } from "./base64"; + +export class EncodingError extends Error { + constructor(message: string, options?: ErrorOptions) { + super(message, options); + this.name = "EncodingError"; + } +} + +export function encodeMatrix( + key: string, + value: unknown, + options?: { explode?: boolean; charEncoding?: "percent" | "none" }, +) { + let out = ""; + const pairs: [string, unknown][] = options?.explode + ? explode(key, value) + : [[key, value]]; + + const encodeString = (v: string) => { + return options?.charEncoding === "percent" ? encodeURIComponent(v) : v; + }; + const encodeValue = (v: unknown) => encodeString(serializeValue(v)); + + pairs.forEach(([pk, pv]) => { + let tmp = ""; + let encValue = ""; + + if (pv === undefined) { + return; + } else if (Array.isArray(pv)) { + encValue = mapDefined(pv, (v) => `${encodeValue(v)}`).join(","); + } else if (isPlainObject(pv)) { + encValue = mapDefinedEntries(Object.entries(pv), ([k, v]) => { + return `,${encodeString(k)},${encodeValue(v)}`; + }).join(""); + encValue = encValue.slice(1); + } else { + encValue = `${encodeValue(pv)}`; + } + + const keyPrefix = encodeString(pk); + tmp = `${keyPrefix}=${encValue}`; + // trim trailing '=' if value was empty + if (tmp === `${keyPrefix}=`) { + tmp = tmp.slice(0, -1); + } + + // If we end up with the nothing then skip forward + if (!tmp) { + return; + } + + out += `;${tmp}`; + }); + + return out; +} + +export function encodeLabel( + key: string, + value: unknown, + options?: { explode?: boolean; charEncoding?: "percent" | "none" }, +) { + let out = ""; + const pairs: [string, unknown][] = options?.explode + ? explode(key, value) + : [[key, value]]; + + const encodeString = (v: string) => { + return options?.charEncoding === "percent" ? encodeURIComponent(v) : v; + }; + const encodeValue = (v: unknown) => encodeString(serializeValue(v)); + + pairs.forEach(([pk, pv]) => { + let encValue = ""; + + if (pv === undefined) { + return; + } else if (Array.isArray(pv)) { + encValue = mapDefined(pv, (v) => `${encodeValue(v)}`).join("."); + } else if (isPlainObject(pv)) { + encValue = mapDefinedEntries(Object.entries(pv), ([k, v]) => { + return `.${encodeString(k)}.${encodeValue(v)}`; + }).join(""); + encValue = encValue.slice(1); + } else { + const k = + options?.explode && isPlainObject(value) ? `${encodeString(pk)}=` : ""; + encValue = `${k}${encodeValue(pv)}`; + } + + out += `.${encValue}`; + }); + + return out; +} + +function formEncoder(sep: string) { + return ( + key: string, + value: unknown, + options?: { explode?: boolean; charEncoding?: "percent" | "none" }, + ) => { + let out = ""; + const pairs: [string, unknown][] = options?.explode + ? explode(key, value) + : [[key, value]]; + + const encodeString = (v: string) => { + return options?.charEncoding === "percent" ? encodeURIComponent(v) : v; + }; + + const encodeValue = (v: unknown) => encodeString(serializeValue(v)); + + const encodedSep = encodeString(sep); + + pairs.forEach(([pk, pv]) => { + let tmp = ""; + let encValue = ""; + + if (pv === undefined) { + return; + } else if (Array.isArray(pv)) { + encValue = mapDefined(pv, (v) => `${encodeValue(v)}`).join(encodedSep); + } else if (isPlainObject(pv)) { + encValue = mapDefinedEntries(Object.entries(pv), ([k, v]) => { + return `${encodeString(k)}${encodedSep}${encodeValue(v)}`; + }).join(encodedSep); + } else { + encValue = `${encodeValue(pv)}`; + } + + tmp = `${encodeString(pk)}=${encValue}`; + + // If we end up with the nothing then skip forward + if (!tmp || tmp === "=") { + return; + } + + out += `&${tmp}`; + }); + + return out.slice(1); + }; +} + +export const encodeForm = formEncoder(","); +export const encodeSpaceDelimited = formEncoder(" "); +export const encodePipeDelimited = formEncoder("|"); + +export function encodeBodyForm( + key: string, + value: unknown, + options?: { explode?: boolean; charEncoding?: "percent" | "none" }, +) { + let out = ""; + const pairs: [string, unknown][] = options?.explode + ? explode(key, value) + : [[key, value]]; + + const encodeString = (v: string) => { + return options?.charEncoding === "percent" ? encodeURIComponent(v) : v; + }; + + const encodeValue = (v: unknown) => encodeString(serializeValue(v)); + + pairs.forEach(([pk, pv]) => { + let tmp = ""; + let encValue = ""; + + if (pv === undefined) { + return; + } else if (Array.isArray(pv)) { + encValue = JSON.stringify(pv, jsonReplacer); + } else if (isPlainObject(pv)) { + encValue = JSON.stringify(pv, jsonReplacer); + } else { + encValue = `${encodeValue(pv)}`; + } + + tmp = `${encodeString(pk)}=${encValue}`; + + // If we end up with the nothing then skip forward + if (!tmp || tmp === "=") { + return; + } + + out += `&${tmp}`; + }); + + return out.slice(1); +} + +export function encodeDeepObject( + key: string, + value: unknown, + options?: { charEncoding?: "percent" | "none" }, +) { + if (value == null) { + return ""; + } + + let out = ""; + + const encodeString = (v: string) => { + return options?.charEncoding === "percent" ? encodeURIComponent(v) : v; + }; + + if (!isPlainObject(value)) { + throw new EncodingError( + `Value of parameter '${key}' which uses deepObject encoding must be an object`, + ); + } + + Object.entries(value).forEach(([ck, cv]) => { + if (cv === undefined) { + return; + } + + const pk = `${key}[${ck}]`; + + if (isPlainObject(cv)) { + throw new EncodingError( + `Value of parameter field '${pk}' cannot be an array or object.`, + ); + } + + const pairs: unknown[] = Array.isArray(cv) ? cv : [cv]; + let encoded = ""; + + encoded = mapDefined(pairs, (v) => { + return `${encodeString(pk)}=${encodeString(serializeValue(v))}`; + }).join("&"); + + out += `&${encoded}`; + }); + + return out.slice(1); +} + +export function encodeJSON( + key: string, + value: unknown, + options?: { explode?: boolean; charEncoding?: "percent" | "none" }, +) { + if (typeof value === "undefined") { + return ""; + } + + const encodeString = (v: string) => { + return options?.charEncoding === "percent" ? encodeURIComponent(v) : v; + }; + + const encVal = encodeString(JSON.stringify(value, jsonReplacer)); + + return options?.explode ? encVal : `${encodeString(key)}=${encVal}`; +} + +export const encodeSimple = ( + key: string, + value: unknown, + options?: { explode?: boolean; charEncoding?: "percent" | "none" }, +) => { + let out = ""; + const pairs: [string, unknown][] = options?.explode + ? explode(key, value) + : [[key, value]]; + + const encodeString = (v: string) => { + return options?.charEncoding === "percent" ? encodeURIComponent(v) : v; + }; + const encodeValue = (v: unknown) => encodeString(serializeValue(v)); + + pairs.forEach(([pk, pv]) => { + let tmp = ""; + + if (pv === undefined) { + return; + } else if (Array.isArray(pv)) { + tmp = mapDefined(pv, (v) => `${encodeValue(v)}`).join(","); + } else if (isPlainObject(pv)) { + tmp = mapDefinedEntries(Object.entries(pv), ([k, v]) => { + return `,${encodeString(k)},${encodeValue(v)}`; + }).join(""); + tmp = tmp.slice(1); + } else { + const k = options?.explode && isPlainObject(value) ? `${pk}=` : ""; + tmp = `${k}${encodeValue(pv)}`; + } + + // If we end up with the nothing then skip forward + if (!tmp) { + return; + } + + out += `,${tmp}`; + }); + + return out.slice(1); +}; + +function explode(key: string, value: unknown): [string, unknown][] { + if (Array.isArray(value)) { + return value.map((v) => [key, v]); + } else if (isPlainObject(value)) { + const o = value ?? {}; + return Object.entries(o).map(([k, v]) => [k, v]); + } else { + return [[key, value]]; + } +} + +function isPlainObject(value: unknown): value is object { + if (typeof value !== "object" || value == null) return false; + const proto = Object.getPrototypeOf(value); + return proto === null || proto === Object.prototype; +} + +function serializeValue(value: unknown): string { + if (value === null) { + return "null"; + } else if (typeof value === "undefined") { + return ""; + } else if (value instanceof Date) { + return value.toISOString(); + } else if (value instanceof Uint8Array) { + return bytesToBase64(value); + } else if (typeof value === "object") { + return JSON.stringify(value, jsonReplacer); + } + + return `${value}`; +} + +function jsonReplacer(_: string, value: unknown) { + if (value instanceof Uint8Array) { + return bytesToBase64(value); + } else { + return value; + } +} + +function mapDefined(inp: T[], mapper: (v: T) => R): R[] { + return inp.reduce((acc, v) => { + if (v === undefined) { + return acc; + } + + const m = mapper(v); + if (m === undefined) { + return acc; + } + + acc.push(m); + + return acc; + }, []); +} + +function mapDefinedEntries( + inp: Iterable<[K, V]>, + mapper: (v: [K, V]) => R, +): R[] { + const acc: R[] = []; + for (const [k, v] of inp) { + if (v === undefined) { + continue; + } + + const m = mapper([k, v]); + if (m === undefined) { + continue; + } + + acc.push(m); + } + + return acc; +} diff --git a/src/lib/http.ts b/src/lib/http.ts new file mode 100644 index 0000000..f559bb2 --- /dev/null +++ b/src/lib/http.ts @@ -0,0 +1,203 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +export type Fetcher = ( + input: RequestInfo | URL, + init?: RequestInit, +) => Promise; + +const DEFAULT_FETCHER: Fetcher = (input, init) => fetch(input, init); + +export interface HTTPClientOptions { + fetcher?: Fetcher; +} + +type BeforeRequestHook = (req: Request) => Request | void; +type RequestErrorHook = (err: unknown, req: Request) => void; +type ResponseHook = (res: Response, req: Request) => void; + +export class HTTPClient { + private fetcher: Fetcher; + private requestHooks: BeforeRequestHook[] = []; + private requestErrorHooks: RequestErrorHook[] = []; + private responseHooks: ResponseHook[] = []; + + constructor(private options: HTTPClientOptions = {}) { + this.fetcher = options.fetcher || DEFAULT_FETCHER; + } + + async request(request: Request): Promise { + const req = this.requestHooks.reduce((currentReq, fn) => { + const nextRequest = fn(currentReq); + return nextRequest || currentReq; + }, request); + + try { + const res = await this.fetcher(req); + this.responseHooks.forEach((fn) => fn(res, req)); + return res; + } catch (err) { + this.requestErrorHooks.forEach((fn) => fn(err, req)); + throw err; + } + } + + /** + * Registers a hook that is called before a request is made. The hook function + * can mutate the request or return a new request. This may be useful to add + * additional information to request such as request IDs and tracing headers. + */ + addHook(hook: "beforeRequest", fn: BeforeRequestHook): this; + /** + * Registers a hook that is called when a request cannot be made due to a + * network error. + */ + addHook(hook: "requestError", fn: RequestErrorHook): this; + /** + * Registers a hook that is called when a response has been received from the + * server. + */ + addHook(hook: "response", fn: ResponseHook): this; + addHook( + ...args: + | [hook: "beforeRequest", fn: BeforeRequestHook] + | [hook: "requestError", fn: RequestErrorHook] + | [hook: "response", fn: ResponseHook] + ) { + if (args[0] === "beforeRequest") { + this.requestHooks.push(args[1]); + } else if (args[0] === "requestError") { + this.requestErrorHooks.push(args[1]); + } else if (args[0] === "response") { + this.responseHooks.push(args[1]); + } else { + throw new Error(`Invalid hook type: ${args[0]}`); + } + return this; + } + + /** Removes a hook that was previously registered with `addHook`. */ + removeHook(hook: "beforeRequest", fn: BeforeRequestHook): this; + /** Removes a hook that was previously registered with `addHook`. */ + removeHook(hook: "requestError", fn: RequestErrorHook): this; + /** Removes a hook that was previously registered with `addHook`. */ + removeHook(hook: "response", fn: ResponseHook): this; + removeHook( + ...args: + | [hook: "beforeRequest", fn: BeforeRequestHook] + | [hook: "requestError", fn: RequestErrorHook] + | [hook: "response", fn: ResponseHook] + ) { + let target: unknown[]; + if (args[0] === "beforeRequest") { + target = this.requestHooks; + } else if (args[0] === "requestError") { + target = this.requestErrorHooks; + } else if (args[0] === "response") { + target = this.responseHooks; + } else { + throw new Error(`Invalid hook type: ${args[0]}`); + } + + const index = target.findIndex((v) => v === args[1]); + if (index >= 0) { + target.splice(index, 1); + } + + return this; + } + + clone() { + const child = new HTTPClient(this.options); + child.requestHooks = this.requestHooks.slice(); + child.requestErrorHooks = this.requestErrorHooks.slice(); + child.responseHooks = this.responseHooks.slice(); + + return child; + } +} + +export function matchContentType(response: Response, pattern: string): boolean { + if (pattern === "*" || pattern === "*/*") { + return true; + } + + const contentType = + response.headers.get("content-type") ?? "application/octet-stream"; + + const idx = contentType.split(";").findIndex((raw) => { + const ctype = raw.trim(); + if (ctype === pattern) { + return true; + } + + const parts = ctype.split("/"); + if (parts.length !== 2) { + return false; + } + + return `${parts[0]}/*` === pattern || `*/${parts[1]}` === pattern; + }); + + return idx >= 0; +} + +const codeRangeRE = new RegExp("^[0-9]xx$", "i"); + +export function matchStatusCode( + response: Response, + codes: number | string | (number | string)[], +) { + const actual = `${response.status}`; + const expectedCodes = Array.isArray(codes) ? codes : [codes]; + if (!expectedCodes.length) { + return false; + } + + return expectedCodes.some((ec) => { + const code = `${ec}`; + + if (code === "default") { + return true; + } + + if (!codeRangeRE.test(`${code}`)) { + return code === actual; + } + + const expectFamily = code.charAt(0); + if (!expectFamily) { + throw new Error("Invalid status code range"); + } + + const actualFamily = actual.charAt(0); + if (!actualFamily) { + throw new Error(`Invalid response status code: ${actual}`); + } + + return actualFamily === expectFamily; + }); +} + +export function matchResponse( + response: Response, + code: number | string | (number | string)[], + contentTypePattern: string, +): boolean { + return ( + matchStatusCode(response, code) && + matchContentType(response, contentTypePattern) + ); +} + +const headerValRE = /, */; +export function unpackHeaders(headers: Headers): Record { + const out: Record = {}; + + for (const [k, v] of headers.entries()) { + out[k] = v.split(headerValRE); + } + + return out; +} diff --git a/src/lib/retries.ts b/src/lib/retries.ts new file mode 100644 index 0000000..f5e4a5b --- /dev/null +++ b/src/lib/retries.ts @@ -0,0 +1,207 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +export type BackoffStrategy = { + initialInterval: number; + maxInterval: number; + exponent: number; + maxElapsedTime: number; +}; + +const defaultBackoff: BackoffStrategy = { + initialInterval: 500, + maxInterval: 60000, + exponent: 1.5, + maxElapsedTime: 3600000, +}; + +export type RetryConfig = + | { strategy: "none" } + | { + strategy: "backoff"; + backoff?: BackoffStrategy; + retryConnectionErrors?: boolean; + }; + +class PermanentError extends Error { + inner: unknown; + + constructor(inner: unknown) { + super("Permanent error"); + this.inner = inner; + + Object.setPrototypeOf(this, PermanentError.prototype); + } +} + +class TemporaryError extends Error { + res: Response; + + constructor(res: Response) { + super("Temporary error"); + this.res = res; + + Object.setPrototypeOf(this, TemporaryError.prototype); + } +} + +export async function retry( + fetchFn: () => Promise, + options: { + config: RetryConfig; + statusCodes: string[]; + }, +): Promise { + switch (options.config.strategy) { + case "backoff": + return retryBackoff( + wrapFetcher(fetchFn, { + statusCodes: options.statusCodes, + retryConnectionErrors: !!options.config.retryConnectionErrors, + }), + options.config.backoff ?? defaultBackoff, + ); + default: + return await fetchFn(); + } +} + +function wrapFetcher( + fn: () => Promise, + options: { + statusCodes: string[]; + retryConnectionErrors: boolean; + }, +): () => Promise { + return async () => { + try { + const res = await fn(); + if (isRetryableResponse(res, options.statusCodes)) { + throw new TemporaryError(res); + } + + return res; + } catch (err) { + if (err instanceof TemporaryError) { + throw err; + } + + if ( + options.retryConnectionErrors && + (isTimeoutError(err) || isConnectionError(err)) + ) { + throw err; + } + + throw new PermanentError(err); + } + }; +} + +function isConnectionError(err: unknown) { + if (typeof err !== "object" || err == null) { + return false; + } + + // Covers fetch in Deno as well + const isBrowserErr = + err instanceof TypeError && + err.message.toLowerCase().startsWith("failed to fetch"); + + const isNodeErr = + err instanceof TypeError && + err.message.toLowerCase().startsWith("fetch failed"); + + const isBunErr = "name" in err && err.name === "ConnectionError"; + + const isGenericErr = + "code" in err && + typeof err.code === "string" && + err.code.toLowerCase() === "econnreset"; + + return isBrowserErr || isNodeErr || isGenericErr || isBunErr; +} + +function isTimeoutError(err: unknown) { + if (typeof err !== "object" || err == null) { + return false; + } + + // Fetch in browser, Node.js, Bun, Deno + const isNative = "name" in err && err.name === "TimeoutError"; + + // Node.js HTTP client and Axios + const isGenericErr = + "code" in err && + typeof err.code === "string" && + err.code.toLowerCase() === "econnaborted"; + + return isNative || isGenericErr; +} + +const codeRangeRE = new RegExp("^[0-9]xx$", "i"); + +function isRetryableResponse(res: Response, statusCodes: string[]): boolean { + const actual = `${res.status}`; + + return statusCodes.some((code) => { + if (!codeRangeRE.test(code)) { + return code === actual; + } + + const expectFamily = code.charAt(0); + if (!expectFamily) { + throw new Error("Invalid status code range"); + } + + const actualFamily = actual.charAt(0); + if (!actualFamily) { + throw new Error(`Invalid response status code: ${actual}`); + } + + return actualFamily === expectFamily; + }); +} + +async function retryBackoff( + fn: () => Promise, + strategy: BackoffStrategy, +): Promise { + const { maxElapsedTime, initialInterval, exponent, maxInterval } = strategy; + + const start = Date.now(); + let x = 0; + + // eslint-disable-next-line no-constant-condition + while (true) { + try { + const res = await fn(); + return res; + } catch (err) { + if (err instanceof PermanentError) { + throw err.inner; + } + const elapsed = Date.now() - start; + if (elapsed > maxElapsedTime) { + if (err instanceof TemporaryError) { + return err.res; + } + + throw err; + } + + const d = Math.min( + initialInterval * Math.pow(x, exponent) + Math.random() * 1000, + maxInterval, + ); + + await delay(d); + x++; + } + } +} + +async function delay(delay: number): Promise { + return new Promise((resolve) => setTimeout(resolve, delay)); +} diff --git a/src/lib/sdks.ts b/src/lib/sdks.ts new file mode 100644 index 0000000..be69e11 --- /dev/null +++ b/src/lib/sdks.ts @@ -0,0 +1,107 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import { HTTPClient, matchResponse, matchStatusCode, unpackHeaders } from "./http"; +import { SecurityState, resolveSecurity, resolveGlobalSecurity } from "./security"; +import { pathToFunc } from "./url"; +import { encodeForm } from "./encodings"; +import { stringToBase64 } from "./base64"; + +export type RequestOptions = { + fetchOptions?: Omit; +}; + +type RequestConfig = { + method: string; + path: string; + baseURL?: string | URL; + query?: string; + body?: RequestInit["body"]; + headers?: HeadersInit; + security?: SecurityState | null; +}; + +export class ClientSDK { + readonly #client: HTTPClient; + protected readonly baseURL: URL; + + constructor(init: { client: HTTPClient; baseURL: URL }) { + const url = init.baseURL; + url.pathname = url.pathname.replace(/\/+$/, "") + "/"; + + this.#client = init.client; + this.baseURL = url; + } + + protected async fetch$(conf: RequestConfig, options?: RequestOptions) { + const { method, path, query, headers: opHeaders, security } = conf; + + const reqURL = new URL(conf.baseURL ?? this.baseURL); + const inputURL = new URL(path, reqURL); + + if (path) { + reqURL.pathname += inputURL.pathname.replace(/^\/+/, ""); + } + + let finalQuery = query || ""; + + const secQuery: string[] = []; + for (const [k, v] of Object.entries(security?.queryParams || {})) { + secQuery.push(encodeForm(k, v, { charEncoding: "percent" })); + } + if (secQuery.length) { + finalQuery += `&${secQuery.join("&")}`; + } + + if (finalQuery) { + const q = finalQuery.startsWith("&") ? finalQuery.slice(1) : finalQuery; + reqURL.search = `?${q}`; + } + + const headers = new Headers(opHeaders); + + const username = security?.basic.username || ""; + const password = security?.basic.password || ""; + if (username) { + const encoded = stringToBase64([username, password].join(":")); + headers.set("Authorization", `Basic ${encoded}`); + } + + const securityHeaders = new Headers(security?.headers || {}); + for (const [k, v] of securityHeaders) { + headers.set(k, v); + } + + let cookie = headers.get("cookie") || ""; + for (const [k, v] of Object.entries(security?.cookies || {})) { + cookie += `; ${k}=${v}`; + } + cookie = cookie.startsWith("; ") ? cookie.slice(2) : cookie; + headers.set("cookie", cookie); + + const userHeaders = new Headers(options?.fetchOptions?.headers); + for (const [k, v] of userHeaders) { + headers.set(k, v); + } + + const req = new Request(reqURL, { + ...options?.fetchOptions, + body: conf.body ?? null, + headers, + method, + }); + + return this.#client.request(req); + } + + protected unpackHeaders = unpackHeaders; + + protected matchStatusCode = matchStatusCode; + protected matchResponse = matchResponse; + + protected templateURLComponent = pathToFunc; + + protected resolveSecurity = resolveSecurity; + protected resolveGlobalSecurity = resolveGlobalSecurity; +} diff --git a/src/lib/security.ts b/src/lib/security.ts new file mode 100644 index 0000000..2f7a817 --- /dev/null +++ b/src/lib/security.ts @@ -0,0 +1,165 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import * as components from "../models/components"; + +export enum SecurityErrorCode { + Incomplete = "incomplete", + UnrecognisedSecurityType = "unrecognized_security_type", +} + +export class SecurityError extends Error { + constructor(public code: SecurityErrorCode, message: string, options?: ErrorOptions) { + super(message, options); + this.name = "SecurityError"; + } + + static incomplete(): SecurityError { + return new SecurityError( + SecurityErrorCode.Incomplete, + "Security requirements not met in order to perform the operation" + ); + } + static unrecognizedType(type: string): SecurityError { + return new SecurityError( + SecurityErrorCode.UnrecognisedSecurityType, + `Unrecognised security type: ${type}` + ); + } +} + +export type SecurityState = { + basic: { username: string; password?: string }; + headers: Record; + queryParams: Record; + cookies: Record; +}; + +type SecurityInputBasicPacked = { + type: "http:basic"; + value: { username: string; password?: string } | null | undefined; +}; + +type SecurityInputBasic = { + type: "http:basic"; + value: string | null | undefined; + fieldName: "username" | "password"; +}; + +type SecurityInputBearer = { + type: "http:bearer"; + value: string | null | undefined; + fieldName: string; +}; + +type SecurityInputAPIKey = { + type: "apiKey:header" | "apiKey:query" | "apiKey:cookie"; + value: string | null | undefined; + fieldName: string; +}; + +type SecurityInputOIDC = { + type: "openIdConnect"; + value: string | null | undefined; + fieldName: string; +}; + +type SecurityInputOAuth2 = { + type: "oauth2"; + value: string | null | undefined; + fieldName: string; +}; + +export type SecurityInput = + | SecurityInputBasic + | SecurityInputBasicPacked + | SecurityInputBearer + | SecurityInputAPIKey + | SecurityInputOAuth2 + | SecurityInputOIDC; + +export function resolveSecurity(...options: SecurityInput[][]): SecurityState | null { + const state: SecurityState = { + basic: { username: "", password: "" }, + headers: {}, + queryParams: {}, + cookies: {}, + }; + + const option = options.find((opts) => opts.every((o) => Boolean(o.value))); + if (option == null) { + return null; + } + + option.forEach((spec) => { + if (spec.value == null) { + return; + } + + const { type } = spec; + + switch (type) { + case "apiKey:header": + state.headers[spec.fieldName] = spec.value; + break; + case "apiKey:query": + state.queryParams[spec.fieldName] = spec.value; + break; + case "apiKey:cookie": + state.cookies[spec.fieldName] = spec.value; + break; + case "http:basic": + applyBasic(state, spec); + break; + case "http:bearer": + applyBearer(state, spec); + break; + case "oauth2": + applyBearer(state, spec); + break; + case "openIdConnect": + applyBearer(state, spec); + break; + default: + spec satisfies never; + throw SecurityError.unrecognizedType(type); + } + }); + + return state; +} + +function applyBasic(state: SecurityState, spec: SecurityInputBasic | SecurityInputBasicPacked) { + if (spec.value == null) { + return; + } + + if ("fieldName" in spec) { + state.basic[spec.fieldName] = spec.value; + } else { + state.basic = spec.value; + } +} + +function applyBearer( + state: SecurityState, + spec: SecurityInputBearer | SecurityInputOAuth2 | SecurityInputOIDC +) { + if (spec.value == null) { + return; + } + + let value = spec.value; + if (value.slice(0, 7).toLowerCase() !== "bearer ") { + value = `Bearer ${value}`; + } + + state.headers[spec.fieldName] = value; +} +export function resolveGlobalSecurity(security: Partial | null | undefined) { + return resolveSecurity( + [{ value: security?.oauth, fieldName: "Authorization", type: "oauth2" }], + [{ value: security?.apiKey, fieldName: "X-API-Key", type: "apiKey:header" }] + ); +} diff --git a/src/lib/url.ts b/src/lib/url.ts new file mode 100644 index 0000000..3fc4ecc --- /dev/null +++ b/src/lib/url.ts @@ -0,0 +1,31 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +const hasOwn = Object.prototype.hasOwnProperty; + +export function pathToFunc( + pathPattern: string, + options?: { charEncoding?: "percent" | "none" }, +): (params?: Record) => string { + const paramRE = /\{([a-zA-Z0-9_]+?)\}/g; + + return function buildURLPath(params: Record = {}): string { + return pathPattern.replace(paramRE, function (_, placeholder) { + if (!hasOwn.call(params, placeholder)) { + throw new Error(`Parameter '${placeholder}' is required`); + } + + const value = params[placeholder]; + if (typeof value !== "string" && typeof value !== "number") { + throw new Error( + `Parameter '${placeholder}' must be a string or number`, + ); + } + + return options?.charEncoding === "percent" + ? encodeURIComponent(`${value}`) + : `${value}`; + }); + }; +} diff --git a/src/models/components/account.ts b/src/models/components/account.ts index 0816057..bbdfc26 100644 --- a/src/models/components/account.ts +++ b/src/models/components/account.ts @@ -2,29 +2,61 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { AddressListing } from "./addresslisting"; -import { Profile } from "./profile"; -import { Expose, Type } from "class-transformer"; +import { AddressListing, AddressListing$ } from "./addresslisting"; +import { Profile, Profile$ } from "./profile"; +import { z } from "zod"; -export class Account extends SpeakeasyBase { +export type Account = { /** * A list of addresses associated with this account. */ - @SpeakeasyMetadata({ elemType: AddressListing }) - @Expose({ name: "addresses" }) - @Type(() => AddressListing) - addresses: AddressListing[]; - + addresses: Array; /** * A list of payment methods associated with this account. */ - @SpeakeasyMetadata() - @Expose({ name: "payment_methods" }) - paymentMethods: any[]; + paymentMethods: Array; + profile?: Profile | undefined; +}; + +/** @internal */ +export namespace Account$ { + export type Inbound = { + addresses: Array; + payment_methods: Array; + profile?: Profile$.Inbound | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + addresses: z.array(AddressListing$.inboundSchema), + payment_methods: z.array(z.any()), + profile: Profile$.inboundSchema.optional(), + }) + .transform((v) => { + return { + addresses: v.addresses, + paymentMethods: v.payment_methods, + ...(v.profile === undefined ? null : { profile: v.profile }), + }; + }); + + export type Outbound = { + addresses: Array; + payment_methods: Array; + profile?: Profile$.Outbound | undefined; + }; - @SpeakeasyMetadata() - @Expose({ name: "profile" }) - @Type(() => Profile) - profile?: Profile; + export const outboundSchema: z.ZodType = z + .object({ + addresses: z.array(AddressListing$.outboundSchema), + paymentMethods: z.array(z.any()), + profile: Profile$.outboundSchema.optional(), + }) + .transform((v) => { + return { + addresses: v.addresses, + payment_methods: v.paymentMethods, + ...(v.profile === undefined ? null : { profile: v.profile }), + }; + }); } diff --git a/src/models/components/accounttestcreationdataoutput.ts b/src/models/components/accounttestcreationdataoutput.ts index 5b62cdf..48de0cd 100644 --- a/src/models/components/accounttestcreationdataoutput.ts +++ b/src/models/components/accounttestcreationdataoutput.ts @@ -2,8 +2,7 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { Expose } from "class-transformer"; +import { z } from "zod"; export enum EmailState { Missing = "missing", @@ -17,46 +16,142 @@ export enum PhoneState { Verified = "verified", } -export class AccountTestCreationDataOutput extends SpeakeasyBase { - @SpeakeasyMetadata() - @Expose({ name: "email" }) +export type AccountTestCreationDataOutput = { email: string; - - @SpeakeasyMetadata() - @Expose({ name: "email_state" }) emailState: EmailState; - - @SpeakeasyMetadata() - @Expose({ name: "phone" }) phone: string; + phoneState: PhoneState; + otpCode: string; + oauthCode: string; +}; - @SpeakeasyMetadata() - @Expose({ name: "phone_state" }) +export type AccountTestCreationData = { + emailState: EmailState; phoneState: PhoneState; + isMigrated?: boolean | undefined; + hasAddress?: boolean | undefined; + hasCreditCard?: boolean | undefined; +}; - @SpeakeasyMetadata() - @Expose({ name: "otp_code" }) - otpCode: string; +/** @internal */ +export const EmailState$ = z.nativeEnum(EmailState); - @SpeakeasyMetadata() - @Expose({ name: "oauth_code" }) - oauthCode: string; +/** @internal */ +export const PhoneState$ = z.nativeEnum(PhoneState); + +/** @internal */ +export namespace AccountTestCreationDataOutput$ { + export type Inbound = { + email: string; + email_state: EmailState; + phone: string; + phone_state: PhoneState; + otp_code: string; + oauth_code: string; + }; + + export const inboundSchema: z.ZodType = z + .object({ + email: z.string(), + email_state: EmailState$, + phone: z.string(), + phone_state: PhoneState$, + otp_code: z.string(), + oauth_code: z.string(), + }) + .transform((v) => { + return { + email: v.email, + emailState: v.email_state, + phone: v.phone, + phoneState: v.phone_state, + otpCode: v.otp_code, + oauthCode: v.oauth_code, + }; + }); + + export type Outbound = { + email: string; + email_state: EmailState; + phone: string; + phone_state: PhoneState; + otp_code: string; + oauth_code: string; + }; + + export const outboundSchema: z.ZodType = + z + .object({ + email: z.string(), + emailState: EmailState$, + phone: z.string(), + phoneState: PhoneState$, + otpCode: z.string(), + oauthCode: z.string(), + }) + .transform((v) => { + return { + email: v.email, + email_state: v.emailState, + phone: v.phone, + phone_state: v.phoneState, + otp_code: v.otpCode, + oauth_code: v.oauthCode, + }; + }); } -export class AccountTestCreationData extends SpeakeasyBase { - @SpeakeasyMetadata() - @Expose({ name: "email_state" }) - emailState: EmailState; +/** @internal */ +export namespace AccountTestCreationData$ { + export type Inbound = { + email_state: EmailState; + phone_state: PhoneState; + is_migrated?: boolean | undefined; + has_address?: boolean | undefined; + has_credit_card?: boolean | undefined; + }; - @SpeakeasyMetadata() - @Expose({ name: "phone_state" }) - phoneState: PhoneState; + export const inboundSchema: z.ZodType = z + .object({ + email_state: EmailState$, + phone_state: PhoneState$, + is_migrated: z.boolean().optional(), + has_address: z.boolean().optional(), + has_credit_card: z.boolean().optional(), + }) + .transform((v) => { + return { + emailState: v.email_state, + phoneState: v.phone_state, + ...(v.is_migrated === undefined ? null : { isMigrated: v.is_migrated }), + ...(v.has_address === undefined ? null : { hasAddress: v.has_address }), + ...(v.has_credit_card === undefined ? null : { hasCreditCard: v.has_credit_card }), + }; + }); - @SpeakeasyMetadata() - @Expose({ name: "is_migrated" }) - isMigrated?: boolean; + export type Outbound = { + email_state: EmailState; + phone_state: PhoneState; + is_migrated?: boolean | undefined; + has_address?: boolean | undefined; + has_credit_card?: boolean | undefined; + }; - @SpeakeasyMetadata() - @Expose({ name: "has_address" }) - hasAddress?: boolean; + export const outboundSchema: z.ZodType = z + .object({ + emailState: EmailState$, + phoneState: PhoneState$, + isMigrated: z.boolean().optional(), + hasAddress: z.boolean().optional(), + hasCreditCard: z.boolean().optional(), + }) + .transform((v) => { + return { + email_state: v.emailState, + phone_state: v.phoneState, + ...(v.isMigrated === undefined ? null : { is_migrated: v.isMigrated }), + ...(v.hasAddress === undefined ? null : { has_address: v.hasAddress }), + ...(v.hasCreditCard === undefined ? null : { has_credit_card: v.hasCreditCard }), + }; + }); } diff --git a/src/models/components/addresslisting.ts b/src/models/components/addresslisting.ts index b9442e8..94f62ae 100644 --- a/src/models/components/addresslisting.ts +++ b/src/models/components/addresslisting.ts @@ -2,8 +2,7 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { Expose } from "class-transformer"; +import { z } from "zod"; /** * The country (in its ISO 3166 alpha-2 format) associated with this address. @@ -261,186 +260,316 @@ export enum CountryCode { } /** - * A physical address. + * An address saved on an account, i.e. a physical address plus any additional account-specific metadata. */ -export class AddressListing extends SpeakeasyBase { +export type AddressListing = { /** * The address's unique identifier. */ - @SpeakeasyMetadata() - @Expose({ name: "id" }) id: string; - /** * The first name of the person associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "first_name" }) firstName: string; - /** * The last name of the person associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "last_name" }) lastName: string; - /** * The company associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "company" }) - company?: string; - + company?: string | undefined; /** * The street address associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "street_address1" }) streetAddress1: string; - /** * Any additional, optional, street address information associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "street_address2" }) - streetAddress2?: string; - + streetAddress2?: string | undefined; /** * The locality (e.g. city, town, etc...) associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "locality" }) locality: string; - /** * The postal code associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "postal_code" }) postalCode: string; - /** * The region or administrative area (e.g. state, province, county, etc...) associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "region" }) - region?: string; - + region?: string | undefined; /** * The country (in its ISO 3166 alpha-2 format) associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "country_code" }) countryCode: CountryCode; - /** * The email address associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "email" }) - email?: string; - + email?: string | undefined; /** * The phone number associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "phone" }) - phone?: string; - + phone?: string | undefined; /** * Whether or not this is the default address saved. */ - @SpeakeasyMetadata() - @Expose({ name: "is_default" }) - isDefault?: boolean; -} + isDefault?: boolean | undefined; +}; /** - * A physical address. + * An address saved on an account, i.e. a physical address plus any additional account-specific metadata. */ -export class AddressListingInput extends SpeakeasyBase { +export type AddressListingInput = { /** * The first name of the person associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "first_name" }) firstName: string; - /** * The last name of the person associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "last_name" }) lastName: string; - /** * The company associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "company" }) - company?: string; - + company?: string | undefined; /** * The street address associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "street_address1" }) streetAddress1: string; - /** * Any additional, optional, street address information associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "street_address2" }) - streetAddress2?: string; - + streetAddress2?: string | undefined; /** * The locality (e.g. city, town, etc...) associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "locality" }) locality: string; - /** * The postal code associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "postal_code" }) postalCode: string; - /** * The region or administrative area (e.g. state, province, county, etc...) associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "region" }) - region?: string; - + region?: string | undefined; /** * The country (in its ISO 3166 alpha-2 format) associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "country_code" }) countryCode: CountryCode; - /** * The email address associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "email" }) - email?: string; - + email?: string | undefined; /** * The phone number associated with this address. */ - @SpeakeasyMetadata() - @Expose({ name: "phone" }) - phone?: string; - + phone?: string | undefined; /** * Whether or not this is the default address saved. */ - @SpeakeasyMetadata() - @Expose({ name: "is_default" }) - isDefault?: boolean; + isDefault?: boolean | undefined; +}; + +/** @internal */ +export const CountryCode$ = z.nativeEnum(CountryCode); + +/** @internal */ +export namespace AddressListing$ { + export type Inbound = { + id: string; + first_name: string; + last_name: string; + company?: string | undefined; + street_address1: string; + street_address2?: string | undefined; + locality: string; + postal_code: string; + region?: string | undefined; + country_code: CountryCode; + email?: string | undefined; + phone?: string | undefined; + is_default?: boolean | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + id: z.string(), + first_name: z.string(), + last_name: z.string(), + company: z.string().optional(), + street_address1: z.string(), + street_address2: z.string().optional(), + locality: z.string(), + postal_code: z.string(), + region: z.string().optional(), + country_code: CountryCode$, + email: z.string().optional(), + phone: z.string().optional(), + is_default: z.boolean().optional(), + }) + .transform((v) => { + return { + id: v.id, + firstName: v.first_name, + lastName: v.last_name, + ...(v.company === undefined ? null : { company: v.company }), + streetAddress1: v.street_address1, + ...(v.street_address2 === undefined ? null : { streetAddress2: v.street_address2 }), + locality: v.locality, + postalCode: v.postal_code, + ...(v.region === undefined ? null : { region: v.region }), + countryCode: v.country_code, + ...(v.email === undefined ? null : { email: v.email }), + ...(v.phone === undefined ? null : { phone: v.phone }), + ...(v.is_default === undefined ? null : { isDefault: v.is_default }), + }; + }); + + export type Outbound = { + id: string; + first_name: string; + last_name: string; + company?: string | undefined; + street_address1: string; + street_address2?: string | undefined; + locality: string; + postal_code: string; + region?: string | undefined; + country_code: CountryCode; + email?: string | undefined; + phone?: string | undefined; + is_default?: boolean | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + id: z.string(), + firstName: z.string(), + lastName: z.string(), + company: z.string().optional(), + streetAddress1: z.string(), + streetAddress2: z.string().optional(), + locality: z.string(), + postalCode: z.string(), + region: z.string().optional(), + countryCode: CountryCode$, + email: z.string().optional(), + phone: z.string().optional(), + isDefault: z.boolean().optional(), + }) + .transform((v) => { + return { + id: v.id, + first_name: v.firstName, + last_name: v.lastName, + ...(v.company === undefined ? null : { company: v.company }), + street_address1: v.streetAddress1, + ...(v.streetAddress2 === undefined ? null : { street_address2: v.streetAddress2 }), + locality: v.locality, + postal_code: v.postalCode, + ...(v.region === undefined ? null : { region: v.region }), + country_code: v.countryCode, + ...(v.email === undefined ? null : { email: v.email }), + ...(v.phone === undefined ? null : { phone: v.phone }), + ...(v.isDefault === undefined ? null : { is_default: v.isDefault }), + }; + }); +} + +/** @internal */ +export namespace AddressListingInput$ { + export type Inbound = { + first_name: string; + last_name: string; + company?: string | undefined; + street_address1: string; + street_address2?: string | undefined; + locality: string; + postal_code: string; + region?: string | undefined; + country_code: CountryCode; + email?: string | undefined; + phone?: string | undefined; + is_default?: boolean | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + first_name: z.string(), + last_name: z.string(), + company: z.string().optional(), + street_address1: z.string(), + street_address2: z.string().optional(), + locality: z.string(), + postal_code: z.string(), + region: z.string().optional(), + country_code: CountryCode$, + email: z.string().optional(), + phone: z.string().optional(), + is_default: z.boolean().optional(), + }) + .transform((v) => { + return { + firstName: v.first_name, + lastName: v.last_name, + ...(v.company === undefined ? null : { company: v.company }), + streetAddress1: v.street_address1, + ...(v.street_address2 === undefined ? null : { streetAddress2: v.street_address2 }), + locality: v.locality, + postalCode: v.postal_code, + ...(v.region === undefined ? null : { region: v.region }), + countryCode: v.country_code, + ...(v.email === undefined ? null : { email: v.email }), + ...(v.phone === undefined ? null : { phone: v.phone }), + ...(v.is_default === undefined ? null : { isDefault: v.is_default }), + }; + }); + + export type Outbound = { + first_name: string; + last_name: string; + company?: string | undefined; + street_address1: string; + street_address2?: string | undefined; + locality: string; + postal_code: string; + region?: string | undefined; + country_code: CountryCode; + email?: string | undefined; + phone?: string | undefined; + is_default?: boolean | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + firstName: z.string(), + lastName: z.string(), + company: z.string().optional(), + streetAddress1: z.string(), + streetAddress2: z.string().optional(), + locality: z.string(), + postalCode: z.string(), + region: z.string().optional(), + countryCode: CountryCode$, + email: z.string().optional(), + phone: z.string().optional(), + isDefault: z.boolean().optional(), + }) + .transform((v) => { + return { + first_name: v.firstName, + last_name: v.lastName, + ...(v.company === undefined ? null : { company: v.company }), + street_address1: v.streetAddress1, + ...(v.streetAddress2 === undefined ? null : { street_address2: v.streetAddress2 }), + locality: v.locality, + postal_code: v.postalCode, + ...(v.region === undefined ? null : { region: v.region }), + country_code: v.countryCode, + ...(v.email === undefined ? null : { email: v.email }), + ...(v.phone === undefined ? null : { phone: v.phone }), + ...(v.isDefault === undefined ? null : { is_default: v.isDefault }), + }; + }); } diff --git a/src/models/components/amount.ts b/src/models/components/amount.ts index 4f9a929..a5c7cfa 100644 --- a/src/models/components/amount.ts +++ b/src/models/components/amount.ts @@ -2,8 +2,7 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { Expose } from "class-transformer"; +import { z } from "zod"; /** * A supported currency. @@ -19,18 +18,53 @@ export enum Currency { /** * A monetary amount, i.e. a base unit amount and a supported currency. */ -export class Amount extends SpeakeasyBase { +export type Amount = { /** * A supported currency. */ - @SpeakeasyMetadata() - @Expose({ name: "currency" }) currency: Currency; - /** * A monetary amount, represented in its base units (e.g. USD/EUR cents). */ - @SpeakeasyMetadata() - @Expose({ name: "units" }) units: number; +}; + +/** @internal */ +export const Currency$ = z.nativeEnum(Currency); + +/** @internal */ +export namespace Amount$ { + export type Inbound = { + currency: Currency; + units: number; + }; + + export const inboundSchema: z.ZodType = z + .object({ + currency: Currency$, + units: z.number().int(), + }) + .transform((v) => { + return { + currency: v.currency, + units: v.units, + }; + }); + + export type Outbound = { + currency: Currency; + units: number; + }; + + export const outboundSchema: z.ZodType = z + .object({ + currency: Currency$, + units: z.number().int(), + }) + .transform((v) => { + return { + currency: v.currency, + units: v.units, + }; + }); } diff --git a/src/models/components/cart.ts b/src/models/components/cart.ts index ec9cdf8..a80d298 100644 --- a/src/models/components/cart.ts +++ b/src/models/components/cart.ts @@ -2,63 +2,111 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { Amount } from "./amount"; -import { CartDiscount } from "./cartdiscount"; -import { CartItem } from "./cartitem"; -import { CartShipment } from "./cartshipment"; -import { Expose, Type } from "class-transformer"; +import { Amount, Amount$ } from "./amount"; +import { CartDiscount, CartDiscount$ } from "./cartdiscount"; +import { CartItem, CartItem$ } from "./cartitem"; +import { CartShipment, CartShipment$ } from "./cartshipment"; +import { z } from "zod"; -export class Cart extends SpeakeasyBase { +export type Cart = { /** * This value is used by Bolt as an external reference to a given order. This reference must be unique per successful transaction. */ - @SpeakeasyMetadata() - @Expose({ name: "order_reference" }) orderReference: string; - /** * Used optionally to pass additional information like order numbers or other IDs as needed. */ - @SpeakeasyMetadata() - @Expose({ name: "order_description" }) - orderDescription?: string; - + orderDescription?: string | undefined; /** * A shopper-facing identifier corresponding to the order reference associated with this transaction. */ - @SpeakeasyMetadata() - @Expose({ name: "display_id" }) - displayId?: string; - - @SpeakeasyMetadata({ elemType: CartShipment }) - @Expose({ name: "shipments" }) - @Type(() => CartShipment) - shipments?: CartShipment[]; - - @SpeakeasyMetadata({ elemType: CartDiscount }) - @Expose({ name: "discounts" }) - @Type(() => CartDiscount) - discounts?: CartDiscount[]; - - @SpeakeasyMetadata({ elemType: CartItem }) - @Expose({ name: "items" }) - @Type(() => CartItem) - items?: CartItem[]; - + displayId?: string | undefined; + shipments?: Array | undefined; + discounts?: Array | undefined; + items?: Array | undefined; /** * A monetary amount, i.e. a base unit amount and a supported currency. */ - @SpeakeasyMetadata() - @Expose({ name: "total" }) - @Type(() => Amount) total: Amount; - /** * A monetary amount, i.e. a base unit amount and a supported currency. */ - @SpeakeasyMetadata() - @Expose({ name: "tax" }) - @Type(() => Amount) tax: Amount; +}; + +/** @internal */ +export namespace Cart$ { + export type Inbound = { + order_reference: string; + order_description?: string | undefined; + display_id?: string | undefined; + shipments?: Array | undefined; + discounts?: Array | undefined; + items?: Array | undefined; + total: Amount$.Inbound; + tax: Amount$.Inbound; + }; + + export const inboundSchema: z.ZodType = z + .object({ + order_reference: z.string(), + order_description: z.string().optional(), + display_id: z.string().optional(), + shipments: z.array(CartShipment$.inboundSchema).optional(), + discounts: z.array(CartDiscount$.inboundSchema).optional(), + items: z.array(CartItem$.inboundSchema).optional(), + total: Amount$.inboundSchema, + tax: Amount$.inboundSchema, + }) + .transform((v) => { + return { + orderReference: v.order_reference, + ...(v.order_description === undefined + ? null + : { orderDescription: v.order_description }), + ...(v.display_id === undefined ? null : { displayId: v.display_id }), + ...(v.shipments === undefined ? null : { shipments: v.shipments }), + ...(v.discounts === undefined ? null : { discounts: v.discounts }), + ...(v.items === undefined ? null : { items: v.items }), + total: v.total, + tax: v.tax, + }; + }); + + export type Outbound = { + order_reference: string; + order_description?: string | undefined; + display_id?: string | undefined; + shipments?: Array | undefined; + discounts?: Array | undefined; + items?: Array | undefined; + total: Amount$.Outbound; + tax: Amount$.Outbound; + }; + + export const outboundSchema: z.ZodType = z + .object({ + orderReference: z.string(), + orderDescription: z.string().optional(), + displayId: z.string().optional(), + shipments: z.array(CartShipment$.outboundSchema).optional(), + discounts: z.array(CartDiscount$.outboundSchema).optional(), + items: z.array(CartItem$.outboundSchema).optional(), + total: Amount$.outboundSchema, + tax: Amount$.outboundSchema, + }) + .transform((v) => { + return { + order_reference: v.orderReference, + ...(v.orderDescription === undefined + ? null + : { order_description: v.orderDescription }), + ...(v.displayId === undefined ? null : { display_id: v.displayId }), + ...(v.shipments === undefined ? null : { shipments: v.shipments }), + ...(v.discounts === undefined ? null : { discounts: v.discounts }), + ...(v.items === undefined ? null : { items: v.items }), + total: v.total, + tax: v.tax, + }; + }); } diff --git a/src/models/components/cartdiscount.ts b/src/models/components/cartdiscount.ts index 4a78015..d5b5178 100644 --- a/src/models/components/cartdiscount.ts +++ b/src/models/components/cartdiscount.ts @@ -2,30 +2,63 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { Amount } from "./amount"; -import { Expose, Type } from "class-transformer"; +import { Amount, Amount$ } from "./amount"; +import { z } from "zod"; -export class CartDiscount extends SpeakeasyBase { +export type CartDiscount = { /** * A monetary amount, i.e. a base unit amount and a supported currency. */ - @SpeakeasyMetadata() - @Expose({ name: "amount" }) - @Type(() => Amount) amount: Amount; - /** * Discount code. */ - @SpeakeasyMetadata() - @Expose({ name: "code" }) - code?: string; - + code?: string | undefined; /** * Used to provide a link to additional details, such as a landing page, associated with the discount offering. */ - @SpeakeasyMetadata() - @Expose({ name: "details_url" }) - detailsUrl?: string; + detailsUrl?: string | undefined; +}; + +/** @internal */ +export namespace CartDiscount$ { + export type Inbound = { + amount: Amount$.Inbound; + code?: string | undefined; + details_url?: string | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + amount: Amount$.inboundSchema, + code: z.string().optional(), + details_url: z.string().optional(), + }) + .transform((v) => { + return { + amount: v.amount, + ...(v.code === undefined ? null : { code: v.code }), + ...(v.details_url === undefined ? null : { detailsUrl: v.details_url }), + }; + }); + + export type Outbound = { + amount: Amount$.Outbound; + code?: string | undefined; + details_url?: string | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + amount: Amount$.outboundSchema, + code: z.string().optional(), + detailsUrl: z.string().optional(), + }) + .transform((v) => { + return { + amount: v.amount, + ...(v.code === undefined ? null : { code: v.code }), + ...(v.detailsUrl === undefined ? null : { details_url: v.detailsUrl }), + }; + }); } diff --git a/src/models/components/cartitem.ts b/src/models/components/cartitem.ts index 823770a..73b5982 100644 --- a/src/models/components/cartitem.ts +++ b/src/models/components/cartitem.ts @@ -2,58 +2,103 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { Amount } from "./amount"; -import { Expose, Type } from "class-transformer"; +import { Amount, Amount$ } from "./amount"; +import { z } from "zod"; -export class CartItem extends SpeakeasyBase { +export type CartItem = { /** * The name of a given item. */ - @SpeakeasyMetadata() - @Expose({ name: "name" }) name: string; - /** * This value is used by Bolt as an external reference to a given item. */ - @SpeakeasyMetadata() - @Expose({ name: "reference" }) reference: string; - /** * A human-readable description of this cart item. */ - @SpeakeasyMetadata() - @Expose({ name: "description" }) - description?: string; - + description?: string | undefined; /** * A monetary amount, i.e. a base unit amount and a supported currency. */ - @SpeakeasyMetadata() - @Expose({ name: "total_amount" }) - @Type(() => Amount) totalAmount: Amount; - /** * The item's unit price, i.e. the cost of a single item exclusive of tax and discounts. */ - @SpeakeasyMetadata() - @Expose({ name: "unit_price" }) unitPrice: number; - /** * The number of units that comprise this cart item. */ - @SpeakeasyMetadata() - @Expose({ name: "quantity" }) quantity: number; - /** * Used to provide a link to the image associated with the item. */ - @SpeakeasyMetadata() - @Expose({ name: "image_url" }) - imageUrl?: string; + imageUrl?: string | undefined; +}; + +/** @internal */ +export namespace CartItem$ { + export type Inbound = { + name: string; + reference: string; + description?: string | undefined; + total_amount: Amount$.Inbound; + unit_price: number; + quantity: number; + image_url?: string | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + name: z.string(), + reference: z.string(), + description: z.string().optional(), + total_amount: Amount$.inboundSchema, + unit_price: z.number().int(), + quantity: z.number().int(), + image_url: z.string().optional(), + }) + .transform((v) => { + return { + name: v.name, + reference: v.reference, + ...(v.description === undefined ? null : { description: v.description }), + totalAmount: v.total_amount, + unitPrice: v.unit_price, + quantity: v.quantity, + ...(v.image_url === undefined ? null : { imageUrl: v.image_url }), + }; + }); + + export type Outbound = { + name: string; + reference: string; + description?: string | undefined; + total_amount: Amount$.Outbound; + unit_price: number; + quantity: number; + image_url?: string | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + name: z.string(), + reference: z.string(), + description: z.string().optional(), + totalAmount: Amount$.outboundSchema, + unitPrice: z.number().int(), + quantity: z.number().int(), + imageUrl: z.string().optional(), + }) + .transform((v) => { + return { + name: v.name, + reference: v.reference, + ...(v.description === undefined ? null : { description: v.description }), + total_amount: v.totalAmount, + unit_price: v.unitPrice, + quantity: v.quantity, + ...(v.imageUrl === undefined ? null : { image_url: v.imageUrl }), + }; + }); } diff --git a/src/models/components/cartshipment.ts b/src/models/components/cartshipment.ts index b22da97..e7c6368 100644 --- a/src/models/components/cartshipment.ts +++ b/src/models/components/cartshipment.ts @@ -2,27 +2,60 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { Amount } from "./amount"; -import { Expose, Type } from "class-transformer"; - -export class CartShipment extends SpeakeasyBase { - @SpeakeasyMetadata() - @Expose({ name: "address" }) - address?: any; +import { Amount, Amount$ } from "./amount"; +import { z } from "zod"; +export type CartShipment = { + address?: any | undefined; /** * A monetary amount, i.e. a base unit amount and a supported currency. */ - @SpeakeasyMetadata() - @Expose({ name: "cost" }) - @Type(() => Amount) - cost?: Amount; - + cost?: Amount | undefined; /** * The name of the carrier selected. */ - @SpeakeasyMetadata() - @Expose({ name: "carrier" }) - carrier?: string; + carrier?: string | undefined; +}; + +/** @internal */ +export namespace CartShipment$ { + export type Inbound = { + address?: any | undefined; + cost?: Amount$.Inbound | undefined; + carrier?: string | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + address: z.any().optional(), + cost: Amount$.inboundSchema.optional(), + carrier: z.string().optional(), + }) + .transform((v) => { + return { + ...(v.address === undefined ? null : { address: v.address }), + ...(v.cost === undefined ? null : { cost: v.cost }), + ...(v.carrier === undefined ? null : { carrier: v.carrier }), + }; + }); + + export type Outbound = { + address?: any | undefined; + cost?: Amount$.Outbound | undefined; + carrier?: string | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + address: z.any().optional(), + cost: Amount$.outboundSchema.optional(), + carrier: z.string().optional(), + }) + .transform((v) => { + return { + ...(v.address === undefined ? null : { address: v.address }), + ...(v.cost === undefined ? null : { cost: v.cost }), + ...(v.carrier === undefined ? null : { carrier: v.carrier }), + }; + }); } diff --git a/src/models/components/getaccesstokenrequest.ts b/src/models/components/getaccesstokenrequest.ts index dd6fb86..82dbfd4 100644 --- a/src/models/components/getaccesstokenrequest.ts +++ b/src/models/components/getaccesstokenrequest.ts @@ -2,7 +2,7 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; +import { z } from "zod"; /** * The type of OAuth 2.0 grant being utilized. @@ -22,25 +22,19 @@ export enum Scope { Openid = "openid", } -export class GetAccessTokenRequest extends SpeakeasyBase { +export type GetAccessTokenRequest = { /** * Fetched value using OTP value from the Authorization Modal. */ - @SpeakeasyMetadata({ data: "form, name=code" }) code: string; - /** * Merchant publishable key which can be found in the merchant dashboard */ - @SpeakeasyMetadata({ data: "form, name=client_id" }) clientId: string; - /** * Your Bolt API Key. */ - @SpeakeasyMetadata({ data: "form, name=client_secret" }) clientSecret: string; - /** * The type of OAuth 2.0 grant being utilized. * @@ -49,9 +43,7 @@ export class GetAccessTokenRequest extends SpeakeasyBase { * The value will always be `authorization_code` when exchanging an authorization code for an access token. * */ - @SpeakeasyMetadata({ data: "form, name=grant_type" }) grantType: GrantType; - /** * The scope issued to the merchant when receiving an authorization code. * @@ -61,12 +53,76 @@ export class GetAccessTokenRequest extends SpeakeasyBase { * [OAuth scope documentation](https://help.bolt.com/developers/references/bolt-oauth/#scopes). * */ - @SpeakeasyMetadata({ data: "form, name=scope" }) - scope: Scope[]; - + scope: Array; /** * A randomly generated string issued to the merchant when receiving an authorization code used to prevent CSRF attacks */ - @SpeakeasyMetadata({ data: "form, name=state" }) - state?: string; + state?: string | undefined; +}; + +/** @internal */ +export const GrantType$ = z.nativeEnum(GrantType); + +/** @internal */ +export const Scope$ = z.nativeEnum(Scope); + +/** @internal */ +export namespace GetAccessTokenRequest$ { + export type Inbound = { + code: string; + client_id: string; + client_secret: string; + grant_type: GrantType; + scope: Array; + state?: string | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + code: z.string(), + client_id: z.string(), + client_secret: z.string(), + grant_type: GrantType$, + scope: z.array(Scope$), + state: z.string().optional(), + }) + .transform((v) => { + return { + code: v.code, + clientId: v.client_id, + clientSecret: v.client_secret, + grantType: v.grant_type, + scope: v.scope, + ...(v.state === undefined ? null : { state: v.state }), + }; + }); + + export type Outbound = { + code: string; + client_id: string; + client_secret: string; + grant_type: GrantType; + scope: Array; + state?: string | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + code: z.string(), + clientId: z.string(), + clientSecret: z.string(), + grantType: GrantType$, + scope: z.array(Scope$), + state: z.string().optional(), + }) + .transform((v) => { + return { + code: v.code, + client_id: v.clientId, + client_secret: v.clientSecret, + grant_type: v.grantType, + scope: v.scope, + ...(v.state === undefined ? null : { state: v.state }), + }; + }); } diff --git a/src/models/components/getaccesstokenresponse.ts b/src/models/components/getaccesstokenresponse.ts index 04e753d..bdea664 100644 --- a/src/models/components/getaccesstokenresponse.ts +++ b/src/models/components/getaccesstokenresponse.ts @@ -2,8 +2,7 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { Expose } from "class-transformer"; +import { z } from "zod"; export enum RefreshTokenScope { BoltAccountManage = "bolt.account.manage", @@ -17,42 +16,27 @@ export enum GetAccessTokenResponseScope { Openid = "openid", } -export class GetAccessTokenResponse extends SpeakeasyBase { +export type GetAccessTokenResponse = { /** * A JWT token issued when the request includes the scope open_id. */ - @SpeakeasyMetadata() - @Expose({ name: "id_token" }) - idToken?: string; - + idToken?: string | undefined; /** * An access token you can use to make requests on behalf of a Bolt Account. */ - @SpeakeasyMetadata() - @Expose({ name: "access_token" }) - accessToken?: string; - + accessToken?: string | undefined; /** * Access token’s expiration in seconds. */ - @SpeakeasyMetadata() - @Expose({ name: "expires_in" }) - expiresIn?: number; - + expiresIn?: number | undefined; /** * A refresh token you can use to issue a brand new access token without obtaining a new authorization code. */ - @SpeakeasyMetadata() - @Expose({ name: "refresh_token" }) - refreshToken?: string; - + refreshToken?: string | undefined; /** * The scope granted to the refresh token. Currently this will always be bolt.account.view. */ - @SpeakeasyMetadata() - @Expose({ name: "refresh_token_scope" }) - refreshTokenScope?: RefreshTokenScope[]; - + refreshTokenScope?: Array | undefined; /** * The scope granted to access token, depending on the scope granted to the authorization code as well as the scope parameter. * @@ -60,14 +44,86 @@ export class GetAccessTokenResponse extends SpeakeasyBase { * Options include `bolt.account.manage`, `bolt.account.view`, `openid`.' * */ - @SpeakeasyMetadata() - @Expose({ name: "scope" }) - scope?: GetAccessTokenResponseScope[]; - + scope?: Array | undefined; /** * The token_type will always be bearer. */ - @SpeakeasyMetadata() - @Expose({ name: "token_type" }) - tokenType?: string; + tokenType?: string | undefined; +}; + +/** @internal */ +export const RefreshTokenScope$ = z.nativeEnum(RefreshTokenScope); + +/** @internal */ +export const GetAccessTokenResponseScope$ = z.nativeEnum(GetAccessTokenResponseScope); + +/** @internal */ +export namespace GetAccessTokenResponse$ { + export type Inbound = { + id_token?: string | undefined; + access_token?: string | undefined; + expires_in?: number | undefined; + refresh_token?: string | undefined; + refresh_token_scope?: Array | undefined; + scope?: Array | undefined; + token_type?: string | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + id_token: z.string().optional(), + access_token: z.string().optional(), + expires_in: z.number().int().optional(), + refresh_token: z.string().optional(), + refresh_token_scope: z.array(RefreshTokenScope$).optional(), + scope: z.array(GetAccessTokenResponseScope$).optional(), + token_type: z.string().optional(), + }) + .transform((v) => { + return { + ...(v.id_token === undefined ? null : { idToken: v.id_token }), + ...(v.access_token === undefined ? null : { accessToken: v.access_token }), + ...(v.expires_in === undefined ? null : { expiresIn: v.expires_in }), + ...(v.refresh_token === undefined ? null : { refreshToken: v.refresh_token }), + ...(v.refresh_token_scope === undefined + ? null + : { refreshTokenScope: v.refresh_token_scope }), + ...(v.scope === undefined ? null : { scope: v.scope }), + ...(v.token_type === undefined ? null : { tokenType: v.token_type }), + }; + }); + + export type Outbound = { + id_token?: string | undefined; + access_token?: string | undefined; + expires_in?: number | undefined; + refresh_token?: string | undefined; + refresh_token_scope?: Array | undefined; + scope?: Array | undefined; + token_type?: string | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + idToken: z.string().optional(), + accessToken: z.string().optional(), + expiresIn: z.number().int().optional(), + refreshToken: z.string().optional(), + refreshTokenScope: z.array(RefreshTokenScope$).optional(), + scope: z.array(GetAccessTokenResponseScope$).optional(), + tokenType: z.string().optional(), + }) + .transform((v) => { + return { + ...(v.idToken === undefined ? null : { id_token: v.idToken }), + ...(v.accessToken === undefined ? null : { access_token: v.accessToken }), + ...(v.expiresIn === undefined ? null : { expires_in: v.expiresIn }), + ...(v.refreshToken === undefined ? null : { refresh_token: v.refreshToken }), + ...(v.refreshTokenScope === undefined + ? null + : { refresh_token_scope: v.refreshTokenScope }), + ...(v.scope === undefined ? null : { scope: v.scope }), + ...(v.tokenType === undefined ? null : { token_type: v.tokenType }), + }; + }); } diff --git a/src/models/components/guestpaymentinitializerequest.ts b/src/models/components/guestpaymentinitializerequest.ts index 7ed24dd..a126805 100644 --- a/src/models/components/guestpaymentinitializerequest.ts +++ b/src/models/components/guestpaymentinitializerequest.ts @@ -2,23 +2,56 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { Cart } from "./cart"; -import { ProfileCreationData } from "./profilecreationdata"; -import { Expose, Type } from "class-transformer"; +import { Cart, Cart$ } from "./cart"; +import { ProfileCreationData, ProfileCreationData$ } from "./profilecreationdata"; +import { z } from "zod"; -export class GuestPaymentInitializeRequest extends SpeakeasyBase { - @SpeakeasyMetadata() - @Expose({ name: "profile" }) - @Type(() => ProfileCreationData) +export type GuestPaymentInitializeRequest = { profile: ProfileCreationData; - - @SpeakeasyMetadata() - @Expose({ name: "cart" }) - @Type(() => Cart) cart: Cart; + paymentMethod?: any | undefined; +}; + +/** @internal */ +export namespace GuestPaymentInitializeRequest$ { + export type Inbound = { + profile: ProfileCreationData$.Inbound; + cart: Cart$.Inbound; + payment_method?: any | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + profile: ProfileCreationData$.inboundSchema, + cart: Cart$.inboundSchema, + payment_method: z.any().optional(), + }) + .transform((v) => { + return { + profile: v.profile, + cart: v.cart, + ...(v.payment_method === undefined ? null : { paymentMethod: v.payment_method }), + }; + }); + + export type Outbound = { + profile: ProfileCreationData$.Outbound; + cart: Cart$.Outbound; + payment_method?: any | undefined; + }; - @SpeakeasyMetadata() - @Expose({ name: "payment_method" }) - paymentMethod: any; + export const outboundSchema: z.ZodType = + z + .object({ + profile: ProfileCreationData$.outboundSchema, + cart: Cart$.outboundSchema, + paymentMethod: z.any().optional(), + }) + .transform((v) => { + return { + profile: v.profile, + cart: v.cart, + ...(v.paymentMethod === undefined ? null : { payment_method: v.paymentMethod }), + }; + }); } diff --git a/src/models/components/identifier.ts b/src/models/components/identifier.ts deleted file mode 100644 index 0c534fa..0000000 --- a/src/models/components/identifier.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. - */ - -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; - -/** - * The type of identifier - */ -export enum IdentifierType { - Email = "email", - EmailSha256 = "email_sha256", -} - -export class Identifier extends SpeakeasyBase { - /** - * The type of identifier - */ - @SpeakeasyMetadata({ data: "queryParam, name=identifier_type" }) - identifierType: IdentifierType; - - /** - * The value of the identifier. The value must be valid for the specified `identifier_type` - */ - @SpeakeasyMetadata({ data: "queryParam, name=identifier_value" }) - identifierValue: string; -} diff --git a/src/models/components/index.ts b/src/models/components/index.ts index e1568ff..05d0b8e 100644 --- a/src/models/components/index.ts +++ b/src/models/components/index.ts @@ -13,7 +13,6 @@ export * from "./cartshipment"; export * from "./getaccesstokenrequest"; export * from "./getaccesstokenresponse"; export * from "./guestpaymentinitializerequest"; -export * from "./identifier"; export * from "./paymentactionrequest"; export * from "./paymentinitializerequest"; export * from "./paymentupdaterequest"; diff --git a/src/models/components/paymentactionrequest.ts b/src/models/components/paymentactionrequest.ts index 67517c4..7cf14aa 100644 --- a/src/models/components/paymentactionrequest.ts +++ b/src/models/components/paymentactionrequest.ts @@ -2,22 +2,56 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { Expose } from "class-transformer"; +import { z } from "zod"; export enum DotTag { Finalize = "finalize", } -export class PaymentActionRequest extends SpeakeasyBase { - @SpeakeasyMetadata() - @Expose({ name: ".tag" }) +export type PaymentActionRequest = { dotTag: DotTag; - /** * Optional redirect result token required for an APM payment (excluding PayPal). */ - @SpeakeasyMetadata() - @Expose({ name: "redirect_result" }) - redirectResult?: string; + redirectResult?: string | undefined; +}; + +/** @internal */ +export const DotTag$ = z.nativeEnum(DotTag); + +/** @internal */ +export namespace PaymentActionRequest$ { + export type Inbound = { + ".tag": DotTag; + redirect_result?: string | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + ".tag": DotTag$, + redirect_result: z.string().optional(), + }) + .transform((v) => { + return { + dotTag: v[".tag"], + ...(v.redirect_result === undefined ? null : { redirectResult: v.redirect_result }), + }; + }); + + export type Outbound = { + ".tag": DotTag; + redirect_result?: string | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + dotTag: DotTag$, + redirectResult: z.string().optional(), + }) + .transform((v) => { + return { + ".tag": v.dotTag, + ...(v.redirectResult === undefined ? null : { redirect_result: v.redirectResult }), + }; + }); } diff --git a/src/models/components/paymentinitializerequest.ts b/src/models/components/paymentinitializerequest.ts index 834df30..a713dd6 100644 --- a/src/models/components/paymentinitializerequest.ts +++ b/src/models/components/paymentinitializerequest.ts @@ -2,17 +2,47 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { Cart } from "./cart"; -import { Expose, Type } from "class-transformer"; +import { Cart, Cart$ } from "./cart"; +import { z } from "zod"; -export class PaymentInitializeRequest extends SpeakeasyBase { - @SpeakeasyMetadata() - @Expose({ name: "cart" }) - @Type(() => Cart) +export type PaymentInitializeRequest = { cart: Cart; + paymentMethod?: any | undefined; +}; - @SpeakeasyMetadata() - @Expose({ name: "payment_method" }) - paymentMethod: any; +/** @internal */ +export namespace PaymentInitializeRequest$ { + export type Inbound = { + cart: Cart$.Inbound; + payment_method?: any | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + cart: Cart$.inboundSchema, + payment_method: z.any().optional(), + }) + .transform((v) => { + return { + cart: v.cart, + ...(v.payment_method === undefined ? null : { paymentMethod: v.payment_method }), + }; + }); + + export type Outbound = { + cart: Cart$.Outbound; + payment_method?: any | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + cart: Cart$.outboundSchema, + paymentMethod: z.any().optional(), + }) + .transform((v) => { + return { + cart: v.cart, + ...(v.paymentMethod === undefined ? null : { payment_method: v.paymentMethod }), + }; + }); } diff --git a/src/models/components/paymentupdaterequest.ts b/src/models/components/paymentupdaterequest.ts index 4160b85..2e8d2a2 100644 --- a/src/models/components/paymentupdaterequest.ts +++ b/src/models/components/paymentupdaterequest.ts @@ -2,13 +2,40 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { Cart } from "./cart"; -import { Expose, Type } from "class-transformer"; - -export class PaymentUpdateRequest extends SpeakeasyBase { - @SpeakeasyMetadata() - @Expose({ name: "cart" }) - @Type(() => Cart) - cart?: Cart; +import { Cart, Cart$ } from "./cart"; +import { z } from "zod"; + +export type PaymentUpdateRequest = { + cart?: Cart | undefined; +}; + +/** @internal */ +export namespace PaymentUpdateRequest$ { + export type Inbound = { + cart?: Cart$.Inbound | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + cart: Cart$.inboundSchema.optional(), + }) + .transform((v) => { + return { + ...(v.cart === undefined ? null : { cart: v.cart }), + }; + }); + + export type Outbound = { + cart?: Cart$.Outbound | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + cart: Cart$.outboundSchema.optional(), + }) + .transform((v) => { + return { + ...(v.cart === undefined ? null : { cart: v.cart }), + }; + }); } diff --git a/src/models/components/profile.ts b/src/models/components/profile.ts index a0b84de..9cc444b 100644 --- a/src/models/components/profile.ts +++ b/src/models/components/profile.ts @@ -2,35 +2,72 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { Expose } from "class-transformer"; +import { z } from "zod"; -export class Profile extends SpeakeasyBase { +export type Profile = { /** * The given name of the person associated with this profile. */ - @SpeakeasyMetadata() - @Expose({ name: "first_name" }) firstName: string; - /** * The last name of the person associated with this profile. */ - @SpeakeasyMetadata() - @Expose({ name: "last_name" }) lastName: string; - /** * The email address asscoiated with this profile. */ - @SpeakeasyMetadata() - @Expose({ name: "email" }) email: string; - /** * The phone number associated with this profile. */ - @SpeakeasyMetadata() - @Expose({ name: "phone" }) - phone?: string; + phone?: string | undefined; +}; + +/** @internal */ +export namespace Profile$ { + export type Inbound = { + first_name: string; + last_name: string; + email: string; + phone?: string | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + first_name: z.string(), + last_name: z.string(), + email: z.string(), + phone: z.string().optional(), + }) + .transform((v) => { + return { + firstName: v.first_name, + lastName: v.last_name, + email: v.email, + ...(v.phone === undefined ? null : { phone: v.phone }), + }; + }); + + export type Outbound = { + first_name: string; + last_name: string; + email: string; + phone?: string | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + firstName: z.string(), + lastName: z.string(), + email: z.string(), + phone: z.string().optional(), + }) + .transform((v) => { + return { + first_name: v.firstName, + last_name: v.lastName, + email: v.email, + ...(v.phone === undefined ? null : { phone: v.phone }), + }; + }); } diff --git a/src/models/components/profilecreationdata.ts b/src/models/components/profilecreationdata.ts index 8b721a7..6abf577 100644 --- a/src/models/components/profilecreationdata.ts +++ b/src/models/components/profilecreationdata.ts @@ -2,42 +2,82 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { Expose } from "class-transformer"; +import { z } from "zod"; -export class ProfileCreationData extends SpeakeasyBase { +export type ProfileCreationData = { /** * Whether or not an account should be created. */ - @SpeakeasyMetadata() - @Expose({ name: "create_account" }) createAccount: boolean; - /** * The given name of the person associated with this profile. */ - @SpeakeasyMetadata() - @Expose({ name: "first_name" }) firstName: string; - /** * The last name of the person associated with this profile. */ - @SpeakeasyMetadata() - @Expose({ name: "last_name" }) lastName: string; - /** * The email address asscoiated with this profile. */ - @SpeakeasyMetadata() - @Expose({ name: "email" }) email: string; - /** * The phone number associated with this profile. */ - @SpeakeasyMetadata() - @Expose({ name: "phone" }) - phone?: string; + phone?: string | undefined; +}; + +/** @internal */ +export namespace ProfileCreationData$ { + export type Inbound = { + create_account: boolean; + first_name: string; + last_name: string; + email: string; + phone?: string | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + create_account: z.boolean(), + first_name: z.string(), + last_name: z.string(), + email: z.string(), + phone: z.string().optional(), + }) + .transform((v) => { + return { + createAccount: v.create_account, + firstName: v.first_name, + lastName: v.last_name, + email: v.email, + ...(v.phone === undefined ? null : { phone: v.phone }), + }; + }); + + export type Outbound = { + create_account: boolean; + first_name: string; + last_name: string; + email: string; + phone?: string | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + createAccount: z.boolean(), + firstName: z.string(), + lastName: z.string(), + email: z.string(), + phone: z.string().optional(), + }) + .transform((v) => { + return { + create_account: v.createAccount, + first_name: v.firstName, + last_name: v.lastName, + email: v.email, + ...(v.phone === undefined ? null : { phone: v.phone }), + }; + }); } diff --git a/src/models/components/security.ts b/src/models/components/security.ts index 0d2c9dc..265ed79 100644 --- a/src/models/components/security.ts +++ b/src/models/components/security.ts @@ -2,12 +2,7 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; - -export class Security extends SpeakeasyBase { - @SpeakeasyMetadata({ data: "security, scheme=true;type=oauth2;name=Authorization" }) - oauth?: string; - - @SpeakeasyMetadata({ data: "security, scheme=true;type=apiKey;subtype=header;name=X-API-Key" }) - apiKey?: string; -} +export type Security = { + oauth?: string | undefined; + apiKey?: string | undefined; +}; diff --git a/src/models/components/testcreditcard.ts b/src/models/components/testcreditcard.ts index fa8c523..e153251 100644 --- a/src/models/components/testcreditcard.ts +++ b/src/models/components/testcreditcard.ts @@ -2,8 +2,7 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { Expose, Transform } from "class-transformer"; +import { z } from "zod"; /** * The credit card's network. @@ -19,40 +18,86 @@ export enum Network { Citiplcc = "citiplcc", } -export class TestCreditCard extends SpeakeasyBase { +export type TestCreditCard = { /** * The credit card's network. */ - @SpeakeasyMetadata() - @Expose({ name: "network" }) network: Network; - /** * The Bank Identification Number (BIN). This is typically the first 4 to 6 digits of the account number. */ - @SpeakeasyMetadata() - @Expose({ name: "bin" }) bin: string; - /** * The account number's last four digits. */ - @SpeakeasyMetadata() - @Expose({ name: "last4" }) last4: string; - /** * The token's expiration date. Tokens used past their expiration will be rejected. */ - @SpeakeasyMetadata() - @Expose({ name: "expiration" }) - @Transform(({ value }) => new Date(value), { toClassOnly: true }) expiration: Date; - /** * The Bolt token associated with the credit card. */ - @SpeakeasyMetadata() - @Expose({ name: "token" }) token: string; +}; + +/** @internal */ +export const Network$ = z.nativeEnum(Network); + +/** @internal */ +export namespace TestCreditCard$ { + export type Inbound = { + network: Network; + bin: string; + last4: string; + expiration: string; + token: string; + }; + + export const inboundSchema: z.ZodType = z + .object({ + network: Network$, + bin: z.string(), + last4: z.string(), + expiration: z + .string() + .datetime({ offset: true }) + .transform((v) => new Date(v)), + token: z.string(), + }) + .transform((v) => { + return { + network: v.network, + bin: v.bin, + last4: v.last4, + expiration: v.expiration, + token: v.token, + }; + }); + + export type Outbound = { + network: Network; + bin: string; + last4: string; + expiration: string; + token: string; + }; + + export const outboundSchema: z.ZodType = z + .object({ + network: Network$, + bin: z.string(), + last4: z.string(), + expiration: z.date().transform((v) => v.toISOString()), + token: z.string(), + }) + .transform((v) => { + return { + network: v.network, + bin: v.bin, + last4: v.last4, + expiration: v.expiration, + token: v.token, + }; + }); } diff --git a/src/models/errors/error.ts b/src/models/errors/error.ts deleted file mode 100644 index b6dbd49..0000000 --- a/src/models/errors/error.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. - */ - -import { SpeakeasyMetadata } from "../../internal/utils"; -import { classToPlain, Expose } from "class-transformer"; - -/** - * The type of error returned - */ -export enum DotTag { - UnprocessableRequest = "unprocessable_request", - MissingInputParameter = "missing_input_parameter", - InvalidInputParameter = "invalid_input_parameter", - NotFound = "not_found", -} - -/** - * An error has occurred, and further details are contained in the response - */ -export class ErrorT extends Error { - /** - * The type of error returned - */ - @SpeakeasyMetadata() - @Expose({ name: ".tag" }) - dotTag: DotTag; - - /** - * A human-readable error message, which might include information specific to - * - * @remarks - * the request that was made. - * - */ - @SpeakeasyMetadata() - @Expose({ name: "message" }) - message: string; - - constructor(err?: ErrorT) { - super(); - if (err) { - Object.assign(this, err); - this.message = JSON.stringify( - classToPlain(err, { exposeUnsetFields: false, excludeExtraneousValues: true }) - ); - } - - this.name = "ErrorT"; - Object.setPrototypeOf(this, ErrorT.prototype); - } -} diff --git a/src/models/errors/index.ts b/src/models/errors/index.ts index 98e4263..4779e6a 100644 --- a/src/models/errors/index.ts +++ b/src/models/errors/index.ts @@ -2,5 +2,4 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -export * from "./error"; export * from "./sdkerror"; diff --git a/src/models/errors/sdkerror.ts b/src/models/errors/sdkerror.ts index f12b6e2..bcd7873 100644 --- a/src/models/errors/sdkerror.ts +++ b/src/models/errors/sdkerror.ts @@ -2,30 +2,23 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { AxiosResponse } from "axios"; - export class SDKError extends Error { statusCode: number; body: string; - rawResponse: AxiosResponse; + rawResponse: Response; + + constructor(message: string, response: Response, body: string = "") { + const statusCode = response.status; - constructor( - message: string, - statusCode: number, - body: string, - rawResponse: AxiosResponse, - ) { let bodyString = ""; - if (body?.length > 0) { + if (body.length > 0) { bodyString = `\n${body}`; } super(`${message}: Status ${statusCode}${bodyString}`); this.statusCode = statusCode; this.body = body; - this.rawResponse = rawResponse; - + this.rawResponse = response; this.name = "SDKError"; - Object.setPrototypeOf(this, SDKError.prototype); } } diff --git a/src/models/operations/accountaddpaymentmethod.ts b/src/models/operations/accountaddpaymentmethod.ts index 8abd2b2..53b3576 100644 --- a/src/models/operations/accountaddpaymentmethod.ts +++ b/src/models/operations/accountaddpaymentmethod.ts @@ -2,42 +2,127 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { AxiosResponse } from "axios"; +import { z } from "zod"; -export class AccountAddPaymentMethodRequest extends SpeakeasyBase { +export type AccountAddPaymentMethodRequest = { /** * The publicly viewable identifier used to identify a merchant division. */ - @SpeakeasyMetadata({ data: "header, style=simple;explode=false;name=X-Publishable-Key" }) xPublishableKey: string; + requestBody?: any | undefined; +}; - @SpeakeasyMetadata({ data: "request, media_type=application/json" }) - requestBody: any; -} - -export class AccountAddPaymentMethodResponse extends SpeakeasyBase { +export type AccountAddPaymentMethodResponse = { /** * HTTP response content type for this operation */ - @SpeakeasyMetadata() contentType: string; - /** * HTTP response status code for this operation */ - @SpeakeasyMetadata() statusCode: number; - /** * Raw HTTP response; suitable for custom response parsing */ - @SpeakeasyMetadata() - rawResponse: AxiosResponse; - + rawResponse: Response; /** * The payment method was successfully added */ - @SpeakeasyMetadata() - paymentMethod?: any; + paymentMethod?: any | undefined; +}; + +/** @internal */ +export namespace AccountAddPaymentMethodRequest$ { + export type Inbound = { + "X-Publishable-Key": string; + RequestBody?: any | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + "X-Publishable-Key": z.string(), + RequestBody: z.any().optional(), + }) + .transform((v) => { + return { + xPublishableKey: v["X-Publishable-Key"], + ...(v.RequestBody === undefined ? null : { requestBody: v.RequestBody }), + }; + }); + + export type Outbound = { + "X-Publishable-Key": string; + RequestBody?: any | undefined; + }; + + export const outboundSchema: z.ZodType = + z + .object({ + xPublishableKey: z.string(), + requestBody: z.any().optional(), + }) + .transform((v) => { + return { + "X-Publishable-Key": v.xPublishableKey, + ...(v.requestBody === undefined ? null : { RequestBody: v.requestBody }), + }; + }); +} + +/** @internal */ +export namespace AccountAddPaymentMethodResponse$ { + export type Inbound = { + ContentType: string; + StatusCode: number; + RawResponse: Response; + "payment-method"?: any | undefined; + }; + + export const inboundSchema: z.ZodType = + z + .object({ + ContentType: z.string(), + StatusCode: z.number().int(), + RawResponse: z.instanceof(Response), + "payment-method": z.any().optional(), + }) + .transform((v) => { + return { + contentType: v.ContentType, + statusCode: v.StatusCode, + rawResponse: v.RawResponse, + ...(v["payment-method"] === undefined + ? null + : { paymentMethod: v["payment-method"] }), + }; + }); + + export type Outbound = { + ContentType: string; + StatusCode: number; + RawResponse: never; + "payment-method"?: any | undefined; + }; + + export const outboundSchema: z.ZodType< + Outbound, + z.ZodTypeDef, + AccountAddPaymentMethodResponse + > = z + .object({ + contentType: z.string(), + statusCode: z.number().int(), + rawResponse: z.instanceof(Response).transform(() => { + throw new Error("Response cannot be serialized"); + }), + paymentMethod: z.any().optional(), + }) + .transform((v) => { + return { + ContentType: v.contentType, + StatusCode: v.statusCode, + RawResponse: v.rawResponse, + ...(v.paymentMethod === undefined ? null : { "payment-method": v.paymentMethod }), + }; + }); } diff --git a/src/models/operations/accountaddresscreate.ts b/src/models/operations/accountaddresscreate.ts index 98fe13a..5408aa1 100644 --- a/src/models/operations/accountaddresscreate.ts +++ b/src/models/operations/accountaddresscreate.ts @@ -2,43 +2,124 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; import * as components from "../../models/components"; -import { AxiosResponse } from "axios"; +import { z } from "zod"; -export class AccountAddressCreateRequest extends SpeakeasyBase { +export type AccountAddressCreateRequest = { /** * The publicly viewable identifier used to identify a merchant division. */ - @SpeakeasyMetadata({ data: "header, style=simple;explode=false;name=X-Publishable-Key" }) xPublishableKey: string; - - @SpeakeasyMetadata({ data: "request, media_type=application/json" }) addressListing: components.AddressListingInput; -} +}; -export class AccountAddressCreateResponse extends SpeakeasyBase { +export type AccountAddressCreateResponse = { /** * HTTP response content type for this operation */ - @SpeakeasyMetadata() contentType: string; - /** * HTTP response status code for this operation */ - @SpeakeasyMetadata() statusCode: number; - /** * Raw HTTP response; suitable for custom response parsing */ - @SpeakeasyMetadata() - rawResponse: AxiosResponse; - + rawResponse: Response; /** * The address was successfully added */ - @SpeakeasyMetadata() - addressListing?: components.AddressListing; + addressListing?: components.AddressListing | undefined; +}; + +/** @internal */ +export namespace AccountAddressCreateRequest$ { + export type Inbound = { + "X-Publishable-Key": string; + "address-listing": components.AddressListingInput$.Inbound; + }; + + export const inboundSchema: z.ZodType = z + .object({ + "X-Publishable-Key": z.string(), + "address-listing": components.AddressListingInput$.inboundSchema, + }) + .transform((v) => { + return { + xPublishableKey: v["X-Publishable-Key"], + addressListing: v["address-listing"], + }; + }); + + export type Outbound = { + "X-Publishable-Key": string; + "address-listing": components.AddressListingInput$.Outbound; + }; + + export const outboundSchema: z.ZodType = z + .object({ + xPublishableKey: z.string(), + addressListing: components.AddressListingInput$.outboundSchema, + }) + .transform((v) => { + return { + "X-Publishable-Key": v.xPublishableKey, + "address-listing": v.addressListing, + }; + }); +} + +/** @internal */ +export namespace AccountAddressCreateResponse$ { + export type Inbound = { + ContentType: string; + StatusCode: number; + RawResponse: Response; + "address-listing"?: components.AddressListing$.Inbound | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + ContentType: z.string(), + StatusCode: z.number().int(), + RawResponse: z.instanceof(Response), + "address-listing": components.AddressListing$.inboundSchema.optional(), + }) + .transform((v) => { + return { + contentType: v.ContentType, + statusCode: v.StatusCode, + rawResponse: v.RawResponse, + ...(v["address-listing"] === undefined + ? null + : { addressListing: v["address-listing"] }), + }; + }); + + export type Outbound = { + ContentType: string; + StatusCode: number; + RawResponse: never; + "address-listing"?: components.AddressListing$.Outbound | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + contentType: z.string(), + statusCode: z.number().int(), + rawResponse: z.instanceof(Response).transform(() => { + throw new Error("Response cannot be serialized"); + }), + addressListing: components.AddressListing$.outboundSchema.optional(), + }) + .transform((v) => { + return { + ContentType: v.contentType, + StatusCode: v.statusCode, + RawResponse: v.rawResponse, + ...(v.addressListing === undefined + ? null + : { "address-listing": v.addressListing }), + }; + }); } diff --git a/src/models/operations/accountaddressdelete.ts b/src/models/operations/accountaddressdelete.ts index 3f84474..3cb342f 100644 --- a/src/models/operations/accountaddressdelete.ts +++ b/src/models/operations/accountaddressdelete.ts @@ -2,39 +2,112 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { AxiosResponse } from "axios"; +import { z } from "zod"; -export class AccountAddressDeleteRequest extends SpeakeasyBase { +export type AccountAddressDeleteRequest = { /** * The ID of the address to delete */ - @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=id" }) id: string; - /** * The publicly viewable identifier used to identify a merchant division. */ - @SpeakeasyMetadata({ data: "header, style=simple;explode=false;name=X-Publishable-Key" }) xPublishableKey: string; -} +}; -export class AccountAddressDeleteResponse extends SpeakeasyBase { +export type AccountAddressDeleteResponse = { /** * HTTP response content type for this operation */ - @SpeakeasyMetadata() contentType: string; - /** * HTTP response status code for this operation */ - @SpeakeasyMetadata() statusCode: number; - /** * Raw HTTP response; suitable for custom response parsing */ - @SpeakeasyMetadata() - rawResponse: AxiosResponse; + rawResponse: Response; +}; + +/** @internal */ +export namespace AccountAddressDeleteRequest$ { + export type Inbound = { + id: string; + "X-Publishable-Key": string; + }; + + export const inboundSchema: z.ZodType = z + .object({ + id: z.string(), + "X-Publishable-Key": z.string(), + }) + .transform((v) => { + return { + id: v.id, + xPublishableKey: v["X-Publishable-Key"], + }; + }); + + export type Outbound = { + id: string; + "X-Publishable-Key": string; + }; + + export const outboundSchema: z.ZodType = z + .object({ + id: z.string(), + xPublishableKey: z.string(), + }) + .transform((v) => { + return { + id: v.id, + "X-Publishable-Key": v.xPublishableKey, + }; + }); +} + +/** @internal */ +export namespace AccountAddressDeleteResponse$ { + export type Inbound = { + ContentType: string; + StatusCode: number; + RawResponse: Response; + }; + + export const inboundSchema: z.ZodType = z + .object({ + ContentType: z.string(), + StatusCode: z.number().int(), + RawResponse: z.instanceof(Response), + }) + .transform((v) => { + return { + contentType: v.ContentType, + statusCode: v.StatusCode, + rawResponse: v.RawResponse, + }; + }); + + export type Outbound = { + ContentType: string; + StatusCode: number; + RawResponse: never; + }; + + export const outboundSchema: z.ZodType = z + .object({ + contentType: z.string(), + statusCode: z.number().int(), + rawResponse: z.instanceof(Response).transform(() => { + throw new Error("Response cannot be serialized"); + }), + }) + .transform((v) => { + return { + ContentType: v.contentType, + StatusCode: v.statusCode, + RawResponse: v.rawResponse, + }; + }); } diff --git a/src/models/operations/accountaddressedit.ts b/src/models/operations/accountaddressedit.ts index 54f248a..950d24c 100644 --- a/src/models/operations/accountaddressedit.ts +++ b/src/models/operations/accountaddressedit.ts @@ -2,49 +2,134 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; import * as components from "../../models/components"; -import { AxiosResponse } from "axios"; +import { z } from "zod"; -export class AccountAddressEditRequest extends SpeakeasyBase { +export type AccountAddressEditRequest = { /** * The ID of the address to edit */ - @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=id" }) id: string; - /** * The publicly viewable identifier used to identify a merchant division. */ - @SpeakeasyMetadata({ data: "header, style=simple;explode=false;name=X-Publishable-Key" }) xPublishableKey: string; - - @SpeakeasyMetadata({ data: "request, media_type=application/json" }) addressListing: components.AddressListingInput; -} +}; -export class AccountAddressEditResponse extends SpeakeasyBase { +export type AccountAddressEditResponse = { /** * HTTP response content type for this operation */ - @SpeakeasyMetadata() contentType: string; - /** * HTTP response status code for this operation */ - @SpeakeasyMetadata() statusCode: number; - /** * Raw HTTP response; suitable for custom response parsing */ - @SpeakeasyMetadata() - rawResponse: AxiosResponse; - + rawResponse: Response; /** * The address was successfully edited */ - @SpeakeasyMetadata() - addressListing?: components.AddressListing; + addressListing?: components.AddressListing | undefined; +}; + +/** @internal */ +export namespace AccountAddressEditRequest$ { + export type Inbound = { + id: string; + "X-Publishable-Key": string; + "address-listing": components.AddressListingInput$.Inbound; + }; + + export const inboundSchema: z.ZodType = z + .object({ + id: z.string(), + "X-Publishable-Key": z.string(), + "address-listing": components.AddressListingInput$.inboundSchema, + }) + .transform((v) => { + return { + id: v.id, + xPublishableKey: v["X-Publishable-Key"], + addressListing: v["address-listing"], + }; + }); + + export type Outbound = { + id: string; + "X-Publishable-Key": string; + "address-listing": components.AddressListingInput$.Outbound; + }; + + export const outboundSchema: z.ZodType = z + .object({ + id: z.string(), + xPublishableKey: z.string(), + addressListing: components.AddressListingInput$.outboundSchema, + }) + .transform((v) => { + return { + id: v.id, + "X-Publishable-Key": v.xPublishableKey, + "address-listing": v.addressListing, + }; + }); +} + +/** @internal */ +export namespace AccountAddressEditResponse$ { + export type Inbound = { + ContentType: string; + StatusCode: number; + RawResponse: Response; + "address-listing"?: components.AddressListing$.Inbound | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + ContentType: z.string(), + StatusCode: z.number().int(), + RawResponse: z.instanceof(Response), + "address-listing": components.AddressListing$.inboundSchema.optional(), + }) + .transform((v) => { + return { + contentType: v.ContentType, + statusCode: v.StatusCode, + rawResponse: v.RawResponse, + ...(v["address-listing"] === undefined + ? null + : { addressListing: v["address-listing"] }), + }; + }); + + export type Outbound = { + ContentType: string; + StatusCode: number; + RawResponse: never; + "address-listing"?: components.AddressListing$.Outbound | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + contentType: z.string(), + statusCode: z.number().int(), + rawResponse: z.instanceof(Response).transform(() => { + throw new Error("Response cannot be serialized"); + }), + addressListing: components.AddressListing$.outboundSchema.optional(), + }) + .transform((v) => { + return { + ContentType: v.contentType, + StatusCode: v.statusCode, + RawResponse: v.rawResponse, + ...(v.addressListing === undefined + ? null + : { "address-listing": v.addressListing }), + }; + }); } diff --git a/src/models/operations/accountexists.ts b/src/models/operations/accountexists.ts deleted file mode 100644 index 744d26b..0000000 --- a/src/models/operations/accountexists.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. - */ - -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import * as components from "../../models/components"; -import { AxiosResponse } from "axios"; - -export class AccountExistsRequest extends SpeakeasyBase { - /** - * A type and value combination that defines the identifier used to detect - * - * @remarks - * the existence of an account. - * - */ - @SpeakeasyMetadata({ data: "queryParam, style=form;explode=true;name=identifier" }) - identifier: components.Identifier; - - /** - * The publicly viewable identifier used to identify a merchant division. - */ - @SpeakeasyMetadata({ data: "header, style=simple;explode=false;name=X-Publishable-Key" }) - xPublishableKey: string; -} - -export class AccountExistsResponse extends SpeakeasyBase { - /** - * HTTP response content type for this operation - */ - @SpeakeasyMetadata() - contentType: string; - - /** - * HTTP response status code for this operation - */ - @SpeakeasyMetadata() - statusCode: number; - - /** - * Raw HTTP response; suitable for custom response parsing - */ - @SpeakeasyMetadata() - rawResponse: AxiosResponse; -} diff --git a/src/models/operations/accountget.ts b/src/models/operations/accountget.ts index 4813e4c..1749912 100644 --- a/src/models/operations/accountget.ts +++ b/src/models/operations/accountget.ts @@ -2,40 +2,113 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; import * as components from "../../models/components"; -import { AxiosResponse } from "axios"; +import { z } from "zod"; -export class AccountGetRequest extends SpeakeasyBase { +export type AccountGetRequest = { /** * The publicly viewable identifier used to identify a merchant division. */ - @SpeakeasyMetadata({ data: "header, style=simple;explode=false;name=X-Publishable-Key" }) xPublishableKey: string; -} +}; -export class AccountGetResponse extends SpeakeasyBase { +export type AccountGetResponse = { /** * HTTP response content type for this operation */ - @SpeakeasyMetadata() contentType: string; - /** * HTTP response status code for this operation */ - @SpeakeasyMetadata() statusCode: number; - /** * Raw HTTP response; suitable for custom response parsing */ - @SpeakeasyMetadata() - rawResponse: AxiosResponse; - + rawResponse: Response; /** * The account details were successfully retrieved */ - @SpeakeasyMetadata() - account?: components.Account; + account?: components.Account | undefined; +}; + +/** @internal */ +export namespace AccountGetRequest$ { + export type Inbound = { + "X-Publishable-Key": string; + }; + + export const inboundSchema: z.ZodType = z + .object({ + "X-Publishable-Key": z.string(), + }) + .transform((v) => { + return { + xPublishableKey: v["X-Publishable-Key"], + }; + }); + + export type Outbound = { + "X-Publishable-Key": string; + }; + + export const outboundSchema: z.ZodType = z + .object({ + xPublishableKey: z.string(), + }) + .transform((v) => { + return { + "X-Publishable-Key": v.xPublishableKey, + }; + }); +} + +/** @internal */ +export namespace AccountGetResponse$ { + export type Inbound = { + ContentType: string; + StatusCode: number; + RawResponse: Response; + account?: components.Account$.Inbound | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + ContentType: z.string(), + StatusCode: z.number().int(), + RawResponse: z.instanceof(Response), + account: components.Account$.inboundSchema.optional(), + }) + .transform((v) => { + return { + contentType: v.ContentType, + statusCode: v.StatusCode, + rawResponse: v.RawResponse, + ...(v.account === undefined ? null : { account: v.account }), + }; + }); + + export type Outbound = { + ContentType: string; + StatusCode: number; + RawResponse: never; + account?: components.Account$.Outbound | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + contentType: z.string(), + statusCode: z.number().int(), + rawResponse: z.instanceof(Response).transform(() => { + throw new Error("Response cannot be serialized"); + }), + account: components.Account$.outboundSchema.optional(), + }) + .transform((v) => { + return { + ContentType: v.contentType, + StatusCode: v.statusCode, + RawResponse: v.rawResponse, + ...(v.account === undefined ? null : { account: v.account }), + }; + }); } diff --git a/src/models/operations/accountpaymentmethoddelete.ts b/src/models/operations/accountpaymentmethoddelete.ts index 593cd0f..036d9bf 100644 --- a/src/models/operations/accountpaymentmethoddelete.ts +++ b/src/models/operations/accountpaymentmethoddelete.ts @@ -2,39 +2,128 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; -import { AxiosResponse } from "axios"; +import { z } from "zod"; -export class AccountPaymentMethodDeleteRequest extends SpeakeasyBase { +export type AccountPaymentMethodDeleteRequest = { /** * The ID of the payment method to delete */ - @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=id" }) id: string; - /** * The publicly viewable identifier used to identify a merchant division. */ - @SpeakeasyMetadata({ data: "header, style=simple;explode=false;name=X-Publishable-Key" }) xPublishableKey: string; -} +}; -export class AccountPaymentMethodDeleteResponse extends SpeakeasyBase { +export type AccountPaymentMethodDeleteResponse = { /** * HTTP response content type for this operation */ - @SpeakeasyMetadata() contentType: string; - /** * HTTP response status code for this operation */ - @SpeakeasyMetadata() statusCode: number; - /** * Raw HTTP response; suitable for custom response parsing */ - @SpeakeasyMetadata() - rawResponse: AxiosResponse; + rawResponse: Response; +}; + +/** @internal */ +export namespace AccountPaymentMethodDeleteRequest$ { + export type Inbound = { + id: string; + "X-Publishable-Key": string; + }; + + export const inboundSchema: z.ZodType< + AccountPaymentMethodDeleteRequest, + z.ZodTypeDef, + Inbound + > = z + .object({ + id: z.string(), + "X-Publishable-Key": z.string(), + }) + .transform((v) => { + return { + id: v.id, + xPublishableKey: v["X-Publishable-Key"], + }; + }); + + export type Outbound = { + id: string; + "X-Publishable-Key": string; + }; + + export const outboundSchema: z.ZodType< + Outbound, + z.ZodTypeDef, + AccountPaymentMethodDeleteRequest + > = z + .object({ + id: z.string(), + xPublishableKey: z.string(), + }) + .transform((v) => { + return { + id: v.id, + "X-Publishable-Key": v.xPublishableKey, + }; + }); +} + +/** @internal */ +export namespace AccountPaymentMethodDeleteResponse$ { + export type Inbound = { + ContentType: string; + StatusCode: number; + RawResponse: Response; + }; + + export const inboundSchema: z.ZodType< + AccountPaymentMethodDeleteResponse, + z.ZodTypeDef, + Inbound + > = z + .object({ + ContentType: z.string(), + StatusCode: z.number().int(), + RawResponse: z.instanceof(Response), + }) + .transform((v) => { + return { + contentType: v.ContentType, + statusCode: v.StatusCode, + rawResponse: v.RawResponse, + }; + }); + + export type Outbound = { + ContentType: string; + StatusCode: number; + RawResponse: never; + }; + + export const outboundSchema: z.ZodType< + Outbound, + z.ZodTypeDef, + AccountPaymentMethodDeleteResponse + > = z + .object({ + contentType: z.string(), + statusCode: z.number().int(), + rawResponse: z.instanceof(Response).transform(() => { + throw new Error("Response cannot be serialized"); + }), + }) + .transform((v) => { + return { + ContentType: v.contentType, + StatusCode: v.statusCode, + RawResponse: v.rawResponse, + }; + }); } diff --git a/src/models/operations/guestpaymentsaction.ts b/src/models/operations/guestpaymentsaction.ts index 743e891..5f7db59 100644 --- a/src/models/operations/guestpaymentsaction.ts +++ b/src/models/operations/guestpaymentsaction.ts @@ -2,54 +2,138 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; import * as components from "../../models/components"; -import { AxiosResponse } from "axios"; +import { z } from "zod"; -export class GuestPaymentsActionSecurity extends SpeakeasyBase { - @SpeakeasyMetadata({ data: "security, scheme=true;type=apiKey;subtype=header;name=X-API-Key" }) +export type GuestPaymentsActionSecurity = { apiKey: string; -} +}; -export class GuestPaymentsActionRequest extends SpeakeasyBase { +export type GuestPaymentsActionRequest = { /** * The ID of the guest payment to operate on */ - @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=id" }) id: string; - /** * The publicly viewable identifier used to identify a merchant division. */ - @SpeakeasyMetadata({ data: "header, style=simple;explode=false;name=X-Publishable-Key" }) xPublishableKey: string; - - @SpeakeasyMetadata({ data: "request, media_type=application/json" }) paymentActionRequest: components.PaymentActionRequest; -} +}; -export class GuestPaymentsActionResponse extends SpeakeasyBase { +export type GuestPaymentsActionResponse = { /** * HTTP response content type for this operation */ - @SpeakeasyMetadata() contentType: string; - /** * HTTP response status code for this operation */ - @SpeakeasyMetadata() statusCode: number; - /** * Raw HTTP response; suitable for custom response parsing */ - @SpeakeasyMetadata() - rawResponse: AxiosResponse; - + rawResponse: Response; /** * The action was successfully applied to the pending guest payment */ - @SpeakeasyMetadata() - paymentResponse?: any; + paymentResponse?: any | undefined; +}; + +/** @internal */ +export namespace GuestPaymentsActionRequest$ { + export type Inbound = { + id: string; + "X-Publishable-Key": string; + "payment-action-request": components.PaymentActionRequest$.Inbound; + }; + + export const inboundSchema: z.ZodType = z + .object({ + id: z.string(), + "X-Publishable-Key": z.string(), + "payment-action-request": components.PaymentActionRequest$.inboundSchema, + }) + .transform((v) => { + return { + id: v.id, + xPublishableKey: v["X-Publishable-Key"], + paymentActionRequest: v["payment-action-request"], + }; + }); + + export type Outbound = { + id: string; + "X-Publishable-Key": string; + "payment-action-request": components.PaymentActionRequest$.Outbound; + }; + + export const outboundSchema: z.ZodType = z + .object({ + id: z.string(), + xPublishableKey: z.string(), + paymentActionRequest: components.PaymentActionRequest$.outboundSchema, + }) + .transform((v) => { + return { + id: v.id, + "X-Publishable-Key": v.xPublishableKey, + "payment-action-request": v.paymentActionRequest, + }; + }); +} + +/** @internal */ +export namespace GuestPaymentsActionResponse$ { + export type Inbound = { + ContentType: string; + StatusCode: number; + RawResponse: Response; + "payment-response"?: any | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + ContentType: z.string(), + StatusCode: z.number().int(), + RawResponse: z.instanceof(Response), + "payment-response": z.any().optional(), + }) + .transform((v) => { + return { + contentType: v.ContentType, + statusCode: v.StatusCode, + rawResponse: v.RawResponse, + ...(v["payment-response"] === undefined + ? null + : { paymentResponse: v["payment-response"] }), + }; + }); + + export type Outbound = { + ContentType: string; + StatusCode: number; + RawResponse: never; + "payment-response"?: any | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + contentType: z.string(), + statusCode: z.number().int(), + rawResponse: z.instanceof(Response).transform(() => { + throw new Error("Response cannot be serialized"); + }), + paymentResponse: z.any().optional(), + }) + .transform((v) => { + return { + ContentType: v.contentType, + StatusCode: v.statusCode, + RawResponse: v.rawResponse, + ...(v.paymentResponse === undefined + ? null + : { "payment-response": v.paymentResponse }), + }; + }); } diff --git a/src/models/operations/guestpaymentsinitialize.ts b/src/models/operations/guestpaymentsinitialize.ts index f6d3413..e20b66c 100644 --- a/src/models/operations/guestpaymentsinitialize.ts +++ b/src/models/operations/guestpaymentsinitialize.ts @@ -2,48 +2,136 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; import * as components from "../../models/components"; -import { AxiosResponse } from "axios"; +import { z } from "zod"; -export class GuestPaymentsInitializeSecurity extends SpeakeasyBase { - @SpeakeasyMetadata({ data: "security, scheme=true;type=apiKey;subtype=header;name=X-API-Key" }) +export type GuestPaymentsInitializeSecurity = { apiKey: string; -} +}; -export class GuestPaymentsInitializeRequest extends SpeakeasyBase { +export type GuestPaymentsInitializeRequest = { /** * The publicly viewable identifier used to identify a merchant division. */ - @SpeakeasyMetadata({ data: "header, style=simple;explode=false;name=X-Publishable-Key" }) xPublishableKey: string; - - @SpeakeasyMetadata({ data: "request, media_type=application/json" }) guestPaymentInitializeRequest: components.GuestPaymentInitializeRequest; -} +}; -export class GuestPaymentsInitializeResponse extends SpeakeasyBase { +export type GuestPaymentsInitializeResponse = { /** * HTTP response content type for this operation */ - @SpeakeasyMetadata() contentType: string; - /** * HTTP response status code for this operation */ - @SpeakeasyMetadata() statusCode: number; - /** * Raw HTTP response; suitable for custom response parsing */ - @SpeakeasyMetadata() - rawResponse: AxiosResponse; - + rawResponse: Response; /** * The payment was successfully initialized, and was either immediately finalized or is pending */ - @SpeakeasyMetadata() - paymentResponse?: any; + paymentResponse?: any | undefined; +}; + +/** @internal */ +export namespace GuestPaymentsInitializeRequest$ { + export type Inbound = { + "X-Publishable-Key": string; + "guest-payment-initialize-request": components.GuestPaymentInitializeRequest$.Inbound; + }; + + export const inboundSchema: z.ZodType = z + .object({ + "X-Publishable-Key": z.string(), + "guest-payment-initialize-request": + components.GuestPaymentInitializeRequest$.inboundSchema, + }) + .transform((v) => { + return { + xPublishableKey: v["X-Publishable-Key"], + guestPaymentInitializeRequest: v["guest-payment-initialize-request"], + }; + }); + + export type Outbound = { + "X-Publishable-Key": string; + "guest-payment-initialize-request": components.GuestPaymentInitializeRequest$.Outbound; + }; + + export const outboundSchema: z.ZodType = + z + .object({ + xPublishableKey: z.string(), + guestPaymentInitializeRequest: + components.GuestPaymentInitializeRequest$.outboundSchema, + }) + .transform((v) => { + return { + "X-Publishable-Key": v.xPublishableKey, + "guest-payment-initialize-request": v.guestPaymentInitializeRequest, + }; + }); +} + +/** @internal */ +export namespace GuestPaymentsInitializeResponse$ { + export type Inbound = { + ContentType: string; + StatusCode: number; + RawResponse: Response; + "payment-response"?: any | undefined; + }; + + export const inboundSchema: z.ZodType = + z + .object({ + ContentType: z.string(), + StatusCode: z.number().int(), + RawResponse: z.instanceof(Response), + "payment-response": z.any().optional(), + }) + .transform((v) => { + return { + contentType: v.ContentType, + statusCode: v.StatusCode, + rawResponse: v.RawResponse, + ...(v["payment-response"] === undefined + ? null + : { paymentResponse: v["payment-response"] }), + }; + }); + + export type Outbound = { + ContentType: string; + StatusCode: number; + RawResponse: never; + "payment-response"?: any | undefined; + }; + + export const outboundSchema: z.ZodType< + Outbound, + z.ZodTypeDef, + GuestPaymentsInitializeResponse + > = z + .object({ + contentType: z.string(), + statusCode: z.number().int(), + rawResponse: z.instanceof(Response).transform(() => { + throw new Error("Response cannot be serialized"); + }), + paymentResponse: z.any().optional(), + }) + .transform((v) => { + return { + ContentType: v.contentType, + StatusCode: v.statusCode, + RawResponse: v.rawResponse, + ...(v.paymentResponse === undefined + ? null + : { "payment-response": v.paymentResponse }), + }; + }); } diff --git a/src/models/operations/guestpaymentsupdate.ts b/src/models/operations/guestpaymentsupdate.ts index cbc2f05..0788bc1 100644 --- a/src/models/operations/guestpaymentsupdate.ts +++ b/src/models/operations/guestpaymentsupdate.ts @@ -2,54 +2,138 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; import * as components from "../../models/components"; -import { AxiosResponse } from "axios"; +import { z } from "zod"; -export class GuestPaymentsUpdateSecurity extends SpeakeasyBase { - @SpeakeasyMetadata({ data: "security, scheme=true;type=apiKey;subtype=header;name=X-API-Key" }) +export type GuestPaymentsUpdateSecurity = { apiKey: string; -} +}; -export class GuestPaymentsUpdateRequest extends SpeakeasyBase { +export type GuestPaymentsUpdateRequest = { /** * The ID of the guest payment to update */ - @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=id" }) id: string; - /** * The publicly viewable identifier used to identify a merchant division. */ - @SpeakeasyMetadata({ data: "header, style=simple;explode=false;name=X-Publishable-Key" }) xPublishableKey: string; - - @SpeakeasyMetadata({ data: "request, media_type=application/json" }) paymentUpdateRequest: components.PaymentUpdateRequest; -} +}; -export class GuestPaymentsUpdateResponse extends SpeakeasyBase { +export type GuestPaymentsUpdateResponse = { /** * HTTP response content type for this operation */ - @SpeakeasyMetadata() contentType: string; - /** * HTTP response status code for this operation */ - @SpeakeasyMetadata() statusCode: number; - /** * Raw HTTP response; suitable for custom response parsing */ - @SpeakeasyMetadata() - rawResponse: AxiosResponse; - + rawResponse: Response; /** * The pending payment was successfully updated */ - @SpeakeasyMetadata() - paymentResponse?: any; + paymentResponse?: any | undefined; +}; + +/** @internal */ +export namespace GuestPaymentsUpdateRequest$ { + export type Inbound = { + id: string; + "X-Publishable-Key": string; + "payment-update-request": components.PaymentUpdateRequest$.Inbound; + }; + + export const inboundSchema: z.ZodType = z + .object({ + id: z.string(), + "X-Publishable-Key": z.string(), + "payment-update-request": components.PaymentUpdateRequest$.inboundSchema, + }) + .transform((v) => { + return { + id: v.id, + xPublishableKey: v["X-Publishable-Key"], + paymentUpdateRequest: v["payment-update-request"], + }; + }); + + export type Outbound = { + id: string; + "X-Publishable-Key": string; + "payment-update-request": components.PaymentUpdateRequest$.Outbound; + }; + + export const outboundSchema: z.ZodType = z + .object({ + id: z.string(), + xPublishableKey: z.string(), + paymentUpdateRequest: components.PaymentUpdateRequest$.outboundSchema, + }) + .transform((v) => { + return { + id: v.id, + "X-Publishable-Key": v.xPublishableKey, + "payment-update-request": v.paymentUpdateRequest, + }; + }); +} + +/** @internal */ +export namespace GuestPaymentsUpdateResponse$ { + export type Inbound = { + ContentType: string; + StatusCode: number; + RawResponse: Response; + "payment-response"?: any | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + ContentType: z.string(), + StatusCode: z.number().int(), + RawResponse: z.instanceof(Response), + "payment-response": z.any().optional(), + }) + .transform((v) => { + return { + contentType: v.ContentType, + statusCode: v.StatusCode, + rawResponse: v.RawResponse, + ...(v["payment-response"] === undefined + ? null + : { paymentResponse: v["payment-response"] }), + }; + }); + + export type Outbound = { + ContentType: string; + StatusCode: number; + RawResponse: never; + "payment-response"?: any | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + contentType: z.string(), + statusCode: z.number().int(), + rawResponse: z.instanceof(Response).transform(() => { + throw new Error("Response cannot be serialized"); + }), + paymentResponse: z.any().optional(), + }) + .transform((v) => { + return { + ContentType: v.contentType, + StatusCode: v.statusCode, + RawResponse: v.rawResponse, + ...(v.paymentResponse === undefined + ? null + : { "payment-response": v.paymentResponse }), + }; + }); } diff --git a/src/models/operations/index.ts b/src/models/operations/index.ts index 139be0f..49a23dc 100644 --- a/src/models/operations/index.ts +++ b/src/models/operations/index.ts @@ -6,7 +6,6 @@ export * from "./accountaddpaymentmethod"; export * from "./accountaddresscreate"; export * from "./accountaddressdelete"; export * from "./accountaddressedit"; -export * from "./accountexists"; export * from "./accountget"; export * from "./accountpaymentmethoddelete"; export * from "./guestpaymentsaction"; diff --git a/src/models/operations/oauthgettoken.ts b/src/models/operations/oauthgettoken.ts index 21429fb..dc1e3c3 100644 --- a/src/models/operations/oauthgettoken.ts +++ b/src/models/operations/oauthgettoken.ts @@ -2,32 +2,80 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; import * as components from "../../models/components"; -import { AxiosResponse } from "axios"; +import { z } from "zod"; -export class OauthGetTokenResponse extends SpeakeasyBase { +export type OauthGetTokenResponse = { /** * HTTP response content type for this operation */ - @SpeakeasyMetadata() contentType: string; - /** * HTTP response status code for this operation */ - @SpeakeasyMetadata() statusCode: number; - /** * Raw HTTP response; suitable for custom response parsing */ - @SpeakeasyMetadata() - rawResponse: AxiosResponse; - + rawResponse: Response; /** * Access token is successfully fetched */ - @SpeakeasyMetadata() - getAccessTokenResponse?: components.GetAccessTokenResponse; + getAccessTokenResponse?: components.GetAccessTokenResponse | undefined; +}; + +/** @internal */ +export namespace OauthGetTokenResponse$ { + export type Inbound = { + ContentType: string; + StatusCode: number; + RawResponse: Response; + "get-access-token-response"?: components.GetAccessTokenResponse$.Inbound | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + ContentType: z.string(), + StatusCode: z.number().int(), + RawResponse: z.instanceof(Response), + "get-access-token-response": + components.GetAccessTokenResponse$.inboundSchema.optional(), + }) + .transform((v) => { + return { + contentType: v.ContentType, + statusCode: v.StatusCode, + rawResponse: v.RawResponse, + ...(v["get-access-token-response"] === undefined + ? null + : { getAccessTokenResponse: v["get-access-token-response"] }), + }; + }); + + export type Outbound = { + ContentType: string; + StatusCode: number; + RawResponse: never; + "get-access-token-response"?: components.GetAccessTokenResponse$.Outbound | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + contentType: z.string(), + statusCode: z.number().int(), + rawResponse: z.instanceof(Response).transform(() => { + throw new Error("Response cannot be serialized"); + }), + getAccessTokenResponse: components.GetAccessTokenResponse$.outboundSchema.optional(), + }) + .transform((v) => { + return { + ContentType: v.contentType, + StatusCode: v.statusCode, + RawResponse: v.rawResponse, + ...(v.getAccessTokenResponse === undefined + ? null + : { "get-access-token-response": v.getAccessTokenResponse }), + }; + }); } diff --git a/src/models/operations/paymentsaction.ts b/src/models/operations/paymentsaction.ts index 481b53e..6e84494 100644 --- a/src/models/operations/paymentsaction.ts +++ b/src/models/operations/paymentsaction.ts @@ -2,49 +2,134 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; import * as components from "../../models/components"; -import { AxiosResponse } from "axios"; +import { z } from "zod"; -export class PaymentsActionRequest extends SpeakeasyBase { +export type PaymentsActionRequest = { /** * The ID of the payment to operate on */ - @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=id" }) id: string; - /** * The publicly viewable identifier used to identify a merchant division. */ - @SpeakeasyMetadata({ data: "header, style=simple;explode=false;name=X-Publishable-Key" }) xPublishableKey: string; - - @SpeakeasyMetadata({ data: "request, media_type=application/json" }) paymentActionRequest: components.PaymentActionRequest; -} +}; -export class PaymentsActionResponse extends SpeakeasyBase { +export type PaymentsActionResponse = { /** * HTTP response content type for this operation */ - @SpeakeasyMetadata() contentType: string; - /** * HTTP response status code for this operation */ - @SpeakeasyMetadata() statusCode: number; - /** * Raw HTTP response; suitable for custom response parsing */ - @SpeakeasyMetadata() - rawResponse: AxiosResponse; - + rawResponse: Response; /** * The action was successfully applied to the pending payment */ - @SpeakeasyMetadata() - paymentResponse?: any; + paymentResponse?: any | undefined; +}; + +/** @internal */ +export namespace PaymentsActionRequest$ { + export type Inbound = { + id: string; + "X-Publishable-Key": string; + "payment-action-request": components.PaymentActionRequest$.Inbound; + }; + + export const inboundSchema: z.ZodType = z + .object({ + id: z.string(), + "X-Publishable-Key": z.string(), + "payment-action-request": components.PaymentActionRequest$.inboundSchema, + }) + .transform((v) => { + return { + id: v.id, + xPublishableKey: v["X-Publishable-Key"], + paymentActionRequest: v["payment-action-request"], + }; + }); + + export type Outbound = { + id: string; + "X-Publishable-Key": string; + "payment-action-request": components.PaymentActionRequest$.Outbound; + }; + + export const outboundSchema: z.ZodType = z + .object({ + id: z.string(), + xPublishableKey: z.string(), + paymentActionRequest: components.PaymentActionRequest$.outboundSchema, + }) + .transform((v) => { + return { + id: v.id, + "X-Publishable-Key": v.xPublishableKey, + "payment-action-request": v.paymentActionRequest, + }; + }); +} + +/** @internal */ +export namespace PaymentsActionResponse$ { + export type Inbound = { + ContentType: string; + StatusCode: number; + RawResponse: Response; + "payment-response"?: any | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + ContentType: z.string(), + StatusCode: z.number().int(), + RawResponse: z.instanceof(Response), + "payment-response": z.any().optional(), + }) + .transform((v) => { + return { + contentType: v.ContentType, + statusCode: v.StatusCode, + rawResponse: v.RawResponse, + ...(v["payment-response"] === undefined + ? null + : { paymentResponse: v["payment-response"] }), + }; + }); + + export type Outbound = { + ContentType: string; + StatusCode: number; + RawResponse: never; + "payment-response"?: any | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + contentType: z.string(), + statusCode: z.number().int(), + rawResponse: z.instanceof(Response).transform(() => { + throw new Error("Response cannot be serialized"); + }), + paymentResponse: z.any().optional(), + }) + .transform((v) => { + return { + ContentType: v.contentType, + StatusCode: v.statusCode, + RawResponse: v.rawResponse, + ...(v.paymentResponse === undefined + ? null + : { "payment-response": v.paymentResponse }), + }; + }); } diff --git a/src/models/operations/paymentsinitialize.ts b/src/models/operations/paymentsinitialize.ts index 787e558..b12a3af 100644 --- a/src/models/operations/paymentsinitialize.ts +++ b/src/models/operations/paymentsinitialize.ts @@ -2,43 +2,124 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; import * as components from "../../models/components"; -import { AxiosResponse } from "axios"; +import { z } from "zod"; -export class PaymentsInitializeRequest extends SpeakeasyBase { +export type PaymentsInitializeRequest = { /** * The publicly viewable identifier used to identify a merchant division. */ - @SpeakeasyMetadata({ data: "header, style=simple;explode=false;name=X-Publishable-Key" }) xPublishableKey: string; - - @SpeakeasyMetadata({ data: "request, media_type=application/json" }) paymentInitializeRequest: components.PaymentInitializeRequest; -} +}; -export class PaymentsInitializeResponse extends SpeakeasyBase { +export type PaymentsInitializeResponse = { /** * HTTP response content type for this operation */ - @SpeakeasyMetadata() contentType: string; - /** * HTTP response status code for this operation */ - @SpeakeasyMetadata() statusCode: number; - /** * Raw HTTP response; suitable for custom response parsing */ - @SpeakeasyMetadata() - rawResponse: AxiosResponse; - + rawResponse: Response; /** * The payment was successfully initialized, and was either immediately finalized or is pending */ - @SpeakeasyMetadata() - paymentResponse?: any; + paymentResponse?: any | undefined; +}; + +/** @internal */ +export namespace PaymentsInitializeRequest$ { + export type Inbound = { + "X-Publishable-Key": string; + "payment-initialize-request": components.PaymentInitializeRequest$.Inbound; + }; + + export const inboundSchema: z.ZodType = z + .object({ + "X-Publishable-Key": z.string(), + "payment-initialize-request": components.PaymentInitializeRequest$.inboundSchema, + }) + .transform((v) => { + return { + xPublishableKey: v["X-Publishable-Key"], + paymentInitializeRequest: v["payment-initialize-request"], + }; + }); + + export type Outbound = { + "X-Publishable-Key": string; + "payment-initialize-request": components.PaymentInitializeRequest$.Outbound; + }; + + export const outboundSchema: z.ZodType = z + .object({ + xPublishableKey: z.string(), + paymentInitializeRequest: components.PaymentInitializeRequest$.outboundSchema, + }) + .transform((v) => { + return { + "X-Publishable-Key": v.xPublishableKey, + "payment-initialize-request": v.paymentInitializeRequest, + }; + }); +} + +/** @internal */ +export namespace PaymentsInitializeResponse$ { + export type Inbound = { + ContentType: string; + StatusCode: number; + RawResponse: Response; + "payment-response"?: any | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + ContentType: z.string(), + StatusCode: z.number().int(), + RawResponse: z.instanceof(Response), + "payment-response": z.any().optional(), + }) + .transform((v) => { + return { + contentType: v.ContentType, + statusCode: v.StatusCode, + rawResponse: v.RawResponse, + ...(v["payment-response"] === undefined + ? null + : { paymentResponse: v["payment-response"] }), + }; + }); + + export type Outbound = { + ContentType: string; + StatusCode: number; + RawResponse: never; + "payment-response"?: any | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + contentType: z.string(), + statusCode: z.number().int(), + rawResponse: z.instanceof(Response).transform(() => { + throw new Error("Response cannot be serialized"); + }), + paymentResponse: z.any().optional(), + }) + .transform((v) => { + return { + ContentType: v.contentType, + StatusCode: v.statusCode, + RawResponse: v.rawResponse, + ...(v.paymentResponse === undefined + ? null + : { "payment-response": v.paymentResponse }), + }; + }); } diff --git a/src/models/operations/paymentsupdate.ts b/src/models/operations/paymentsupdate.ts index af03f70..7f20772 100644 --- a/src/models/operations/paymentsupdate.ts +++ b/src/models/operations/paymentsupdate.ts @@ -2,49 +2,134 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; import * as components from "../../models/components"; -import { AxiosResponse } from "axios"; +import { z } from "zod"; -export class PaymentsUpdateRequest extends SpeakeasyBase { +export type PaymentsUpdateRequest = { /** * The ID of the payment to update */ - @SpeakeasyMetadata({ data: "pathParam, style=simple;explode=false;name=id" }) id: string; - /** * The publicly viewable identifier used to identify a merchant division. */ - @SpeakeasyMetadata({ data: "header, style=simple;explode=false;name=X-Publishable-Key" }) xPublishableKey: string; - - @SpeakeasyMetadata({ data: "request, media_type=application/json" }) paymentUpdateRequest: components.PaymentUpdateRequest; -} +}; -export class PaymentsUpdateResponse extends SpeakeasyBase { +export type PaymentsUpdateResponse = { /** * HTTP response content type for this operation */ - @SpeakeasyMetadata() contentType: string; - /** * HTTP response status code for this operation */ - @SpeakeasyMetadata() statusCode: number; - /** * Raw HTTP response; suitable for custom response parsing */ - @SpeakeasyMetadata() - rawResponse: AxiosResponse; - + rawResponse: Response; /** * The pending payment was successfully updated */ - @SpeakeasyMetadata() - paymentResponse?: any; + paymentResponse?: any | undefined; +}; + +/** @internal */ +export namespace PaymentsUpdateRequest$ { + export type Inbound = { + id: string; + "X-Publishable-Key": string; + "payment-update-request": components.PaymentUpdateRequest$.Inbound; + }; + + export const inboundSchema: z.ZodType = z + .object({ + id: z.string(), + "X-Publishable-Key": z.string(), + "payment-update-request": components.PaymentUpdateRequest$.inboundSchema, + }) + .transform((v) => { + return { + id: v.id, + xPublishableKey: v["X-Publishable-Key"], + paymentUpdateRequest: v["payment-update-request"], + }; + }); + + export type Outbound = { + id: string; + "X-Publishable-Key": string; + "payment-update-request": components.PaymentUpdateRequest$.Outbound; + }; + + export const outboundSchema: z.ZodType = z + .object({ + id: z.string(), + xPublishableKey: z.string(), + paymentUpdateRequest: components.PaymentUpdateRequest$.outboundSchema, + }) + .transform((v) => { + return { + id: v.id, + "X-Publishable-Key": v.xPublishableKey, + "payment-update-request": v.paymentUpdateRequest, + }; + }); +} + +/** @internal */ +export namespace PaymentsUpdateResponse$ { + export type Inbound = { + ContentType: string; + StatusCode: number; + RawResponse: Response; + "payment-response"?: any | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + ContentType: z.string(), + StatusCode: z.number().int(), + RawResponse: z.instanceof(Response), + "payment-response": z.any().optional(), + }) + .transform((v) => { + return { + contentType: v.ContentType, + statusCode: v.StatusCode, + rawResponse: v.RawResponse, + ...(v["payment-response"] === undefined + ? null + : { paymentResponse: v["payment-response"] }), + }; + }); + + export type Outbound = { + ContentType: string; + StatusCode: number; + RawResponse: never; + "payment-response"?: any | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + contentType: z.string(), + statusCode: z.number().int(), + rawResponse: z.instanceof(Response).transform(() => { + throw new Error("Response cannot be serialized"); + }), + paymentResponse: z.any().optional(), + }) + .transform((v) => { + return { + ContentType: v.contentType, + StatusCode: v.statusCode, + RawResponse: v.rawResponse, + ...(v.paymentResponse === undefined + ? null + : { "payment-response": v.paymentResponse }), + }; + }); } diff --git a/src/models/operations/testingaccountcreate.ts b/src/models/operations/testingaccountcreate.ts index 2da5201..70bed56 100644 --- a/src/models/operations/testingaccountcreate.ts +++ b/src/models/operations/testingaccountcreate.ts @@ -2,48 +2,134 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; import * as components from "../../models/components"; -import { AxiosResponse } from "axios"; +import { z } from "zod"; -export class TestingAccountCreateSecurity extends SpeakeasyBase { - @SpeakeasyMetadata({ data: "security, scheme=true;type=apiKey;subtype=header;name=X-API-Key" }) +export type TestingAccountCreateSecurity = { apiKey: string; -} +}; -export class TestingAccountCreateRequest extends SpeakeasyBase { +export type TestingAccountCreateRequest = { /** * The publicly viewable identifier used to identify a merchant division. */ - @SpeakeasyMetadata({ data: "header, style=simple;explode=false;name=X-Publishable-Key" }) xPublishableKey: string; - - @SpeakeasyMetadata({ data: "request, media_type=application/json" }) accountTestCreationData: components.AccountTestCreationData; -} +}; -export class TestingAccountCreateResponse extends SpeakeasyBase { +export type TestingAccountCreateResponse = { /** * HTTP response content type for this operation */ - @SpeakeasyMetadata() contentType: string; - /** * HTTP response status code for this operation */ - @SpeakeasyMetadata() statusCode: number; - /** * Raw HTTP response; suitable for custom response parsing */ - @SpeakeasyMetadata() - rawResponse: AxiosResponse; - + rawResponse: Response; /** * The account was successfully created */ - @SpeakeasyMetadata() - accountTestCreationData?: components.AccountTestCreationDataOutput; + accountTestCreationData?: components.AccountTestCreationDataOutput | undefined; +}; + +/** @internal */ +export namespace TestingAccountCreateRequest$ { + export type Inbound = { + "X-Publishable-Key": string; + "account-test-creation-data": components.AccountTestCreationData$.Inbound; + }; + + export const inboundSchema: z.ZodType = z + .object({ + "X-Publishable-Key": z.string(), + "account-test-creation-data": components.AccountTestCreationData$.inboundSchema, + }) + .transform((v) => { + return { + xPublishableKey: v["X-Publishable-Key"], + accountTestCreationData: v["account-test-creation-data"], + }; + }); + + export type Outbound = { + "X-Publishable-Key": string; + "account-test-creation-data": components.AccountTestCreationData$.Outbound; + }; + + export const outboundSchema: z.ZodType = z + .object({ + xPublishableKey: z.string(), + accountTestCreationData: components.AccountTestCreationData$.outboundSchema, + }) + .transform((v) => { + return { + "X-Publishable-Key": v.xPublishableKey, + "account-test-creation-data": v.accountTestCreationData, + }; + }); +} + +/** @internal */ +export namespace TestingAccountCreateResponse$ { + export type Inbound = { + ContentType: string; + StatusCode: number; + RawResponse: Response; + "account-test-creation-data"?: + | components.AccountTestCreationDataOutput$.Inbound + | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + ContentType: z.string(), + StatusCode: z.number().int(), + RawResponse: z.instanceof(Response), + "account-test-creation-data": + components.AccountTestCreationDataOutput$.inboundSchema.optional(), + }) + .transform((v) => { + return { + contentType: v.ContentType, + statusCode: v.StatusCode, + rawResponse: v.RawResponse, + ...(v["account-test-creation-data"] === undefined + ? null + : { accountTestCreationData: v["account-test-creation-data"] }), + }; + }); + + export type Outbound = { + ContentType: string; + StatusCode: number; + RawResponse: never; + "account-test-creation-data"?: + | components.AccountTestCreationDataOutput$.Outbound + | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + contentType: z.string(), + statusCode: z.number().int(), + rawResponse: z.instanceof(Response).transform(() => { + throw new Error("Response cannot be serialized"); + }), + accountTestCreationData: + components.AccountTestCreationDataOutput$.outboundSchema.optional(), + }) + .transform((v) => { + return { + ContentType: v.contentType, + StatusCode: v.statusCode, + RawResponse: v.rawResponse, + ...(v.accountTestCreationData === undefined + ? null + : { "account-test-creation-data": v.accountTestCreationData }), + }; + }); } diff --git a/src/models/operations/testingcreditcardget.ts b/src/models/operations/testingcreditcardget.ts index 3b8e550..f01b165 100644 --- a/src/models/operations/testingcreditcardget.ts +++ b/src/models/operations/testingcreditcardget.ts @@ -2,37 +2,83 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import { SpeakeasyBase, SpeakeasyMetadata } from "../../internal/utils"; import * as components from "../../models/components"; -import { AxiosResponse } from "axios"; +import { z } from "zod"; -export class TestingCreditCardGetSecurity extends SpeakeasyBase { - @SpeakeasyMetadata({ data: "security, scheme=true;type=apiKey;subtype=header;name=X-API-Key" }) +export type TestingCreditCardGetSecurity = { apiKey: string; -} +}; -export class TestingCreditCardGetResponse extends SpeakeasyBase { +export type TestingCreditCardGetResponse = { /** * HTTP response content type for this operation */ - @SpeakeasyMetadata() contentType: string; - /** * HTTP response status code for this operation */ - @SpeakeasyMetadata() statusCode: number; - /** * Raw HTTP response; suitable for custom response parsing */ - @SpeakeasyMetadata() - rawResponse: AxiosResponse; - + rawResponse: Response; /** * Successfully generated test credit card details */ - @SpeakeasyMetadata() - testCreditCard?: components.TestCreditCard; + testCreditCard?: components.TestCreditCard | undefined; +}; + +/** @internal */ +export namespace TestingCreditCardGetResponse$ { + export type Inbound = { + ContentType: string; + StatusCode: number; + RawResponse: Response; + "test-credit-card"?: components.TestCreditCard$.Inbound | undefined; + }; + + export const inboundSchema: z.ZodType = z + .object({ + ContentType: z.string(), + StatusCode: z.number().int(), + RawResponse: z.instanceof(Response), + "test-credit-card": components.TestCreditCard$.inboundSchema.optional(), + }) + .transform((v) => { + return { + contentType: v.ContentType, + statusCode: v.StatusCode, + rawResponse: v.RawResponse, + ...(v["test-credit-card"] === undefined + ? null + : { testCreditCard: v["test-credit-card"] }), + }; + }); + + export type Outbound = { + ContentType: string; + StatusCode: number; + RawResponse: never; + "test-credit-card"?: components.TestCreditCard$.Outbound | undefined; + }; + + export const outboundSchema: z.ZodType = z + .object({ + contentType: z.string(), + statusCode: z.number().int(), + rawResponse: z.instanceof(Response).transform(() => { + throw new Error("Response cannot be serialized"); + }), + testCreditCard: components.TestCreditCard$.outboundSchema.optional(), + }) + .transform((v) => { + return { + ContentType: v.contentType, + StatusCode: v.statusCode, + RawResponse: v.rawResponse, + ...(v.testCreditCard === undefined + ? null + : { "test-credit-card": v.testCreditCard }), + }; + }); } diff --git a/src/sdk/account.ts b/src/sdk/account.ts index cd2a22b..178e80d 100644 --- a/src/sdk/account.ts +++ b/src/sdk/account.ts @@ -2,28 +2,26 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import * as utils from "../internal/utils"; +import { SDK_METADATA, SDKOptions, serverURLFromOptions } from "../lib/config"; +import * as enc$ from "../lib/encodings"; +import { HTTPClient } from "../lib/http"; +import { ClientSDK, RequestOptions } from "../lib/sdks"; import * as components from "../models/components"; import * as errors from "../models/errors"; import * as operations from "../models/operations"; -import { SDKConfiguration } from "./sdk"; -import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios"; - -/** - * Account endpoints allow you to view and manage shoppers' accounts. For example, - * - * @remarks - * you can add or remove addresses and payment information. - * - */ -export class Account { - private sdkConfiguration: SDKConfiguration; +export class Account extends ClientSDK { + private readonly options$: SDKOptions; - constructor(sdkConfig: SDKConfiguration) { - this.sdkConfiguration = sdkConfig; - } + constructor(options: SDKOptions = {}) { + super({ + client: options.httpClient || new HTTPClient(), + baseURL: serverURLFromOptions(options), + }); + this.options$ = options; + void this.options$; + } /** * Retrieve account details * @@ -32,94 +30,66 @@ export class Account { */ async getDetails( xPublishableKey: string, - config?: AxiosRequestConfig + options?: RequestOptions ): Promise { - const req = new operations.AccountGetRequest({ + const input$: operations.AccountGetRequest = { xPublishableKey: xPublishableKey, - }); - const baseURL: string = utils.templateUrl( - this.sdkConfiguration.serverURL, - this.sdkConfiguration.serverDefaults - ); - const operationUrl: string = baseURL.replace(/\/$/, "") + "/account"; - const client: AxiosInstance = this.sdkConfiguration.defaultClient; - let globalSecurity = this.sdkConfiguration.security; - if (typeof globalSecurity === "function") { - globalSecurity = await globalSecurity(); - } - if (!(globalSecurity instanceof utils.SpeakeasyBase)) { - globalSecurity = new components.Security(globalSecurity); - } - const properties = utils.parseSecurityProperties(globalSecurity); - const headers: RawAxiosRequestHeaders = { - ...utils.getHeadersFromRequest(req), - ...config?.headers, - ...properties.headers, }; - headers["Accept"] = "application/json"; + const headers$ = new Headers(); + headers$.set("user-agent", SDK_METADATA.userAgent); + headers$.set("Accept", "application/json"); - headers["user-agent"] = this.sdkConfiguration.userAgent; + const payload$ = operations.AccountGetRequest$.outboundSchema.parse(input$); + const body$ = null; - const httpRes: AxiosResponse = await client.request({ - validateStatus: () => true, - url: operationUrl, - method: "get", - headers: headers, - responseType: "arraybuffer", - ...config, - }); + const path$ = this.templateURLComponent("/account")(); - const responseContentType: string = httpRes?.headers?.["content-type"] ?? ""; + headers$.set( + "X-Publishable-Key", + enc$.encodeSimple("X-Publishable-Key", payload$["X-Publishable-Key"], { + explode: false, + charEncoding: "none", + }) + ); - if (httpRes?.status == null) { - throw new Error(`status code not found in response: ${httpRes}`); - } + const security$ = + typeof this.options$.security === "function" + ? await this.options$.security() + : this.options$.security; + const securitySettings$ = this.resolveGlobalSecurity(security$); + + const response = await this.fetch$( + { + security: securitySettings$, + method: "GET", + path: path$, + headers: headers$, + body: body$, + }, + options + ); - const res: operations.AccountGetResponse = new operations.AccountGetResponse({ - statusCode: httpRes.status, - contentType: responseContentType, - rawResponse: httpRes, - }); - const decodedRes = new TextDecoder().decode(httpRes?.data); - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(responseContentType, `application/json`)) { - res.account = utils.objectToClass(JSON.parse(decodedRes), components.Account); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 400 && httpRes?.status < 500: - if (utils.matchContentType(responseContentType, `application/json`)) { - const err = utils.objectToClass(JSON.parse(decodedRes), errors.ErrorT); - err.rawResponse = httpRes; - throw new errors.ErrorT(err); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 500 && httpRes?.status < 600: - throw new errors.SDKError( - "API error occurred", - httpRes.status, - decodedRes, - httpRes - ); - default: - break; + const responseFields$ = { + ContentType: response.headers.get("content-type") ?? "application/octet-stream", + StatusCode: response.status, + RawResponse: response, + }; + + if (this.matchResponse(response, 200, "application/json")) { + const responseBody = await response.json(); + const result = operations.AccountGetResponse$.inboundSchema.parse({ + ...responseFields$, + account: responseBody, + }); + return result; + } else if (this.matchStatusCode(response, "default")) { + // fallthrough + } else { + const responseBody = await response.text(); + throw new errors.SDKError("Unexpected API response", response, responseBody); } - return res; + return operations.AccountGetResponse$.inboundSchema.parse(responseFields$); } /** @@ -131,99 +101,69 @@ export class Account { async addAddress( xPublishableKey: string, addressListing: components.AddressListingInput, - config?: AxiosRequestConfig + options?: RequestOptions ): Promise { - const req = new operations.AccountAddressCreateRequest({ + const input$: operations.AccountAddressCreateRequest = { xPublishableKey: xPublishableKey, addressListing: addressListing, - }); - const baseURL: string = utils.templateUrl( - this.sdkConfiguration.serverURL, - this.sdkConfiguration.serverDefaults - ); - const operationUrl: string = baseURL.replace(/\/$/, "") + "/account/addresses"; + }; + const headers$ = new Headers(); + headers$.set("user-agent", SDK_METADATA.userAgent); + headers$.set("Content-Type", "application/json"); + headers$.set("Accept", "application/json"); - let [reqBodyHeaders, reqBody]: [object, any] = [{}, null]; + const payload$ = operations.AccountAddressCreateRequest$.outboundSchema.parse(input$); - try { - [reqBodyHeaders, reqBody] = utils.serializeRequestBody(req, "addressListing", "json"); - } catch (e: unknown) { - if (e instanceof Error) { - throw new Error(`Error serializing request body, cause: ${e.message}`); - } - } - const client: AxiosInstance = this.sdkConfiguration.defaultClient; - let globalSecurity = this.sdkConfiguration.security; - if (typeof globalSecurity === "function") { - globalSecurity = await globalSecurity(); - } - if (!(globalSecurity instanceof utils.SpeakeasyBase)) { - globalSecurity = new components.Security(globalSecurity); - } - const properties = utils.parseSecurityProperties(globalSecurity); - const headers: RawAxiosRequestHeaders = { - ...utils.getHeadersFromRequest(req), - ...reqBodyHeaders, - ...config?.headers, - ...properties.headers, - }; - if (reqBody == null) throw new Error("request body is required"); - headers["Accept"] = "application/json"; - - headers["user-agent"] = this.sdkConfiguration.userAgent; - - const httpRes: AxiosResponse = await client.request({ - validateStatus: () => true, - url: operationUrl, - method: "post", - headers: headers, - responseType: "arraybuffer", - data: reqBody, - ...config, - }); + const body$ = enc$.encodeJSON("body", payload$["address-listing"], { explode: true }); - const responseContentType: string = httpRes?.headers?.["content-type"] ?? ""; + const path$ = this.templateURLComponent("/account/addresses")(); - if (httpRes?.status == null) { - throw new Error(`status code not found in response: ${httpRes}`); - } + headers$.set( + "X-Publishable-Key", + enc$.encodeSimple("X-Publishable-Key", payload$["X-Publishable-Key"], { + explode: false, + charEncoding: "none", + }) + ); + + const security$ = + typeof this.options$.security === "function" + ? await this.options$.security() + : this.options$.security; + const securitySettings$ = this.resolveGlobalSecurity(security$); + + const response = await this.fetch$( + { + security: securitySettings$, + method: "POST", + path: path$, + headers: headers$, + body: body$, + }, + options + ); - const res: operations.AccountAddressCreateResponse = - new operations.AccountAddressCreateResponse({ - statusCode: httpRes.status, - contentType: responseContentType, - rawResponse: httpRes, + const responseFields$ = { + ContentType: response.headers.get("content-type") ?? "application/octet-stream", + StatusCode: response.status, + RawResponse: response, + }; + + if (this.matchResponse(response, 200, "application/json")) { + const responseBody = await response.json(); + const result = operations.AccountAddressCreateResponse$.inboundSchema.parse({ + ...responseFields$, + "address-listing": responseBody, }); - const decodedRes = new TextDecoder().decode(httpRes?.data); - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(responseContentType, `application/json`)) { - res.addressListing = utils.objectToClass( - JSON.parse(decodedRes), - components.AddressListing - ); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case (httpRes?.status >= 400 && httpRes?.status < 500) || - (httpRes?.status >= 500 && httpRes?.status < 600): - throw new errors.SDKError( - "API error occurred", - httpRes.status, - decodedRes, - httpRes - ); - default: - break; + return result; + } else if (this.matchStatusCode(response, "default")) { + // fallthrough + } else { + const responseBody = await response.text(); + throw new errors.SDKError("Unexpected API response", response, responseBody); } - return res; + return operations.AccountAddressCreateResponse$.inboundSchema.parse(responseFields$); } /** @@ -239,100 +179,74 @@ export class Account { id: string, xPublishableKey: string, addressListing: components.AddressListingInput, - config?: AxiosRequestConfig + options?: RequestOptions ): Promise { - const req = new operations.AccountAddressEditRequest({ + const input$: operations.AccountAddressEditRequest = { id: id, xPublishableKey: xPublishableKey, addressListing: addressListing, - }); - const baseURL: string = utils.templateUrl( - this.sdkConfiguration.serverURL, - this.sdkConfiguration.serverDefaults - ); - const operationUrl: string = utils.generateURL(baseURL, "/account/addresses/{id}", req); + }; + const headers$ = new Headers(); + headers$.set("user-agent", SDK_METADATA.userAgent); + headers$.set("Content-Type", "application/json"); + headers$.set("Accept", "application/json"); - let [reqBodyHeaders, reqBody]: [object, any] = [{}, null]; + const payload$ = operations.AccountAddressEditRequest$.outboundSchema.parse(input$); - try { - [reqBodyHeaders, reqBody] = utils.serializeRequestBody(req, "addressListing", "json"); - } catch (e: unknown) { - if (e instanceof Error) { - throw new Error(`Error serializing request body, cause: ${e.message}`); - } - } - const client: AxiosInstance = this.sdkConfiguration.defaultClient; - let globalSecurity = this.sdkConfiguration.security; - if (typeof globalSecurity === "function") { - globalSecurity = await globalSecurity(); - } - if (!(globalSecurity instanceof utils.SpeakeasyBase)) { - globalSecurity = new components.Security(globalSecurity); - } - const properties = utils.parseSecurityProperties(globalSecurity); - const headers: RawAxiosRequestHeaders = { - ...utils.getHeadersFromRequest(req), - ...reqBodyHeaders, - ...config?.headers, - ...properties.headers, + const body$ = enc$.encodeJSON("body", payload$["address-listing"], { explode: true }); + + const pathParams$ = { + id: enc$.encodeSimple("id", payload$.id, { explode: false, charEncoding: "percent" }), }; - if (reqBody == null) throw new Error("request body is required"); - headers["Accept"] = "application/json"; - - headers["user-agent"] = this.sdkConfiguration.userAgent; - - const httpRes: AxiosResponse = await client.request({ - validateStatus: () => true, - url: operationUrl, - method: "put", - headers: headers, - responseType: "arraybuffer", - data: reqBody, - ...config, - }); - const responseContentType: string = httpRes?.headers?.["content-type"] ?? ""; + const path$ = this.templateURLComponent("/account/addresses/{id}")(pathParams$); - if (httpRes?.status == null) { - throw new Error(`status code not found in response: ${httpRes}`); - } + headers$.set( + "X-Publishable-Key", + enc$.encodeSimple("X-Publishable-Key", payload$["X-Publishable-Key"], { + explode: false, + charEncoding: "none", + }) + ); + + const security$ = + typeof this.options$.security === "function" + ? await this.options$.security() + : this.options$.security; + const securitySettings$ = this.resolveGlobalSecurity(security$); + + const response = await this.fetch$( + { + security: securitySettings$, + method: "PUT", + path: path$, + headers: headers$, + body: body$, + }, + options + ); + + const responseFields$ = { + ContentType: response.headers.get("content-type") ?? "application/octet-stream", + StatusCode: response.status, + RawResponse: response, + }; - const res: operations.AccountAddressEditResponse = - new operations.AccountAddressEditResponse({ - statusCode: httpRes.status, - contentType: responseContentType, - rawResponse: httpRes, + if (this.matchResponse(response, 200, "application/json")) { + const responseBody = await response.json(); + const result = operations.AccountAddressEditResponse$.inboundSchema.parse({ + ...responseFields$, + "address-listing": responseBody, }); - const decodedRes = new TextDecoder().decode(httpRes?.data); - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(responseContentType, `application/json`)) { - res.addressListing = utils.objectToClass( - JSON.parse(decodedRes), - components.AddressListing - ); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case (httpRes?.status >= 400 && httpRes?.status < 500) || - (httpRes?.status >= 500 && httpRes?.status < 600): - throw new errors.SDKError( - "API error occurred", - httpRes.status, - decodedRes, - httpRes - ); - default: - break; + return result; + } else if (this.matchStatusCode(response, "default")) { + // fallthrough + } else { + const responseBody = await response.text(); + throw new errors.SDKError("Unexpected API response", response, responseBody); } - return res; + return operations.AccountAddressEditResponse$.inboundSchema.parse(responseFields$); } /** @@ -346,173 +260,64 @@ export class Account { async deleteAddress( id: string, xPublishableKey: string, - config?: AxiosRequestConfig + options?: RequestOptions ): Promise { - const req = new operations.AccountAddressDeleteRequest({ + const input$: operations.AccountAddressDeleteRequest = { id: id, xPublishableKey: xPublishableKey, - }); - const baseURL: string = utils.templateUrl( - this.sdkConfiguration.serverURL, - this.sdkConfiguration.serverDefaults - ); - const operationUrl: string = utils.generateURL(baseURL, "/account/addresses/{id}", req); - const client: AxiosInstance = this.sdkConfiguration.defaultClient; - let globalSecurity = this.sdkConfiguration.security; - if (typeof globalSecurity === "function") { - globalSecurity = await globalSecurity(); - } - if (!(globalSecurity instanceof utils.SpeakeasyBase)) { - globalSecurity = new components.Security(globalSecurity); - } - const properties = utils.parseSecurityProperties(globalSecurity); - const headers: RawAxiosRequestHeaders = { - ...utils.getHeadersFromRequest(req), - ...config?.headers, - ...properties.headers, }; - headers["Accept"] = "application/json"; - - headers["user-agent"] = this.sdkConfiguration.userAgent; - - const httpRes: AxiosResponse = await client.request({ - validateStatus: () => true, - url: operationUrl, - method: "delete", - headers: headers, - responseType: "arraybuffer", - ...config, - }); - - const responseContentType: string = httpRes?.headers?.["content-type"] ?? ""; + const headers$ = new Headers(); + headers$.set("user-agent", SDK_METADATA.userAgent); + headers$.set("Accept", "*/*"); - if (httpRes?.status == null) { - throw new Error(`status code not found in response: ${httpRes}`); - } + const payload$ = operations.AccountAddressDeleteRequest$.outboundSchema.parse(input$); + const body$ = null; - const res: operations.AccountAddressDeleteResponse = - new operations.AccountAddressDeleteResponse({ - statusCode: httpRes.status, - contentType: responseContentType, - rawResponse: httpRes, - }); - const decodedRes = new TextDecoder().decode(httpRes?.data); - switch (true) { - case httpRes?.status >= 400 && httpRes?.status < 500: - if (utils.matchContentType(responseContentType, `application/json`)) { - const err = utils.objectToClass(JSON.parse(decodedRes), errors.ErrorT); - err.rawResponse = httpRes; - throw new errors.ErrorT(err); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 500 && httpRes?.status < 600: - throw new errors.SDKError( - "API error occurred", - httpRes.status, - decodedRes, - httpRes - ); - default: - break; - } + const pathParams$ = { + id: enc$.encodeSimple("id", payload$.id, { explode: false, charEncoding: "percent" }), + }; - return res; - } + const path$ = this.templateURLComponent("/account/addresses/{id}")(pathParams$); - /** - * Determine the existence of a Bolt account - * - * @remarks - * Determine whether or not an identifier is associated with an existing Bolt account. - */ - async detect( - identifier: components.Identifier, - xPublishableKey: string, - config?: AxiosRequestConfig - ): Promise { - const req = new operations.AccountExistsRequest({ - identifier: identifier, - xPublishableKey: xPublishableKey, - }); - const baseURL: string = utils.templateUrl( - this.sdkConfiguration.serverURL, - this.sdkConfiguration.serverDefaults + headers$.set( + "X-Publishable-Key", + enc$.encodeSimple("X-Publishable-Key", payload$["X-Publishable-Key"], { + explode: false, + charEncoding: "none", + }) ); - const operationUrl: string = baseURL.replace(/\/$/, "") + "/account/exists"; - const client: AxiosInstance = this.sdkConfiguration.defaultClient; - let globalSecurity = this.sdkConfiguration.security; - if (typeof globalSecurity === "function") { - globalSecurity = await globalSecurity(); - } - if (!(globalSecurity instanceof utils.SpeakeasyBase)) { - globalSecurity = new components.Security(globalSecurity); - } - const properties = utils.parseSecurityProperties(globalSecurity); - const headers: RawAxiosRequestHeaders = { - ...utils.getHeadersFromRequest(req), - ...config?.headers, - ...properties.headers, - }; - const queryParams: string = utils.serializeQueryParams(req); - headers["Accept"] = "application/json"; - - headers["user-agent"] = this.sdkConfiguration.userAgent; - - const httpRes: AxiosResponse = await client.request({ - validateStatus: () => true, - url: operationUrl + queryParams, - method: "get", - headers: headers, - responseType: "arraybuffer", - ...config, - }); - const responseContentType: string = httpRes?.headers?.["content-type"] ?? ""; + const security$ = + typeof this.options$.security === "function" + ? await this.options$.security() + : this.options$.security; + const securitySettings$ = this.resolveGlobalSecurity(security$); + + const response = await this.fetch$( + { + security: securitySettings$, + method: "DELETE", + path: path$, + headers: headers$, + body: body$, + }, + options + ); - if (httpRes?.status == null) { - throw new Error(`status code not found in response: ${httpRes}`); - } + const responseFields$ = { + ContentType: response.headers.get("content-type") ?? "application/octet-stream", + StatusCode: response.status, + RawResponse: response, + }; - const res: operations.AccountExistsResponse = new operations.AccountExistsResponse({ - statusCode: httpRes.status, - contentType: responseContentType, - rawResponse: httpRes, - }); - const decodedRes = new TextDecoder().decode(httpRes?.data); - switch (true) { - case httpRes?.status >= 400 && httpRes?.status < 500: - if (utils.matchContentType(responseContentType, `application/json`)) { - const err = utils.objectToClass(JSON.parse(decodedRes), errors.ErrorT); - err.rawResponse = httpRes; - throw new errors.ErrorT(err); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 500 && httpRes?.status < 600: - throw new errors.SDKError( - "API error occurred", - httpRes.status, - decodedRes, - httpRes - ); - default: - break; + if (this.matchStatusCode(response, [200, "default"])) { + // fallthrough + } else { + const responseBody = await response.text(); + throw new errors.SDKError("Unexpected API response", response, responseBody); } - return res; + return operations.AccountAddressDeleteResponse$.inboundSchema.parse(responseFields$); } /** @@ -528,96 +333,69 @@ export class Account { async addPaymentMethod( xPublishableKey: string, requestBody: any, - config?: AxiosRequestConfig + options?: RequestOptions ): Promise { - const req = new operations.AccountAddPaymentMethodRequest({ + const input$: operations.AccountAddPaymentMethodRequest = { xPublishableKey: xPublishableKey, requestBody: requestBody, - }); - const baseURL: string = utils.templateUrl( - this.sdkConfiguration.serverURL, - this.sdkConfiguration.serverDefaults - ); - const operationUrl: string = baseURL.replace(/\/$/, "") + "/account/payment-methods"; + }; + const headers$ = new Headers(); + headers$.set("user-agent", SDK_METADATA.userAgent); + headers$.set("Content-Type", "application/json"); + headers$.set("Accept", "application/json"); - let [reqBodyHeaders, reqBody]: [object, any] = [{}, null]; + const payload$ = operations.AccountAddPaymentMethodRequest$.outboundSchema.parse(input$); - try { - [reqBodyHeaders, reqBody] = utils.serializeRequestBody(req, "requestBody", "json"); - } catch (e: unknown) { - if (e instanceof Error) { - throw new Error(`Error serializing request body, cause: ${e.message}`); - } - } - const client: AxiosInstance = this.sdkConfiguration.defaultClient; - let globalSecurity = this.sdkConfiguration.security; - if (typeof globalSecurity === "function") { - globalSecurity = await globalSecurity(); - } - if (!(globalSecurity instanceof utils.SpeakeasyBase)) { - globalSecurity = new components.Security(globalSecurity); - } - const properties = utils.parseSecurityProperties(globalSecurity); - const headers: RawAxiosRequestHeaders = { - ...utils.getHeadersFromRequest(req), - ...reqBodyHeaders, - ...config?.headers, - ...properties.headers, - }; - if (reqBody == null) throw new Error("request body is required"); - headers["Accept"] = "application/json"; - - headers["user-agent"] = this.sdkConfiguration.userAgent; - - const httpRes: AxiosResponse = await client.request({ - validateStatus: () => true, - url: operationUrl, - method: "post", - headers: headers, - responseType: "arraybuffer", - data: reqBody, - ...config, - }); + const body$ = enc$.encodeJSON("body", payload$.RequestBody, { explode: true }); - const responseContentType: string = httpRes?.headers?.["content-type"] ?? ""; + const path$ = this.templateURLComponent("/account/payment-methods")(); - if (httpRes?.status == null) { - throw new Error(`status code not found in response: ${httpRes}`); - } + headers$.set( + "X-Publishable-Key", + enc$.encodeSimple("X-Publishable-Key", payload$["X-Publishable-Key"], { + explode: false, + charEncoding: "none", + }) + ); - const res: operations.AccountAddPaymentMethodResponse = - new operations.AccountAddPaymentMethodResponse({ - statusCode: httpRes.status, - contentType: responseContentType, - rawResponse: httpRes, + const security$ = + typeof this.options$.security === "function" + ? await this.options$.security() + : this.options$.security; + const securitySettings$ = this.resolveGlobalSecurity(security$); + + const response = await this.fetch$( + { + security: securitySettings$, + method: "POST", + path: path$, + headers: headers$, + body: body$, + }, + options + ); + + const responseFields$ = { + ContentType: response.headers.get("content-type") ?? "application/octet-stream", + StatusCode: response.status, + RawResponse: response, + }; + + if (this.matchResponse(response, 200, "application/json")) { + const responseBody = await response.json(); + const result = operations.AccountAddPaymentMethodResponse$.inboundSchema.parse({ + ...responseFields$, + "payment-method": responseBody, }); - const decodedRes = new TextDecoder().decode(httpRes?.data); - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(responseContentType, `application/json`)) { - res.paymentMethod = JSON.parse(decodedRes); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case (httpRes?.status >= 400 && httpRes?.status < 500) || - (httpRes?.status >= 500 && httpRes?.status < 600): - throw new errors.SDKError( - "API error occurred", - httpRes.status, - decodedRes, - httpRes - ); - default: - break; + return result; + } else if (this.matchStatusCode(response, "default")) { + // fallthrough + } else { + const responseBody = await response.text(); + throw new errors.SDKError("Unexpected API response", response, responseBody); } - return res; + return operations.AccountAddPaymentMethodResponse$.inboundSchema.parse(responseFields$); } /** @@ -631,87 +409,63 @@ export class Account { async deletePaymentMethod( id: string, xPublishableKey: string, - config?: AxiosRequestConfig + options?: RequestOptions ): Promise { - const req = new operations.AccountPaymentMethodDeleteRequest({ + const input$: operations.AccountPaymentMethodDeleteRequest = { id: id, xPublishableKey: xPublishableKey, - }); - const baseURL: string = utils.templateUrl( - this.sdkConfiguration.serverURL, - this.sdkConfiguration.serverDefaults - ); - const operationUrl: string = utils.generateURL( - baseURL, - "/account/payment-methods/{id}", - req - ); - const client: AxiosInstance = this.sdkConfiguration.defaultClient; - let globalSecurity = this.sdkConfiguration.security; - if (typeof globalSecurity === "function") { - globalSecurity = await globalSecurity(); - } - if (!(globalSecurity instanceof utils.SpeakeasyBase)) { - globalSecurity = new components.Security(globalSecurity); - } - const properties = utils.parseSecurityProperties(globalSecurity); - const headers: RawAxiosRequestHeaders = { - ...utils.getHeadersFromRequest(req), - ...config?.headers, - ...properties.headers, }; - headers["Accept"] = "application/json"; + const headers$ = new Headers(); + headers$.set("user-agent", SDK_METADATA.userAgent); + headers$.set("Accept", "*/*"); - headers["user-agent"] = this.sdkConfiguration.userAgent; + const payload$ = operations.AccountPaymentMethodDeleteRequest$.outboundSchema.parse(input$); + const body$ = null; - const httpRes: AxiosResponse = await client.request({ - validateStatus: () => true, - url: operationUrl, - method: "delete", - headers: headers, - responseType: "arraybuffer", - ...config, - }); + const pathParams$ = { + id: enc$.encodeSimple("id", payload$.id, { explode: false, charEncoding: "percent" }), + }; - const responseContentType: string = httpRes?.headers?.["content-type"] ?? ""; + const path$ = this.templateURLComponent("/account/payment-methods/{id}")(pathParams$); - if (httpRes?.status == null) { - throw new Error(`status code not found in response: ${httpRes}`); - } + headers$.set( + "X-Publishable-Key", + enc$.encodeSimple("X-Publishable-Key", payload$["X-Publishable-Key"], { + explode: false, + charEncoding: "none", + }) + ); - const res: operations.AccountPaymentMethodDeleteResponse = - new operations.AccountPaymentMethodDeleteResponse({ - statusCode: httpRes.status, - contentType: responseContentType, - rawResponse: httpRes, - }); - const decodedRes = new TextDecoder().decode(httpRes?.data); - switch (true) { - case httpRes?.status >= 400 && httpRes?.status < 500: - if (utils.matchContentType(responseContentType, `application/json`)) { - const err = utils.objectToClass(JSON.parse(decodedRes), errors.ErrorT); - err.rawResponse = httpRes; - throw new errors.ErrorT(err); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 500 && httpRes?.status < 600: - throw new errors.SDKError( - "API error occurred", - httpRes.status, - decodedRes, - httpRes - ); - default: - break; + const security$ = + typeof this.options$.security === "function" + ? await this.options$.security() + : this.options$.security; + const securitySettings$ = this.resolveGlobalSecurity(security$); + + const response = await this.fetch$( + { + security: securitySettings$, + method: "DELETE", + path: path$, + headers: headers$, + body: body$, + }, + options + ); + + const responseFields$ = { + ContentType: response.headers.get("content-type") ?? "application/octet-stream", + StatusCode: response.status, + RawResponse: response, + }; + + if (this.matchStatusCode(response, [200, "default"])) { + // fallthrough + } else { + const responseBody = await response.text(); + throw new errors.SDKError("Unexpected API response", response, responseBody); } - return res; + return operations.AccountPaymentMethodDeleteResponse$.inboundSchema.parse(responseFields$); } } diff --git a/src/sdk/guest.ts b/src/sdk/guest.ts index 3017800..fe5cd5e 100644 --- a/src/sdk/guest.ts +++ b/src/sdk/guest.ts @@ -2,20 +2,26 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import * as utils from "../internal/utils"; +import { SDK_METADATA, SDKOptions, serverURLFromOptions } from "../lib/config"; +import * as enc$ from "../lib/encodings"; +import { HTTPClient } from "../lib/http"; +import { ClientSDK, RequestOptions } from "../lib/sdks"; import * as components from "../models/components"; import * as errors from "../models/errors"; import * as operations from "../models/operations"; -import { SDKConfiguration } from "./sdk"; -import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios"; -export class Guest { - private sdkConfiguration: SDKConfiguration; +export class Guest extends ClientSDK { + private readonly options$: SDKOptions; - constructor(sdkConfig: SDKConfiguration) { - this.sdkConfiguration = sdkConfig; - } + constructor(options: SDKOptions = {}) { + super({ + client: options.httpClient || new HTTPClient(), + baseURL: serverURLFromOptions(options), + }); + this.options$ = options; + void this.options$; + } /** * Initialize a Bolt payment for guest shoppers * @@ -28,109 +34,69 @@ export class Guest { security: operations.GuestPaymentsInitializeSecurity, xPublishableKey: string, guestPaymentInitializeRequest: components.GuestPaymentInitializeRequest, - config?: AxiosRequestConfig + options?: RequestOptions ): Promise { - const req = new operations.GuestPaymentsInitializeRequest({ + const input$: operations.GuestPaymentsInitializeRequest = { xPublishableKey: xPublishableKey, guestPaymentInitializeRequest: guestPaymentInitializeRequest, - }); - const baseURL: string = utils.templateUrl( - this.sdkConfiguration.serverURL, - this.sdkConfiguration.serverDefaults - ); - const operationUrl: string = baseURL.replace(/\/$/, "") + "/guest/payments"; - - let [reqBodyHeaders, reqBody]: [object, any] = [{}, null]; - - try { - [reqBodyHeaders, reqBody] = utils.serializeRequestBody( - req, - "guestPaymentInitializeRequest", - "json" - ); - } catch (e: unknown) { - if (e instanceof Error) { - throw new Error(`Error serializing request body, cause: ${e.message}`); - } - } - const client: AxiosInstance = this.sdkConfiguration.defaultClient; - if (!(security instanceof utils.SpeakeasyBase)) { - security = new operations.GuestPaymentsInitializeSecurity(security); - } - const properties = utils.parseSecurityProperties(security); - const headers: RawAxiosRequestHeaders = { - ...utils.getHeadersFromRequest(req), - ...reqBodyHeaders, - ...config?.headers, - ...properties.headers, }; - if (reqBody == null) throw new Error("request body is required"); - headers["Accept"] = "application/json"; - - headers["user-agent"] = this.sdkConfiguration.userAgent; - - const httpRes: AxiosResponse = await client.request({ - validateStatus: () => true, - url: operationUrl, - method: "post", - headers: headers, - responseType: "arraybuffer", - data: reqBody, - ...config, + const headers$ = new Headers(); + headers$.set("user-agent", SDK_METADATA.userAgent); + headers$.set("Content-Type", "application/json"); + headers$.set("Accept", "application/json"); + + const payload$ = operations.GuestPaymentsInitializeRequest$.outboundSchema.parse(input$); + + const body$ = enc$.encodeJSON("body", payload$["guest-payment-initialize-request"], { + explode: true, }); - const responseContentType: string = httpRes?.headers?.["content-type"] ?? ""; + const path$ = this.templateURLComponent("/guest/payments")(); - if (httpRes?.status == null) { - throw new Error(`status code not found in response: ${httpRes}`); - } + headers$.set( + "X-Publishable-Key", + enc$.encodeSimple("X-Publishable-Key", payload$["X-Publishable-Key"], { + explode: false, + charEncoding: "none", + }) + ); + + const securitySettings$ = this.resolveSecurity([ + { value: security?.apiKey, fieldName: "X-API-Key", type: "apiKey:header" }, + ]); - const res: operations.GuestPaymentsInitializeResponse = - new operations.GuestPaymentsInitializeResponse({ - statusCode: httpRes.status, - contentType: responseContentType, - rawResponse: httpRes, + const response = await this.fetch$( + { + security: securitySettings$, + method: "POST", + path: path$, + headers: headers$, + body: body$, + }, + options + ); + + const responseFields$ = { + ContentType: response.headers.get("content-type") ?? "application/octet-stream", + StatusCode: response.status, + RawResponse: response, + }; + + if (this.matchResponse(response, 200, "application/json")) { + const responseBody = await response.json(); + const result = operations.GuestPaymentsInitializeResponse$.inboundSchema.parse({ + ...responseFields$, + "payment-response": responseBody, }); - const decodedRes = new TextDecoder().decode(httpRes?.data); - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(responseContentType, `application/json`)) { - res.paymentResponse = JSON.parse(decodedRes); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 400 && httpRes?.status < 500: - if (utils.matchContentType(responseContentType, `application/json`)) { - const err = utils.objectToClass(JSON.parse(decodedRes), errors.ErrorT); - err.rawResponse = httpRes; - throw new errors.ErrorT(err); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 500 && httpRes?.status < 600: - throw new errors.SDKError( - "API error occurred", - httpRes.status, - decodedRes, - httpRes - ); - default: - break; + return result; + } else if (this.matchStatusCode(response, "default")) { + // fallthrough + } else { + const responseBody = await response.text(); + throw new errors.SDKError("Unexpected API response", response, responseBody); } - return res; + return operations.GuestPaymentsInitializeResponse$.inboundSchema.parse(responseFields$); } /** @@ -145,110 +111,74 @@ export class Guest { id: string, xPublishableKey: string, paymentUpdateRequest: components.PaymentUpdateRequest, - config?: AxiosRequestConfig + options?: RequestOptions ): Promise { - const req = new operations.GuestPaymentsUpdateRequest({ + const input$: operations.GuestPaymentsUpdateRequest = { id: id, xPublishableKey: xPublishableKey, paymentUpdateRequest: paymentUpdateRequest, - }); - const baseURL: string = utils.templateUrl( - this.sdkConfiguration.serverURL, - this.sdkConfiguration.serverDefaults - ); - const operationUrl: string = utils.generateURL(baseURL, "/guest/payments/{id}", req); - - let [reqBodyHeaders, reqBody]: [object, any] = [{}, null]; - - try { - [reqBodyHeaders, reqBody] = utils.serializeRequestBody( - req, - "paymentUpdateRequest", - "json" - ); - } catch (e: unknown) { - if (e instanceof Error) { - throw new Error(`Error serializing request body, cause: ${e.message}`); - } - } - const client: AxiosInstance = this.sdkConfiguration.defaultClient; - if (!(security instanceof utils.SpeakeasyBase)) { - security = new operations.GuestPaymentsUpdateSecurity(security); - } - const properties = utils.parseSecurityProperties(security); - const headers: RawAxiosRequestHeaders = { - ...utils.getHeadersFromRequest(req), - ...reqBodyHeaders, - ...config?.headers, - ...properties.headers, }; - if (reqBody == null) throw new Error("request body is required"); - headers["Accept"] = "application/json"; - - headers["user-agent"] = this.sdkConfiguration.userAgent; - - const httpRes: AxiosResponse = await client.request({ - validateStatus: () => true, - url: operationUrl, - method: "patch", - headers: headers, - responseType: "arraybuffer", - data: reqBody, - ...config, + const headers$ = new Headers(); + headers$.set("user-agent", SDK_METADATA.userAgent); + headers$.set("Content-Type", "application/json"); + headers$.set("Accept", "application/json"); + + const payload$ = operations.GuestPaymentsUpdateRequest$.outboundSchema.parse(input$); + + const body$ = enc$.encodeJSON("body", payload$["payment-update-request"], { + explode: true, }); - const responseContentType: string = httpRes?.headers?.["content-type"] ?? ""; + const pathParams$ = { + id: enc$.encodeSimple("id", payload$.id, { explode: false, charEncoding: "percent" }), + }; + + const path$ = this.templateURLComponent("/guest/payments/{id}")(pathParams$); - if (httpRes?.status == null) { - throw new Error(`status code not found in response: ${httpRes}`); - } + headers$.set( + "X-Publishable-Key", + enc$.encodeSimple("X-Publishable-Key", payload$["X-Publishable-Key"], { + explode: false, + charEncoding: "none", + }) + ); + + const securitySettings$ = this.resolveSecurity([ + { value: security?.apiKey, fieldName: "X-API-Key", type: "apiKey:header" }, + ]); + + const response = await this.fetch$( + { + security: securitySettings$, + method: "PATCH", + path: path$, + headers: headers$, + body: body$, + }, + options + ); - const res: operations.GuestPaymentsUpdateResponse = - new operations.GuestPaymentsUpdateResponse({ - statusCode: httpRes.status, - contentType: responseContentType, - rawResponse: httpRes, + const responseFields$ = { + ContentType: response.headers.get("content-type") ?? "application/octet-stream", + StatusCode: response.status, + RawResponse: response, + }; + + if (this.matchResponse(response, 200, "application/json")) { + const responseBody = await response.json(); + const result = operations.GuestPaymentsUpdateResponse$.inboundSchema.parse({ + ...responseFields$, + "payment-response": responseBody, }); - const decodedRes = new TextDecoder().decode(httpRes?.data); - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(responseContentType, `application/json`)) { - res.paymentResponse = JSON.parse(decodedRes); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 400 && httpRes?.status < 500: - if (utils.matchContentType(responseContentType, `application/json`)) { - const err = utils.objectToClass(JSON.parse(decodedRes), errors.ErrorT); - err.rawResponse = httpRes; - throw new errors.ErrorT(err); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 500 && httpRes?.status < 600: - throw new errors.SDKError( - "API error occurred", - httpRes.status, - decodedRes, - httpRes - ); - default: - break; + return result; + } else if (this.matchStatusCode(response, "default")) { + // fallthrough + } else { + const responseBody = await response.text(); + throw new errors.SDKError("Unexpected API response", response, responseBody); } - return res; + return operations.GuestPaymentsUpdateResponse$.inboundSchema.parse(responseFields$); } /** @@ -263,109 +193,73 @@ export class Guest { id: string, xPublishableKey: string, paymentActionRequest: components.PaymentActionRequest, - config?: AxiosRequestConfig + options?: RequestOptions ): Promise { - const req = new operations.GuestPaymentsActionRequest({ + const input$: operations.GuestPaymentsActionRequest = { id: id, xPublishableKey: xPublishableKey, paymentActionRequest: paymentActionRequest, - }); - const baseURL: string = utils.templateUrl( - this.sdkConfiguration.serverURL, - this.sdkConfiguration.serverDefaults - ); - const operationUrl: string = utils.generateURL(baseURL, "/guest/payments/{id}", req); - - let [reqBodyHeaders, reqBody]: [object, any] = [{}, null]; - - try { - [reqBodyHeaders, reqBody] = utils.serializeRequestBody( - req, - "paymentActionRequest", - "json" - ); - } catch (e: unknown) { - if (e instanceof Error) { - throw new Error(`Error serializing request body, cause: ${e.message}`); - } - } - const client: AxiosInstance = this.sdkConfiguration.defaultClient; - if (!(security instanceof utils.SpeakeasyBase)) { - security = new operations.GuestPaymentsActionSecurity(security); - } - const properties = utils.parseSecurityProperties(security); - const headers: RawAxiosRequestHeaders = { - ...utils.getHeadersFromRequest(req), - ...reqBodyHeaders, - ...config?.headers, - ...properties.headers, }; - if (reqBody == null) throw new Error("request body is required"); - headers["Accept"] = "application/json"; - - headers["user-agent"] = this.sdkConfiguration.userAgent; - - const httpRes: AxiosResponse = await client.request({ - validateStatus: () => true, - url: operationUrl, - method: "post", - headers: headers, - responseType: "arraybuffer", - data: reqBody, - ...config, + const headers$ = new Headers(); + headers$.set("user-agent", SDK_METADATA.userAgent); + headers$.set("Content-Type", "application/json"); + headers$.set("Accept", "application/json"); + + const payload$ = operations.GuestPaymentsActionRequest$.outboundSchema.parse(input$); + + const body$ = enc$.encodeJSON("body", payload$["payment-action-request"], { + explode: true, }); - const responseContentType: string = httpRes?.headers?.["content-type"] ?? ""; + const pathParams$ = { + id: enc$.encodeSimple("id", payload$.id, { explode: false, charEncoding: "percent" }), + }; + + const path$ = this.templateURLComponent("/guest/payments/{id}")(pathParams$); - if (httpRes?.status == null) { - throw new Error(`status code not found in response: ${httpRes}`); - } + headers$.set( + "X-Publishable-Key", + enc$.encodeSimple("X-Publishable-Key", payload$["X-Publishable-Key"], { + explode: false, + charEncoding: "none", + }) + ); + + const securitySettings$ = this.resolveSecurity([ + { value: security?.apiKey, fieldName: "X-API-Key", type: "apiKey:header" }, + ]); + + const response = await this.fetch$( + { + security: securitySettings$, + method: "POST", + path: path$, + headers: headers$, + body: body$, + }, + options + ); + + const responseFields$ = { + ContentType: response.headers.get("content-type") ?? "application/octet-stream", + StatusCode: response.status, + RawResponse: response, + }; - const res: operations.GuestPaymentsActionResponse = - new operations.GuestPaymentsActionResponse({ - statusCode: httpRes.status, - contentType: responseContentType, - rawResponse: httpRes, + if (this.matchResponse(response, 200, "application/json")) { + const responseBody = await response.json(); + const result = operations.GuestPaymentsActionResponse$.inboundSchema.parse({ + ...responseFields$, + "payment-response": responseBody, }); - const decodedRes = new TextDecoder().decode(httpRes?.data); - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(responseContentType, `application/json`)) { - res.paymentResponse = JSON.parse(decodedRes); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 400 && httpRes?.status < 500: - if (utils.matchContentType(responseContentType, `application/json`)) { - const err = utils.objectToClass(JSON.parse(decodedRes), errors.ErrorT); - err.rawResponse = httpRes; - throw new errors.ErrorT(err); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 500 && httpRes?.status < 600: - throw new errors.SDKError( - "API error occurred", - httpRes.status, - decodedRes, - httpRes - ); - default: - break; + return result; + } else if (this.matchStatusCode(response, "default")) { + // fallthrough + } else { + const responseBody = await response.text(); + throw new errors.SDKError("Unexpected API response", response, responseBody); } - return res; + return operations.GuestPaymentsActionResponse$.inboundSchema.parse(responseFields$); } } diff --git a/src/sdk/loggedin.ts b/src/sdk/loggedin.ts index 9d5963f..b3aafcc 100644 --- a/src/sdk/loggedin.ts +++ b/src/sdk/loggedin.ts @@ -2,20 +2,26 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import * as utils from "../internal/utils"; +import { SDK_METADATA, SDKOptions, serverURLFromOptions } from "../lib/config"; +import * as enc$ from "../lib/encodings"; +import { HTTPClient } from "../lib/http"; +import { ClientSDK, RequestOptions } from "../lib/sdks"; import * as components from "../models/components"; import * as errors from "../models/errors"; import * as operations from "../models/operations"; -import { SDKConfiguration } from "./sdk"; -import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios"; -export class LoggedIn { - private sdkConfiguration: SDKConfiguration; +export class LoggedIn extends ClientSDK { + private readonly options$: SDKOptions; - constructor(sdkConfig: SDKConfiguration) { - this.sdkConfiguration = sdkConfig; - } + constructor(options: SDKOptions = {}) { + super({ + client: options.httpClient || new HTTPClient(), + baseURL: serverURLFromOptions(options), + }); + this.options$ = options; + void this.options$; + } /** * Initialize a Bolt payment for logged in shoppers * @@ -27,113 +33,71 @@ export class LoggedIn { async initialize( xPublishableKey: string, paymentInitializeRequest: components.PaymentInitializeRequest, - config?: AxiosRequestConfig + options?: RequestOptions ): Promise { - const req = new operations.PaymentsInitializeRequest({ + const input$: operations.PaymentsInitializeRequest = { xPublishableKey: xPublishableKey, paymentInitializeRequest: paymentInitializeRequest, - }); - const baseURL: string = utils.templateUrl( - this.sdkConfiguration.serverURL, - this.sdkConfiguration.serverDefaults - ); - const operationUrl: string = baseURL.replace(/\/$/, "") + "/payments"; - - let [reqBodyHeaders, reqBody]: [object, any] = [{}, null]; - - try { - [reqBodyHeaders, reqBody] = utils.serializeRequestBody( - req, - "paymentInitializeRequest", - "json" - ); - } catch (e: unknown) { - if (e instanceof Error) { - throw new Error(`Error serializing request body, cause: ${e.message}`); - } - } - const client: AxiosInstance = this.sdkConfiguration.defaultClient; - let globalSecurity = this.sdkConfiguration.security; - if (typeof globalSecurity === "function") { - globalSecurity = await globalSecurity(); - } - if (!(globalSecurity instanceof utils.SpeakeasyBase)) { - globalSecurity = new components.Security(globalSecurity); - } - const properties = utils.parseSecurityProperties(globalSecurity); - const headers: RawAxiosRequestHeaders = { - ...utils.getHeadersFromRequest(req), - ...reqBodyHeaders, - ...config?.headers, - ...properties.headers, }; - if (reqBody == null) throw new Error("request body is required"); - headers["Accept"] = "application/json"; - - headers["user-agent"] = this.sdkConfiguration.userAgent; - - const httpRes: AxiosResponse = await client.request({ - validateStatus: () => true, - url: operationUrl, - method: "post", - headers: headers, - responseType: "arraybuffer", - data: reqBody, - ...config, + const headers$ = new Headers(); + headers$.set("user-agent", SDK_METADATA.userAgent); + headers$.set("Content-Type", "application/json"); + headers$.set("Accept", "application/json"); + + const payload$ = operations.PaymentsInitializeRequest$.outboundSchema.parse(input$); + + const body$ = enc$.encodeJSON("body", payload$["payment-initialize-request"], { + explode: true, }); - const responseContentType: string = httpRes?.headers?.["content-type"] ?? ""; + const path$ = this.templateURLComponent("/payments")(); - if (httpRes?.status == null) { - throw new Error(`status code not found in response: ${httpRes}`); - } + headers$.set( + "X-Publishable-Key", + enc$.encodeSimple("X-Publishable-Key", payload$["X-Publishable-Key"], { + explode: false, + charEncoding: "none", + }) + ); + + const security$ = + typeof this.options$.security === "function" + ? await this.options$.security() + : this.options$.security; + const securitySettings$ = this.resolveGlobalSecurity(security$); - const res: operations.PaymentsInitializeResponse = - new operations.PaymentsInitializeResponse({ - statusCode: httpRes.status, - contentType: responseContentType, - rawResponse: httpRes, + const response = await this.fetch$( + { + security: securitySettings$, + method: "POST", + path: path$, + headers: headers$, + body: body$, + }, + options + ); + + const responseFields$ = { + ContentType: response.headers.get("content-type") ?? "application/octet-stream", + StatusCode: response.status, + RawResponse: response, + }; + + if (this.matchResponse(response, 200, "application/json")) { + const responseBody = await response.json(); + const result = operations.PaymentsInitializeResponse$.inboundSchema.parse({ + ...responseFields$, + "payment-response": responseBody, }); - const decodedRes = new TextDecoder().decode(httpRes?.data); - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(responseContentType, `application/json`)) { - res.paymentResponse = JSON.parse(decodedRes); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 400 && httpRes?.status < 500: - if (utils.matchContentType(responseContentType, `application/json`)) { - const err = utils.objectToClass(JSON.parse(decodedRes), errors.ErrorT); - err.rawResponse = httpRes; - throw new errors.ErrorT(err); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 500 && httpRes?.status < 600: - throw new errors.SDKError( - "API error occurred", - httpRes.status, - decodedRes, - httpRes - ); - default: - break; + return result; + } else if (this.matchStatusCode(response, "default")) { + // fallthrough + } else { + const responseBody = await response.text(); + throw new errors.SDKError("Unexpected API response", response, responseBody); } - return res; + return operations.PaymentsInitializeResponse$.inboundSchema.parse(responseFields$); } /** @@ -147,113 +111,76 @@ export class LoggedIn { id: string, xPublishableKey: string, paymentUpdateRequest: components.PaymentUpdateRequest, - config?: AxiosRequestConfig + options?: RequestOptions ): Promise { - const req = new operations.PaymentsUpdateRequest({ + const input$: operations.PaymentsUpdateRequest = { id: id, xPublishableKey: xPublishableKey, paymentUpdateRequest: paymentUpdateRequest, - }); - const baseURL: string = utils.templateUrl( - this.sdkConfiguration.serverURL, - this.sdkConfiguration.serverDefaults - ); - const operationUrl: string = utils.generateURL(baseURL, "/payments/{id}", req); - - let [reqBodyHeaders, reqBody]: [object, any] = [{}, null]; - - try { - [reqBodyHeaders, reqBody] = utils.serializeRequestBody( - req, - "paymentUpdateRequest", - "json" - ); - } catch (e: unknown) { - if (e instanceof Error) { - throw new Error(`Error serializing request body, cause: ${e.message}`); - } - } - const client: AxiosInstance = this.sdkConfiguration.defaultClient; - let globalSecurity = this.sdkConfiguration.security; - if (typeof globalSecurity === "function") { - globalSecurity = await globalSecurity(); - } - if (!(globalSecurity instanceof utils.SpeakeasyBase)) { - globalSecurity = new components.Security(globalSecurity); - } - const properties = utils.parseSecurityProperties(globalSecurity); - const headers: RawAxiosRequestHeaders = { - ...utils.getHeadersFromRequest(req), - ...reqBodyHeaders, - ...config?.headers, - ...properties.headers, }; - if (reqBody == null) throw new Error("request body is required"); - headers["Accept"] = "application/json"; - - headers["user-agent"] = this.sdkConfiguration.userAgent; - - const httpRes: AxiosResponse = await client.request({ - validateStatus: () => true, - url: operationUrl, - method: "patch", - headers: headers, - responseType: "arraybuffer", - data: reqBody, - ...config, + const headers$ = new Headers(); + headers$.set("user-agent", SDK_METADATA.userAgent); + headers$.set("Content-Type", "application/json"); + headers$.set("Accept", "application/json"); + + const payload$ = operations.PaymentsUpdateRequest$.outboundSchema.parse(input$); + + const body$ = enc$.encodeJSON("body", payload$["payment-update-request"], { + explode: true, }); - const responseContentType: string = httpRes?.headers?.["content-type"] ?? ""; + const pathParams$ = { + id: enc$.encodeSimple("id", payload$.id, { explode: false, charEncoding: "percent" }), + }; - if (httpRes?.status == null) { - throw new Error(`status code not found in response: ${httpRes}`); - } + const path$ = this.templateURLComponent("/payments/{id}")(pathParams$); - const res: operations.PaymentsUpdateResponse = new operations.PaymentsUpdateResponse({ - statusCode: httpRes.status, - contentType: responseContentType, - rawResponse: httpRes, - }); - const decodedRes = new TextDecoder().decode(httpRes?.data); - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(responseContentType, `application/json`)) { - res.paymentResponse = JSON.parse(decodedRes); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 400 && httpRes?.status < 500: - if (utils.matchContentType(responseContentType, `application/json`)) { - const err = utils.objectToClass(JSON.parse(decodedRes), errors.ErrorT); - err.rawResponse = httpRes; - throw new errors.ErrorT(err); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 500 && httpRes?.status < 600: - throw new errors.SDKError( - "API error occurred", - httpRes.status, - decodedRes, - httpRes - ); - default: - break; + headers$.set( + "X-Publishable-Key", + enc$.encodeSimple("X-Publishable-Key", payload$["X-Publishable-Key"], { + explode: false, + charEncoding: "none", + }) + ); + + const security$ = + typeof this.options$.security === "function" + ? await this.options$.security() + : this.options$.security; + const securitySettings$ = this.resolveGlobalSecurity(security$); + + const response = await this.fetch$( + { + security: securitySettings$, + method: "PATCH", + path: path$, + headers: headers$, + body: body$, + }, + options + ); + + const responseFields$ = { + ContentType: response.headers.get("content-type") ?? "application/octet-stream", + StatusCode: response.status, + RawResponse: response, + }; + + if (this.matchResponse(response, 200, "application/json")) { + const responseBody = await response.json(); + const result = operations.PaymentsUpdateResponse$.inboundSchema.parse({ + ...responseFields$, + "payment-response": responseBody, + }); + return result; + } else if (this.matchStatusCode(response, "default")) { + // fallthrough + } else { + const responseBody = await response.text(); + throw new errors.SDKError("Unexpected API response", response, responseBody); } - return res; + return operations.PaymentsUpdateResponse$.inboundSchema.parse(responseFields$); } /** @@ -267,112 +194,75 @@ export class LoggedIn { id: string, xPublishableKey: string, paymentActionRequest: components.PaymentActionRequest, - config?: AxiosRequestConfig + options?: RequestOptions ): Promise { - const req = new operations.PaymentsActionRequest({ + const input$: operations.PaymentsActionRequest = { id: id, xPublishableKey: xPublishableKey, paymentActionRequest: paymentActionRequest, - }); - const baseURL: string = utils.templateUrl( - this.sdkConfiguration.serverURL, - this.sdkConfiguration.serverDefaults - ); - const operationUrl: string = utils.generateURL(baseURL, "/payments/{id}", req); - - let [reqBodyHeaders, reqBody]: [object, any] = [{}, null]; - - try { - [reqBodyHeaders, reqBody] = utils.serializeRequestBody( - req, - "paymentActionRequest", - "json" - ); - } catch (e: unknown) { - if (e instanceof Error) { - throw new Error(`Error serializing request body, cause: ${e.message}`); - } - } - const client: AxiosInstance = this.sdkConfiguration.defaultClient; - let globalSecurity = this.sdkConfiguration.security; - if (typeof globalSecurity === "function") { - globalSecurity = await globalSecurity(); - } - if (!(globalSecurity instanceof utils.SpeakeasyBase)) { - globalSecurity = new components.Security(globalSecurity); - } - const properties = utils.parseSecurityProperties(globalSecurity); - const headers: RawAxiosRequestHeaders = { - ...utils.getHeadersFromRequest(req), - ...reqBodyHeaders, - ...config?.headers, - ...properties.headers, }; - if (reqBody == null) throw new Error("request body is required"); - headers["Accept"] = "application/json"; - - headers["user-agent"] = this.sdkConfiguration.userAgent; - - const httpRes: AxiosResponse = await client.request({ - validateStatus: () => true, - url: operationUrl, - method: "post", - headers: headers, - responseType: "arraybuffer", - data: reqBody, - ...config, + const headers$ = new Headers(); + headers$.set("user-agent", SDK_METADATA.userAgent); + headers$.set("Content-Type", "application/json"); + headers$.set("Accept", "application/json"); + + const payload$ = operations.PaymentsActionRequest$.outboundSchema.parse(input$); + + const body$ = enc$.encodeJSON("body", payload$["payment-action-request"], { + explode: true, }); - const responseContentType: string = httpRes?.headers?.["content-type"] ?? ""; + const pathParams$ = { + id: enc$.encodeSimple("id", payload$.id, { explode: false, charEncoding: "percent" }), + }; - if (httpRes?.status == null) { - throw new Error(`status code not found in response: ${httpRes}`); - } + const path$ = this.templateURLComponent("/payments/{id}")(pathParams$); - const res: operations.PaymentsActionResponse = new operations.PaymentsActionResponse({ - statusCode: httpRes.status, - contentType: responseContentType, - rawResponse: httpRes, - }); - const decodedRes = new TextDecoder().decode(httpRes?.data); - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(responseContentType, `application/json`)) { - res.paymentResponse = JSON.parse(decodedRes); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 400 && httpRes?.status < 500: - if (utils.matchContentType(responseContentType, `application/json`)) { - const err = utils.objectToClass(JSON.parse(decodedRes), errors.ErrorT); - err.rawResponse = httpRes; - throw new errors.ErrorT(err); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 500 && httpRes?.status < 600: - throw new errors.SDKError( - "API error occurred", - httpRes.status, - decodedRes, - httpRes - ); - default: - break; + headers$.set( + "X-Publishable-Key", + enc$.encodeSimple("X-Publishable-Key", payload$["X-Publishable-Key"], { + explode: false, + charEncoding: "none", + }) + ); + + const security$ = + typeof this.options$.security === "function" + ? await this.options$.security() + : this.options$.security; + const securitySettings$ = this.resolveGlobalSecurity(security$); + + const response = await this.fetch$( + { + security: securitySettings$, + method: "POST", + path: path$, + headers: headers$, + body: body$, + }, + options + ); + + const responseFields$ = { + ContentType: response.headers.get("content-type") ?? "application/octet-stream", + StatusCode: response.status, + RawResponse: response, + }; + + if (this.matchResponse(response, 200, "application/json")) { + const responseBody = await response.json(); + const result = operations.PaymentsActionResponse$.inboundSchema.parse({ + ...responseFields$, + "payment-response": responseBody, + }); + return result; + } else if (this.matchStatusCode(response, "default")) { + // fallthrough + } else { + const responseBody = await response.text(); + throw new errors.SDKError("Unexpected API response", response, responseBody); } - return res; + return operations.PaymentsActionResponse$.inboundSchema.parse(responseFields$); } } diff --git a/src/sdk/oauth.ts b/src/sdk/oauth.ts index 4fc18f3..8368189 100644 --- a/src/sdk/oauth.ts +++ b/src/sdk/oauth.ts @@ -2,30 +2,26 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import * as utils from "../internal/utils"; +import { SDK_METADATA, SDKOptions, serverURLFromOptions } from "../lib/config"; +import * as enc$ from "../lib/encodings"; +import { HTTPClient } from "../lib/http"; +import { ClientSDK, RequestOptions } from "../lib/sdks"; import * as components from "../models/components"; import * as errors from "../models/errors"; import * as operations from "../models/operations"; -import { SDKConfiguration } from "./sdk"; -import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios"; -/** - * Use this endpoint to retrieve an OAuth token. Use the token to allow your ecommerce server to make calls to the Account - * - * @remarks - * endpoint and create a one-click checkout experience for shoppers. - * - * - * @see {@link https://help.bolt.com/products/accounts/direct-api/oauth-guide/} - */ +export class OAuth extends ClientSDK { + private readonly options$: SDKOptions; -export class OAuth { - private sdkConfiguration: SDKConfiguration; + constructor(options: SDKOptions = {}) { + super({ + client: options.httpClient || new HTTPClient(), + baseURL: serverURLFromOptions(options), + }); - constructor(sdkConfig: SDKConfiguration) { - this.sdkConfiguration = sdkConfig; + this.options$ = options; + void this.options$; } - /** * Get OAuth token * @@ -33,110 +29,60 @@ export class OAuth { * Retrieve a new or refresh an existing OAuth token. */ async getToken( - req: components.GetAccessTokenRequest, - config?: AxiosRequestConfig + input: components.GetAccessTokenRequest, + options?: RequestOptions ): Promise { - if (!(req instanceof utils.SpeakeasyBase)) { - req = new components.GetAccessTokenRequest(req); - } + const headers$ = new Headers(); + headers$.set("user-agent", SDK_METADATA.userAgent); + headers$.set("Content-Type", "application/x-www-form-urlencoded"); + headers$.set("Accept", "application/json"); - const baseURL: string = utils.templateUrl( - this.sdkConfiguration.serverURL, - this.sdkConfiguration.serverDefaults - ); - const operationUrl: string = baseURL.replace(/\/$/, "") + "/oauth/token"; - - let [reqBodyHeaders, reqBody]: [object, any] = [{}, null]; - - try { - [reqBodyHeaders, reqBody] = utils.serializeRequestBody(req, "request", "form"); - } catch (e: unknown) { - if (e instanceof Error) { - throw new Error(`Error serializing request body, cause: ${e.message}`); - } - } - const client: AxiosInstance = this.sdkConfiguration.defaultClient; - let globalSecurity = this.sdkConfiguration.security; - if (typeof globalSecurity === "function") { - globalSecurity = await globalSecurity(); - } - if (!(globalSecurity instanceof utils.SpeakeasyBase)) { - globalSecurity = new components.Security(globalSecurity); - } - const properties = utils.parseSecurityProperties(globalSecurity); - const headers: RawAxiosRequestHeaders = { - ...reqBodyHeaders, - ...config?.headers, - ...properties.headers, - }; - if (reqBody == null) throw new Error("request body is required"); - headers["Accept"] = "application/json"; + const payload$ = components.GetAccessTokenRequest$.outboundSchema.parse(input); + const body$ = Object.entries(payload$ || {}) + .map(([k, v]) => { + return enc$.encodeBodyForm(k, v, { charEncoding: "percent" }); + }) + .join("&"); - headers["user-agent"] = this.sdkConfiguration.userAgent; + const path$ = this.templateURLComponent("/oauth/token")(); - const httpRes: AxiosResponse = await client.request({ - validateStatus: () => true, - url: operationUrl, - method: "post", - headers: headers, - responseType: "arraybuffer", - data: reqBody, - ...config, - }); + const security$ = + typeof this.options$.security === "function" + ? await this.options$.security() + : this.options$.security; + const securitySettings$ = this.resolveGlobalSecurity(security$); - const responseContentType: string = httpRes?.headers?.["content-type"] ?? ""; + const response = await this.fetch$( + { + security: securitySettings$, + method: "POST", + path: path$, + headers: headers$, + body: body$, + }, + options + ); - if (httpRes?.status == null) { - throw new Error(`status code not found in response: ${httpRes}`); - } + const responseFields$ = { + ContentType: response.headers.get("content-type") ?? "application/octet-stream", + StatusCode: response.status, + RawResponse: response, + }; - const res: operations.OauthGetTokenResponse = new operations.OauthGetTokenResponse({ - statusCode: httpRes.status, - contentType: responseContentType, - rawResponse: httpRes, - }); - const decodedRes = new TextDecoder().decode(httpRes?.data); - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(responseContentType, `application/json`)) { - res.getAccessTokenResponse = utils.objectToClass( - JSON.parse(decodedRes), - components.GetAccessTokenResponse - ); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 400 && httpRes?.status < 500: - if (utils.matchContentType(responseContentType, `application/json`)) { - const err = utils.objectToClass(JSON.parse(decodedRes), errors.ErrorT); - err.rawResponse = httpRes; - throw new errors.ErrorT(err); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 500 && httpRes?.status < 600: - throw new errors.SDKError( - "API error occurred", - httpRes.status, - decodedRes, - httpRes - ); - default: - break; + if (this.matchResponse(response, 200, "application/json")) { + const responseBody = await response.json(); + const result = operations.OauthGetTokenResponse$.inboundSchema.parse({ + ...responseFields$, + "get-access-token-response": responseBody, + }); + return result; + } else if (this.matchStatusCode(response, "default")) { + // fallthrough + } else { + const responseBody = await response.text(); + throw new errors.SDKError("Unexpected API response", response, responseBody); } - return res; + return operations.OauthGetTokenResponse$.inboundSchema.parse(responseFields$); } } diff --git a/src/sdk/payments.ts b/src/sdk/payments.ts index a6c47b9..65587de 100644 --- a/src/sdk/payments.ts +++ b/src/sdk/payments.ts @@ -2,18 +2,32 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ +import { SDKOptions, serverURLFromOptions } from "../lib/config"; +import { HTTPClient } from "../lib/http"; +import { ClientSDK } from "../lib/sdks"; import { Guest } from "./guest"; import { LoggedIn } from "./loggedin"; -import { SDKConfiguration } from "./sdk"; -export class Payments { - public guest: Guest; - public loggedIn: LoggedIn; - private sdkConfiguration: SDKConfiguration; +export class Payments extends ClientSDK { + private readonly options$: SDKOptions; - constructor(sdkConfig: SDKConfiguration) { - this.sdkConfiguration = sdkConfig; - this.guest = new Guest(this.sdkConfiguration); - this.loggedIn = new LoggedIn(this.sdkConfiguration); + constructor(options: SDKOptions = {}) { + super({ + client: options.httpClient || new HTTPClient(), + baseURL: serverURLFromOptions(options), + }); + + this.options$ = options; + void this.options$; + } + + private _guest?: Guest; + get guest() { + return (this._guest ??= new Guest(this.options$)); + } + + private _loggedIn?: LoggedIn; + get loggedIn() { + return (this._loggedIn ??= new LoggedIn(this.options$)); } } diff --git a/src/sdk/sdk.ts b/src/sdk/sdk.ts index 3831be5..8263b58 100644 --- a/src/sdk/sdk.ts +++ b/src/sdk/sdk.ts @@ -2,137 +2,44 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import * as utils from "../internal/utils"; -import * as components from "../models/components"; +import { SDKOptions, serverURLFromOptions } from "../lib/config"; +import { HTTPClient } from "../lib/http"; +import { ClientSDK } from "../lib/sdks"; import { Account } from "./account"; import { OAuth } from "./oauth"; import { Payments } from "./payments"; import { Testing } from "./testing"; -import axios from "axios"; -import { AxiosInstance } from "axios"; -/** - * Contains the list of servers available to the SDK - */ -export const ServerList = ["https://{environment}.bolt.com/v3"] as const; - -export enum ServerEnvironment { - Api = "api", - ApiSandbox = "api-sandbox", -} - -/** - * The available configuration options for the SDK - */ -export type SDKProps = { - /** - * The security details required to authenticate the SDK - */ - security?: components.Security | (() => Promise); +export class BoltTypescriptSDK extends ClientSDK { + private readonly options$: SDKOptions; - /** - * Allows overriding the default axios client used by the SDK - */ - defaultClient?: AxiosInstance; - - /** - * Allows overriding the default server used by the SDK - */ - serverIdx?: number; - - /** - * Allows setting the environment variable for url substitution - */ - environment?: ServerEnvironment; - - /** - * Allows overriding the default server URL used by the SDK - */ - serverURL?: string; - /** - * Allows overriding the default retry config used by the SDK - */ - retryConfig?: utils.RetryConfig; -}; + constructor(options: SDKOptions = {}) { + super({ + client: options.httpClient || new HTTPClient(), + baseURL: serverURLFromOptions(options), + }); -export class SDKConfiguration { - defaultClient: AxiosInstance; - security?: components.Security | (() => Promise); - serverURL: string; - serverDefaults: any; - language = "typescript"; - openapiDocVersion = "3.0.1"; - sdkVersion = "0.3.0"; - genVersion = "2.213.3"; - userAgent = "speakeasy-sdk/typescript 0.3.0 2.213.3 3.0.1 @boltpay/bolt-typescript-sdk"; - retryConfig?: utils.RetryConfig; - public constructor(init?: Partial) { - Object.assign(this, init); + this.options$ = options; + void this.options$; } -} - -/** - * Bolt API Reference: A comprehensive Bolt API reference for interacting with Transactions, Orders, Product Catalog, Configuration, Testing, and much more. - */ -export class BoltTypescriptSDK { - /** - * Account endpoints allow you to view and manage shoppers' accounts. For example, - * - * @remarks - * you can add or remove addresses and payment information. - * - */ - public account: Account; - public payments: Payments; - /** - * Use this endpoint to retrieve an OAuth token. Use the token to allow your ecommerce server to make calls to the Account - * - * @remarks - * endpoint and create a one-click checkout experience for shoppers. - * - * - * @see {@link https://help.bolt.com/products/accounts/direct-api/oauth-guide/} - */ - public oAuth: OAuth; - /** - * Endpoints that allow you to generate and retrieve test data to verify certain - * - * @remarks - * flows in non-production environments. - * - */ - public testing: Testing; - - private sdkConfiguration: SDKConfiguration; - - constructor(props?: SDKProps) { - let serverURL = props?.serverURL; - let defaults: any = {}; - const serverDefaults = [ - { - environment: props?.environment?.toString() ?? "api-sandbox", - }, - ]; - const serverIdx = props?.serverIdx ?? 0; + private _account?: Account; + get account() { + return (this._account ??= new Account(this.options$)); + } - if (!serverURL) { - serverURL = ServerList[serverIdx]; - defaults = serverDefaults[serverIdx]; - } + private _payments?: Payments; + get payments() { + return (this._payments ??= new Payments(this.options$)); + } - const defaultClient = props?.defaultClient ?? axios.create(); - this.sdkConfiguration = new SDKConfiguration({ - defaultClient: defaultClient, - security: props?.security, - serverURL: serverURL, - serverDefaults: defaults, - retryConfig: props?.retryConfig, - }); + private _oAuth?: OAuth; + get oAuth() { + return (this._oAuth ??= new OAuth(this.options$)); + } - this.account = new Account(this.sdkConfiguration); - this.payments = new Payments(this.sdkConfiguration); - this.oAuth = new OAuth(this.sdkConfiguration); - this.testing = new Testing(this.sdkConfiguration); + private _testing?: Testing; + get testing() { + return (this._testing ??= new Testing(this.options$)); } } diff --git a/src/sdk/testing.ts b/src/sdk/testing.ts index 17b16f8..53a4772 100644 --- a/src/sdk/testing.ts +++ b/src/sdk/testing.ts @@ -2,28 +2,26 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -import * as utils from "../internal/utils"; +import { SDK_METADATA, SDKOptions, serverURLFromOptions } from "../lib/config"; +import * as enc$ from "../lib/encodings"; +import { HTTPClient } from "../lib/http"; +import { ClientSDK, RequestOptions } from "../lib/sdks"; import * as components from "../models/components"; import * as errors from "../models/errors"; import * as operations from "../models/operations"; -import { SDKConfiguration } from "./sdk"; -import { AxiosInstance, AxiosRequestConfig, AxiosResponse, RawAxiosRequestHeaders } from "axios"; - -/** - * Endpoints that allow you to generate and retrieve test data to verify certain - * - * @remarks - * flows in non-production environments. - * - */ -export class Testing { - private sdkConfiguration: SDKConfiguration; +export class Testing extends ClientSDK { + private readonly options$: SDKOptions; - constructor(sdkConfig: SDKConfiguration) { - this.sdkConfiguration = sdkConfig; - } + constructor(options: SDKOptions = {}) { + super({ + client: options.httpClient || new HTTPClient(), + baseURL: serverURLFromOptions(options), + }); + this.options$ = options; + void this.options$; + } /** * Create a test account * @@ -35,112 +33,69 @@ export class Testing { security: operations.TestingAccountCreateSecurity, xPublishableKey: string, accountTestCreationData: components.AccountTestCreationData, - config?: AxiosRequestConfig + options?: RequestOptions ): Promise { - const req = new operations.TestingAccountCreateRequest({ + const input$: operations.TestingAccountCreateRequest = { xPublishableKey: xPublishableKey, accountTestCreationData: accountTestCreationData, - }); - const baseURL: string = utils.templateUrl( - this.sdkConfiguration.serverURL, - this.sdkConfiguration.serverDefaults - ); - const operationUrl: string = baseURL.replace(/\/$/, "") + "/testing/accounts"; - - let [reqBodyHeaders, reqBody]: [object, any] = [{}, null]; - - try { - [reqBodyHeaders, reqBody] = utils.serializeRequestBody( - req, - "accountTestCreationData", - "json" - ); - } catch (e: unknown) { - if (e instanceof Error) { - throw new Error(`Error serializing request body, cause: ${e.message}`); - } - } - const client: AxiosInstance = this.sdkConfiguration.defaultClient; - if (!(security instanceof utils.SpeakeasyBase)) { - security = new operations.TestingAccountCreateSecurity(security); - } - const properties = utils.parseSecurityProperties(security); - const headers: RawAxiosRequestHeaders = { - ...utils.getHeadersFromRequest(req), - ...reqBodyHeaders, - ...config?.headers, - ...properties.headers, }; - if (reqBody == null) throw new Error("request body is required"); - headers["Accept"] = "application/json"; - - headers["user-agent"] = this.sdkConfiguration.userAgent; - - const httpRes: AxiosResponse = await client.request({ - validateStatus: () => true, - url: operationUrl, - method: "post", - headers: headers, - responseType: "arraybuffer", - data: reqBody, - ...config, + const headers$ = new Headers(); + headers$.set("user-agent", SDK_METADATA.userAgent); + headers$.set("Content-Type", "application/json"); + headers$.set("Accept", "application/json"); + + const payload$ = operations.TestingAccountCreateRequest$.outboundSchema.parse(input$); + + const body$ = enc$.encodeJSON("body", payload$["account-test-creation-data"], { + explode: true, }); - const responseContentType: string = httpRes?.headers?.["content-type"] ?? ""; + const path$ = this.templateURLComponent("/testing/accounts")(); - if (httpRes?.status == null) { - throw new Error(`status code not found in response: ${httpRes}`); - } + headers$.set( + "X-Publishable-Key", + enc$.encodeSimple("X-Publishable-Key", payload$["X-Publishable-Key"], { + explode: false, + charEncoding: "none", + }) + ); - const res: operations.TestingAccountCreateResponse = - new operations.TestingAccountCreateResponse({ - statusCode: httpRes.status, - contentType: responseContentType, - rawResponse: httpRes, + const securitySettings$ = this.resolveSecurity([ + { value: security?.apiKey, fieldName: "X-API-Key", type: "apiKey:header" }, + ]); + + const response = await this.fetch$( + { + security: securitySettings$, + method: "POST", + path: path$, + headers: headers$, + body: body$, + }, + options + ); + + const responseFields$ = { + ContentType: response.headers.get("content-type") ?? "application/octet-stream", + StatusCode: response.status, + RawResponse: response, + }; + + if (this.matchResponse(response, 200, "application/json")) { + const responseBody = await response.json(); + const result = operations.TestingAccountCreateResponse$.inboundSchema.parse({ + ...responseFields$, + "account-test-creation-data": responseBody, }); - const decodedRes = new TextDecoder().decode(httpRes?.data); - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(responseContentType, `application/json`)) { - res.accountTestCreationData = utils.objectToClass( - JSON.parse(decodedRes), - components.AccountTestCreationDataOutput - ); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 400 && httpRes?.status < 500: - if (utils.matchContentType(responseContentType, `application/json`)) { - const err = utils.objectToClass(JSON.parse(decodedRes), errors.ErrorT); - err.rawResponse = httpRes; - throw new errors.ErrorT(err); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 500 && httpRes?.status < 600: - throw new errors.SDKError( - "API error occurred", - httpRes.status, - decodedRes, - httpRes - ); - default: - break; + return result; + } else if (this.matchStatusCode(response, "default")) { + // fallthrough + } else { + const responseBody = await response.text(); + throw new errors.SDKError("Unexpected API response", response, responseBody); } - return res; + return operations.TestingAccountCreateResponse$.inboundSchema.parse(responseFields$); } /** @@ -153,86 +108,43 @@ export class Testing { */ async getCreditCard( security: operations.TestingCreditCardGetSecurity, - config?: AxiosRequestConfig + options?: RequestOptions ): Promise { - const baseURL: string = utils.templateUrl( - this.sdkConfiguration.serverURL, - this.sdkConfiguration.serverDefaults - ); - const operationUrl: string = baseURL.replace(/\/$/, "") + "/testing/credit-cards"; - const client: AxiosInstance = this.sdkConfiguration.defaultClient; - if (!(security instanceof utils.SpeakeasyBase)) { - security = new operations.TestingCreditCardGetSecurity(security); - } - const properties = utils.parseSecurityProperties(security); - const headers: RawAxiosRequestHeaders = { ...config?.headers, ...properties.headers }; - headers["Accept"] = "application/json"; - - headers["user-agent"] = this.sdkConfiguration.userAgent; - - const httpRes: AxiosResponse = await client.request({ - validateStatus: () => true, - url: operationUrl, - method: "get", - headers: headers, - responseType: "arraybuffer", - ...config, - }); + const headers$ = new Headers(); + headers$.set("user-agent", SDK_METADATA.userAgent); + headers$.set("Accept", "application/json"); - const responseContentType: string = httpRes?.headers?.["content-type"] ?? ""; + const path$ = this.templateURLComponent("/testing/credit-cards")(); - if (httpRes?.status == null) { - throw new Error(`status code not found in response: ${httpRes}`); - } + const securitySettings$ = this.resolveSecurity([ + { value: security?.apiKey, fieldName: "X-API-Key", type: "apiKey:header" }, + ]); + + const response = await this.fetch$( + { security: securitySettings$, method: "GET", path: path$, headers: headers$ }, + options + ); + + const responseFields$ = { + ContentType: response.headers.get("content-type") ?? "application/octet-stream", + StatusCode: response.status, + RawResponse: response, + }; - const res: operations.TestingCreditCardGetResponse = - new operations.TestingCreditCardGetResponse({ - statusCode: httpRes.status, - contentType: responseContentType, - rawResponse: httpRes, + if (this.matchResponse(response, 200, "application/json")) { + const responseBody = await response.json(); + const result = operations.TestingCreditCardGetResponse$.inboundSchema.parse({ + ...responseFields$, + "test-credit-card": responseBody, }); - const decodedRes = new TextDecoder().decode(httpRes?.data); - switch (true) { - case httpRes?.status == 200: - if (utils.matchContentType(responseContentType, `application/json`)) { - res.testCreditCard = utils.objectToClass( - JSON.parse(decodedRes), - components.TestCreditCard - ); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 400 && httpRes?.status < 500: - if (utils.matchContentType(responseContentType, `application/json`)) { - const err = utils.objectToClass(JSON.parse(decodedRes), errors.ErrorT); - err.rawResponse = httpRes; - throw new errors.ErrorT(err); - } else { - throw new errors.SDKError( - "unknown content-type received: " + responseContentType, - httpRes.status, - decodedRes, - httpRes - ); - } - break; - case httpRes?.status >= 500 && httpRes?.status < 600: - throw new errors.SDKError( - "API error occurred", - httpRes.status, - decodedRes, - httpRes - ); - default: - break; + return result; + } else if (this.matchStatusCode(response, "default")) { + // fallthrough + } else { + const responseBody = await response.text(); + throw new errors.SDKError("Unexpected API response", response, responseBody); } - return res; + return operations.TestingCreditCardGetResponse$.inboundSchema.parse(responseFields$); } } diff --git a/src/types/blobs.ts b/src/types/blobs.ts new file mode 100644 index 0000000..2c21e41 --- /dev/null +++ b/src/types/blobs.ts @@ -0,0 +1,30 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +import * as z from "zod"; + +export const blobLikeSchema = z.custom(isBlobLike, { + message: "expected a Blob, File or Blob-like object", + fatal: true, +}); + +export function isBlobLike(val: unknown): val is Blob { + if (val instanceof Blob) { + return true; + } + + if (typeof val !== "object" || val == null || !(Symbol.toStringTag in val)) { + return false; + } + + const name = val[Symbol.toStringTag]; + if (typeof name !== "string") { + return false; + } + if (name !== "Blob" && name !== "File") { + return false; + } + + return "stream" in val && typeof val.stream === "function"; +} diff --git a/src/types/decimal.ts b/src/types/decimal.ts new file mode 100644 index 0000000..aeba085 --- /dev/null +++ b/src/types/decimal.ts @@ -0,0 +1,5 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +export * from "decimal.js"; diff --git a/src/types/index.ts b/src/types/index.ts index de759a3..b824c13 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -2,4 +2,8 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ -export * from "./rfcdate"; +export { Decimal } from "./decimal"; +export { RFCDate } from "./rfcdate"; +export { blobLikeSchema, isBlobLike } from "./blobs"; +export type { Paginator, PageIterator } from "./operations"; +export { createPageIterator } from "./operations"; diff --git a/src/types/operations.ts b/src/types/operations.ts new file mode 100644 index 0000000..8e38c2f --- /dev/null +++ b/src/types/operations.ts @@ -0,0 +1,25 @@ +/* + * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. + */ + +export type Paginator = () => Promise> | null; + +export type PageIterator = Result & { + next: Paginator; + [Symbol.asyncIterator]: () => AsyncIterableIterator; +}; + +export function createPageIterator( + page: Result & { next: Paginator }, +) { + return { + [Symbol.asyncIterator]: async function* paginator() { + yield page; + + let p: typeof page | null = page; + for (p = await p.next(); p != null; p = await p.next()) { + yield p; + } + }, + }; +} diff --git a/src/types/rfcdate.ts b/src/types/rfcdate.ts index f423fd4..c37d292 100644 --- a/src/types/rfcdate.ts +++ b/src/types/rfcdate.ts @@ -2,47 +2,53 @@ * Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT. */ +const dateRE = /^\d{4}-\d{2}-\d{2}$/; + export class RFCDate { - private date: Date; + private serialized: string; - constructor(date: Date | { date: string } | string | undefined) { - if (!date) { - this.date = new Date(); - return; - } + /** + * Creates a new RFCDate instance using today's date. + */ + static today() { + return new RFCDate(new Date()); + } - if (typeof date === "string") { - this.date = new Date(date); - return; - } - if (date instanceof Date) { - this.date = date as Date; - return; + /** + * Creates a new RFCDate instance using the provided input. + * If a string is used then in must be in the format YYYY-MM-DD. + * + * @param date A Date object or a date string in YYYY-MM-DD format + * @example + * new RFCDate("2022-01-01") + * @example + * new RFCDate(new Date()) + */ + constructor(date: Date | string) { + if (typeof date === "string" && !dateRE.test(date)) { + throw new RangeError( + "RFCDate: date strings must be in the format YYYY-MM-DD: " + date, + ); } - const anyDate = date as any; - if (date && !!anyDate.date) { - this.date = new Date(anyDate.date); + const value = new Date(date); + if (isNaN(+value)) { + throw new RangeError("RFCDate: invalid date provided: " + date); } - } - public getDate(): Date { - return this.date; + this.serialized = value.toISOString().slice(0, "YYYY-MM-DD".length); + if (!dateRE.test(this.serialized)) { + throw new TypeError( + `RFCDate: failed to build valid date with given value: ${date} serialized to ${this.serialized}`, + ); + } } - public toJSON(): string { + toJSON(): string { return this.toString(); } - public toString(): string { - const dateRegex = /^(\d{4})-(\d{2})-(\d{2})/; - - const matches = this.date.toISOString().match(dateRegex); - if (matches == null) { - throw new Error("Date format is not valid"); - } - - const [, year, month, day]: RegExpMatchArray = matches; - return `${year}-${month}-${day}`; + toString(): string { + return this.serialized; } } diff --git a/tsconfig.json b/tsconfig.json index 0e90e5e..7a86d2d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,27 +1,40 @@ { "compilerOptions": { - "target": "es5", - "lib": ["es2021"], - "baseUrl": "src", - "rootDir": "src", - "outDir": "dist", + "incremental": true, + "tsBuildInfoFile": ".tsbuildinfo", + "target": "ES2018", + "lib": ["ES2022", "DOM", "DOM.Iterable"], + + "module": "Node16", + "moduleResolution": "Node16", + "allowJs": true, - "downlevelIteration": true, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, + + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": ".", + + + // https://github.com/tsconfig/bases/blob/a1bf7c0fa2e094b068ca3e1448ca2ece4157977e/bases/strictest.json "strict": true, - "forceConsistentCasingInFileNames": true, + "allowUnusedLabels": false, + "allowUnreachableCode": false, + "exactOptionalPropertyTypes": true, + "useUnknownInCatchVariables": true, "noFallthroughCasesInSwitch": true, - "module": "commonjs", - "moduleResolution": "node", - "resolveJsonModule": true, + "noImplicitOverride": true, + "noImplicitReturns": true, + "noPropertyAccessFromIndexSignature": true, + "noUncheckedIndexedAccess": true, + "noUnusedLocals": true, + "noUnusedParameters": true, "isolatedModules": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "strictPropertyInitialization": false, - "declaration": true, - "types": ["reflect-metadata"] + "checkJs": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true }, - "include": ["src"] + "include": ["src"], + "exclude": ["node_modules"] }